Перенос секции в другую область хранения
В некоторых случаях может понадобиться перенести секцию в новую область хранения, наиболее частые причины приведены ниже:
- Секция интенсивно используется и размещается на том же устройстве хранения, что и другие секции. Негативное влияние на производительность велико. Для повышения производительности вы решили перенести секцию на другое устройство хранения.
- Доступное пространство для хранения на диске закончилось или заканчивается.
- Для улучшения производительности было решено перенести наиболее загруженные секции на более быстрые диски.
Для перемещения секции и, возможно, связанные с ней индексы в другую область хранения в онлайн, применяется утилита PROUTIL TABLEMOVE:
proutil db-name -C tablemove table-name partition-area-name [index-area-name] partition partition-name
Как работает PROUTIL TABLEMOVE:
- Получает EXCLUSIVE-локировку на секцию;
- Перемещает секцию и все её записи в новую область;
- Строит все локальные индексы секции:
- Если область хранения индексов не была указана, то перестройка индексов происходит в оригинальной области.
- Если область хранения индексов была указана, то все индексы перемещаются в новую область и там перестраиваются.
- Удаляет секцию и все её записи из старой области;
- Удаляет все старые локальные индексы, ассоциированные с секцией.
Пример. В таблице Order секция Order_2014 размещена в области хранения OrderDate1 и мы хотим переместить эту секцию и её индексы в другую область хранения. Следующая команда PROUTIL TABLEMOVE выполняет перемещение секции Order_2014 и её локальные индексы в области OrderData2 и OrderIndex2, соответственно.
Последствия выполнения PROUTIL TABLEMOVE
Перед принятием решения о переносе секции в другую область хранения с помощью утилиты PROUTIL TABLEMOVE всегда помните о следующих последствиях:
- Перемещение записей секции из одной области в другую приводит к тому, что все ROWID этих записей становятся недействительными, также становятся недействительными индексы секции. В связи с этим, утилита автоматически перестраивает индексы, не зависимо от того, перемещали вы их или нет.
- Если вы не укажете параметр index-area-name, индексы таблицы не будут перемещены.
- Во время перемещения секции и связанных с ней индексов доступ к данным ограничен. И хотя приложение может читать записи в это время, конечный пользователь может получить некорректные результаты, так как операция перемещения выполняет множество различных изменений в индексах. Кроме того, поскольку утилита получает эксклюзивную блокировку, пользователи не смогу обновлять данные.