Очистка данных удаленных версий записей
Во избежание перезатирания данных в процессе их перемещения, применения операции VACUUM или записи поверх удаленных в СУБД Pangolin реализовано решение очистки данных удаленных версий записей. В рамках функциональности осуществляется перезапись:
- помеченного как «неиспользуемое» пространства страниц данных в файлах таблиц при выполнении
VACUUM(как вручную, так и автоматически); - данных, относящихся к удаленным записям и старым версиям измененных (как в основных файлах таблиц, так и в TOAST-файлах таблиц).
Такой механизм требуется системам, к которым предъявляются требования по гарантиям удаления данных (например, персональных), в том числе из файлов таблиц баз данных, используемых системами.
Решение не применяется к индексам, построенным по таблицам с перезатираемыми данными, и содержащим значения из таблиц в качестве ключей.
Описание
Автоочистка для конкретной таблицы будет выполнена только при выполнении определенных условий, регулируемых настройками автоочистки для таблицы, а также характером действий, выполненных над данными в таблице.
Для гарантированного выполнения автоматического VACUUM по таблице с периодичностью установленного интервала удаления рекомендуется явное выполнение очистки по таблицам, в которых должны быть удалены данные удаленных записей, а также старые версии измененных записей.
В случае, если в СУБД присутствует хотя бы одна транзакция, в области видимости которой находятся удаленные или старые версии записей, подлежащих перезатиранию, данные могут быть не перезатерты при выполнении VACUUM (как ручного, так и автоматического). Для гарантированного перезатирания данных необходимо отсутствие активных транзакций на момент выполнения очистки.
Перезапись удаленных записей и старых версий измененных записей может выполняться независимо от реализованной функциональности при переразмещении записей внутри страницы данных или при добавлении новых записей поверх ранее удаленных.
Перезапись данных в табличных страницах происходит при вытеснении страницы из памяти shared buffers, что не гарантировано по времени. Для гарантии перезаписи страниц данных необходимо после выполнения очистки выполнить команду CHECKPOINT.
Команда CHECKPOINT относится к административным командам, влияющим на работу всего кластера СУБД, и доступна для выполнения только администраторам СУБД.
Настройка
Управление активностью функциональности выполняется настроечным параметром СУБД nonrestorable_tuples_cleanup (тип - bool, контекст - PGC_SIGHUP). Изменение данного настроечного параметра доступно только роли администратора СУБД.
Значение по умолчанию: false/off. При значении true/on выполняется затирание данных в неиспользуемом пространстве страниц данных таблицы БД.
Изменение параметра не требует перезапуска сервера СУБД.
Управление
Права на выполнение действий в рамках функциональности имеют следующие роли:
| Действие | Администратор СУБД | Владелец БД или таблицы | Пользователь с правами на выполнение VACUUM |
|---|---|---|---|
| Задание значений параметра управления активностью функциональности | + | - | - |
Выполнение команды VACUUM | + | + | + |
Выполнение команды CHECKPOINT | + | - | - |
Альтернативно задание значений параметра управления активностью функциональности может быть выполнено приавтоматизированном развертывании СУБД.