Удаление "брошенных" файлов в ADB
Обзор
"Брошенные" (orphaned) файлы — это файлы, не ассоциированные ни с одной из существующих таблиц в базе данных. Они могут остаться в файловой системе после аварийного завершения некоторого бэкенд-процесса, связанного с созданием новой таблицы в рамках транзакции. Причинами сбоя могут быть отказы оборудования, нехватка свободного места на диске и так далее. В результате успешного восстановления системы после сбоя незакоммиченные изменения в базе данных отсутствуют (новой таблицы нет в системном каталоге), однако на сегмент-хостах могут остаться файлы данных этой таблицы. Со временем таких файлов, занимающих место на диске, может становиться все больше, а их поиск и удаление требуют времени и сопряжены с рисками удаления полезных данных.
Начиная с версии 6.29.0.3 в ADB поддерживается автоматическое отслеживание и удаление "брошенных" файлов на уровне ядра СУБД в случае прерывания транзакций. В предыдущих версиях ADB файлы данных удалялись автоматически лишь для штатно завершившихся транзакций (в случае их отката через ABORT
), а "брошенные" файлы возможно было удалить лишь вручную (например, используя для их поиска функции и представления расширения gp_check_functions).
Подход к обработке "брошенных" файлов, реализованный в ADB 6.29.0.3, основан на следующих принципах:
-
В случае коммита или отката транзакции, создавшей таблицу, ядро СУБД, как и ранее, в штатном режиме самостоятельно определяет, как обработать файлы данных таблицы. В случае вызова
ABORT
файлы удаляются, в случаеCOMMIT PREPARED
— сохраняются. -
Для удаления брошенных файлов рассматриваются лишь транзакции в статусе
TRANSACTION_STATUS_IN_PROGRESS
. СУБД полагает, что транзакция в этом статусе может прерваться нештатно и оставить "брошенные" файлы. Транзакции в других статусах не рассматриваются, так как считаются обработанными штатным образом (см. предыдущий пункт). -
Решение о необходимости удаления файлов принимается СУБД автоматически на этапе выполнения восстановления (recovery).
ВАЖНО
|
Настройка
Автоматическое отслеживание и удаление "брошенных" файлов в нештатных ситуациях регулируется при помощи GUC gp_track_pending_delete
. По умолчанию параметру присвоено значение on
, что означает использование новой обработки файлов, реализованной в ADB 6.29.0.3. Если по каким-либо причинам ее следует отключить, измените значение параметра на off
. Следует учитывать, что параметр gp_track_pending_delete
можно изменить только путем редактирования файла postgresql.conf на всех сегментах с помощью утилиты gpconfig
, а для применения изменений требуется перезапуск СУБД (перезагрузки конфигурационного файла недостаточно).
Ниже показан пример изменения значения gp_track_pending_delete
:
-
Подключитесь к master-хосту ADB под пользователем
gpadmin
:$ sudo su - gpadmin
-
Выведите текущее значение параметра:
$ gpconfig -s gp_track_pending_delete
Результат:
Values on all segments are consistent GUC : gp_track_pending_delete Master value: on Segment value: on
-
Измените значение параметра на всех сегментах:
$ gpconfig -c gp_track_pending_delete -v off
Результат:
20250827:10:10:29:2622827 gpconfig:bds-mdw:gpadmin-[INFO]:-completed successfully with parameters '-c gp_track_pending_delete -v off'
-
Перезапустите СУБД:
$ gpstop -r -a
-
Проверьте значение параметра повторно, чтобы убедиться в применении изменений:
$ gpconfig -s gp_track_pending_delete
Вывод команды:
Values on all segments are consistent GUC : gp_track_pending_delete Master value: off Segment value: off