
Усечение области хранения данных в реальном времени
Администраторы баз данных могут сталкиваться с необходимостью удаления архивных или уже обработанных данных, которые больше не требуются. Хранение данных в определенной области может приводить к увеличению затрат на вычислительные ресурсы из-за значительного роста объема данных. В связи с этим, администраторам баз данных необходимо оперативно удалять данные в режиме онлайн. До выпуска OpenEdge 12.8 LTS было доступно усечение области только в оффлайн режиме после отключения after-imaging и усечения файла before-imaging.
Новая функция позволяет администраторам баз данных использовать команду PROUTIL TRUNCATE AREA для усечения областей типа I и типа II в режиме реального времени, когда база данных запущена, а процессы BI и AI активны. Перед удалением данных в режиме онлайн рекомендуется использовать TABLE DROP или ONLINE TABLE TRUNCATION для очистки области хранения от таблиц, связанных с ними индексов и больших объектов (LOB). После выполнения этой функции администраторы баз данных могут удалить пустые области хранения данных с помощью команды PROSTRCT REMOVE в оффлайн режиме или PROSTRCT REMOVEONLINE в онлайн режиме.
Процесс усечения областей хранения данных включает следующие действия:
- Очистка пространства, ранее выделенного для таблиц и индексов, в пустых областях хранения данных без изменения структуры схемы.
- Снижение верхней границы использованных блоков, отражающей удаление объектов.
- Поддержание локальности дисков. Например, администратор баз данных может перенести таблицу размером 100 ГБ, занимающую вместе с связанными объектами 2 ТБ в одной области, на первые 100 ГБ недавно усеченной области.
- Решение проблемы фрагментации записей и ускорение загрузки данных при перемещении таблиц и индексов в определенную область.
Для выполнения усечения области хранения данных необходимо запустить команду PROUTIL TRUNCATE AREA.
Усечение может быть полезно при выполнении двоичного дампа и загрузки для реорганизации данных и повышения производительности. Однако, производительность может быть снижена из-за управления пулом буферов при выполнении команды PROUTIL TRUNCATE AREA в работающей базе данных.
Усечение областей хранения данных
Перед усечением области хранения данных в работающей базе данных необходимо убедиться, что она не содержит объектов.
Усечение является важным этапом процесса удаления областей хранения данных и экстентов из базы данных. Однако, поскольку утилита PROSTRCT REMOVEONLINE выполняет усечение, удаление областей хранения данных и снижение верхней границы использованных блоков, запуск команды PROUTIL TRUNCATE AREA не является обязательным этапом этого процесса.
Усечение областей хранения данных возможно для областей типа I и типа II, а также для таблиц, принадлежащих PUB и не PUB. Усечение можно выполнять как во время работы базы данных, так и после её остановки:
- Если необходимо очистить области с файлами before-image или after-image, а также журналами транзакций, базу данных следует остановить. Для очистки областей в остановленной базе данных предварительно необходимо отключить after-imaging и усечь файл before-image. Для усечения областей в оффлайн режиме требуется пересоздание целевой репликации.
- Если необходимо только усечь области хранения данных, это можно сделать в работающей базе данных без отключения after-imaging или усечения файла before-image.
Освобождение места для хранения данных
В некоторых ситуациях администраторам баз данных может потребоваться перемещение областей хранения данных во время работы базы данных. Например, перемещение экстентов из медленного хранилища, создание экстентов на новом хранилище, перемещение объектов в новую область и последующее удаление старой. В облачных средах это позволяет снизить требования к пространству для клиентов без необходимости планового периода обслуживания.
Для освобождения места для хранения данных операционной системы необходимо выполнить следующие действия:
- Усечь табличные данные в интересующей области для перемещения таблиц и индексов в новую область и освобождения места в области хранения. Для этого используется следующий синтаксис:
proutil db-name -C tablemove [owner-name.]table-name table-area [index-area] [lob-area][ truncate ]
- Убедиться, что в области хранения данных не осталось объектов, что является обязательным условием для её удаления.
- Удалить экстенты и область хранения данных, а также снизить верхнюю границу использованных блоков с помощью команды PROSTRCT REMOVEONLINE. Для этого используется следующий синтаксис:
prostrct removeonline db-name extent-token area-name [-allextents] [-silent]
Усечение таблиц
В случаях, когда необходимо быстро и эффективно удалить все данные, связанные с конкретной таблицей, во время функционирования базы данных, особенно для больших таблиц истории или для оптимизации затрат при развертывании системы в облачной среде, можно воспользоваться процедурой усечения таблиц.
Для очистки таблицы при её перемещении используется квалификатор TRUNCATE в команде утилиты PROUTIL TABLEMOVE. Данный квалификатор удаляет все данные из таблицы, включая связанные индексы и большие объекты (LOB). После выполнения операции пространство, ранее занимаемое таблицей, становится доступным для повторного использования.
При использовании команды PROUTIL TABLEMOVE с квалификатором TRUNCATE необходимо указать целевую область хранения. Если указана другая область, то таблица будет очищена и перемещена в новую область. В случае указания той же области, таблица будет очищена на месте и останется в исходной области хранения.
Для задания целевых областей по умолчанию для перемещения индексов и больших объектов, связанных с конкретной таблицей, можно использовать дополнительные параметры в команде PROUTIL TABLEMOVE. При этом вторая указанная область будет целевой для индексов, а третья — для больших объектов.
Например, для перемещения данных таблицы «Клиенты» в область 8 без перемещения индексов и больших объектов используется следующая команда:
proutil testdb -C tablemove customer “Area 8” truncate
Для перемещения данных таблицы в область 8 и индексов в область 10 используется следующая команда:
proutil testdb -C tablemove customer “Area 8” “Area 10” truncate
И для перемещения данных таблицы в область 8, индексов в область 9 и больших объектов в область 10 используется следующая команда:
proutil testdb -C tablemove customer “Area 8” “Area 9” “Area 10” truncate
Перед выполнением операции усечения утилита PROUTIL TABLEMOVE TRUNCATE запрашивает подтверждение. Ответ «NO» отменяет операцию, и никаких изменений не происходит. Операция является восстанавливаемой и выполняется в рамках одной транзакции, что позволяет избежать потери данных при отмене транзакции.
Процедура усечения применима к многопользовательским таблицам (multi-tenant), таблице сбора измененных данных (_Cdc-Change-Tracking) и таблице ключевых событий (_KeyEvt). Однако, усечение таблиц аудита, таблиц схемы и секционированных таблиц не допускается. Для усечения секционированных таблиц следует использовать команду PROUTIL PARTITIONMANAGE TRUNCATE.
Репликация автоматически выполняет усечение таблицы на каждой целевой базе данных.
Как правило, процедура PROUTIL TABLEMOVE TRUNCATE не влияет на работу приложений. Однако, поскольку она устанавливает исключительную блокировку таблицы и блокирует все индексы для защиты данных, может возникнуть конкуренция за доступ к усекаемым данным. Запросы данных из ABL после усечения могут возвращать ошибку stale cursor или не возвращать данные. Триггеры приложения не срабатывают, так как данные удаляются на уровне объектов, что может привести к проблемам ссылочной целостности. Поэтому перед выполнением усечения необходимо тщательно проанализировать структуру таблицы и взаимосвязи данных.
Операция усечения регистрируется в файле .lg и функцией KeyEvents.
Усечение таблиц является первым шагом к возврату занимаемого пространства операционной системе. После выполнения усечения таблиц и связанных с ними объектов следует удалить соответствующие области хранения данных.
Удаление области хранения данных
Администраторы баз данных имеют возможность удаления областей хранения данных как в процессе функционирования базы данных, так и после ее остановки.
Для удаления областей хранения данных без необходимости остановки базы данных рекомендуется использовать команду PROSTRCT REMOVEONLINE. Это может быть полезно в ситуациях, когда требуется перенести данные в другую область хранения на альтернативном устройстве и освободить старую область. В облачных средах такой подход позволяет оптимизировать использование дискового пространства без ожидания запланированных периодов обслуживания. При развертывании крупных баз данных это способствует повышению их доступности для конечных пользователей. База данных остается доступной для операций обслуживания данных даже в процессе удаления областей хранения или их экстентов. Все пользователи и процессы, подключенные к базе данных, могут продолжать работу без прерывания.
Следует отметить, что если база данных запущена с параметрами dbnotifytime 0 и usernotifytime 0, то клиенты, находящиеся в режиме ожидания, могут не отвечать на запросы и, возможно, потребуется их отключение.
Большинство пользователей запускают команду PROSTRCT с правами группы. Однако в исключительных случаях администратор баз данных может столкнуться с необходимостью ожидания отключения пользователей, если пользователь инициировал отмену команды PROSTRCT REMOVEONLINE, но не имеет прав на повторное открытие файлов. В такой ситуации администратор баз данных должен остановить базу данных, чтобы пользователи могли закрыть файлы, доступ к которым был заблокирован.
Утилита PROSTRCT REMOVEONLINE способна подключаться к базе данных, функционирующей в многопользовательском режиме, и осуществлять удаление экстентов из областей хранения данных при условии, что эти области не содержат объектов. В случае наличия объектов необходимо использовать специализированные команды PROUTIL, такие как PROUTIL TABLEMOVE, PROUTIL TABLEMOVE TRUNCATE и PROUTIL INDEXMOVE, для их перемещения.
Области, отдельные экстенты или все экстенты могут быть удалены из исходной или целевой базы данных репликации, находящейся в рабочем состоянии.
Также возможно применение команды PROSTRCT REMOVEONLINE в отношении областей данных с поддержкой шифрования и захвата измененных данных (CDC), при условии предварительного отключения этих функций и перемещения всех объектов в альтернативное хранилище.
После завершения удаления всех экстентов из области хранения, утилита осуществляет удаление самой области хранения из базы данных, возвращая выделенное ей дисковое пространство операционной системе. Этот этап является заключительным в процессе освобождения дискового пространства, занимаемого данными.