Перейти к основному содержимому

Очистка данных удаленных версий записей

Во избежание перезатирания данных в процессе их перемещения, применения операции VACUUM или записи поверх удаленных в СУБД Pangolin реализовано решение очистки данных удаленных версий записей. В рамках функциональности осуществляется перезапись:

  • помеченного как «неиспользуемое» пространства страниц данных в файлах таблиц при выполнении VACUUM (как вручную, так и автоматически);
  • данных, относящихся к удаленным записям и старым версиям измененных (как в основных файлах таблиц, так и в TOAST-файлах таблиц).

Такой механизм требуется системам, к которым предъявляются требования по гарантиям удаления данных (например, персональных), в том числе из файлов таблиц баз данных, используемых системами.

Важно

Решение не применяется к индексам, построенным по таблицам с перезатираемыми данными, и содержащим значения из таблиц в качестве ключей.

Описание

Автоочистка для конкретной таблицы будет выполнена только при выполнении определенных условий, регулируемых настройками автоочистки для таблицы, а также характером действий, выполненных над данными в таблице.

Для гарантированного выполнения автоматического VACUUM по таблице с периодичностью установленного интервала удаления рекомендуется явное выполнение очистки по таблицам, в которых должны быть удалены данные удаленных записей, а также старые версии измененных записей.

В случае, если в СУБД присутствует хотя бы одна транзакция, в области видимости которой находятся удаленные или старые версии записей, подлежащих перезатиранию, данные могут быть не перезатерты при выполнении VACUUM (как ручного, так и автоматического). Для гарантированного перезатирания данных необходимо отсутствие активных транзакций на момент выполнения очистки.

Перезапись удаленных записей и старых версий измененных записей может выполняться независимо от реализованной функциональности при переразмещении записей внутри страницы данных или при добавлении новых записей поверх ранее удаленных.

Перезапись данных в табличных страницах происходит при вытеснении страницы из памяти shared buffers, что не гарантировано по времени. Для гарантии перезаписи страниц данных необходимо после выполнения очистки выполнить команду CHECKPOINT.

примечание

Команда CHECKPOINT относится к административным командам, влияющим на работу всего кластера СУБД, и доступна для выполнения только администраторам СУБД.

Настройка

Управление активностью функциональности выполняется настроечным параметром СУБД nonrestorable_tuples_cleanup (тип - bool, контекст - PGC_SIGHUP). Изменение данного настроечного параметра доступно только роли администратора СУБД.

Значение по умолчанию: false/off. При значении true/on выполняется затирание данных в неиспользуемом пространстве страниц данных таблицы БД.

Изменение параметра не требует перезапуска сервера СУБД.

Управление

Права на выполнение действий в рамках функциональности имеют следующие роли:

ДействиеАдминистратор СУБДВладелец БД или таблицыПользователь с правами на выполнение VACUUM
Задание значений параметра управления активностью функциональности+--
Выполнение команды VACUUM+++
Выполнение команды CHECKPOINT+--
Примечание

Альтернативно задание значений параметра управления активностью функциональности может быть выполнено приавтоматизированном развертывании СУБД.