PostgreSQL | VACUUM FULL без блокировки таблицы

PostgreSQL | VACUUM FULL без блокировки таблицы

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

VACUUM FULL ВСЕГДА БЛОКИРУЕТ ТАБЛИЦУ ДАЖЕ ДЛЯ ЧТЕНИЯ (актуально на осень 2023)!

Но проблему можно решить зайдя с другой стороны.

 

Какие предпосылки у такого рода запроса?

  1. В базе было удалено очень много лишней информации, но место на диске не освободилось
  2. В базе нет лишних данных, но таблицы сами по себе очень большие и все запросы уже сильно тормозят
  3. По данным и запросам всё ок, но наведение чистоты надолго вырубит работу клиентского приложения

Для всех этих случаев нужно использовать «Секционирование Таблиц«. Что оно даёт?

Запросы к таблице остаются ровно такими же, но из-за условия секционирования (например по столбцу первичного уникального целочисленного ключа ID) отдельные небольшие таблицы хранят в себе гораздо меньше данных. Механизм секционирования даёт возможность запускать VACUUM FULL для каждой отдельной секции. В нашем случае это значит, что на сайте будет недоступна некоторая часть данных, а не все. То есть работа приложения не блокируется полностью.

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

Естественно, что такой подход разработки начинает влиять на работу планировщика запросов и ещё некоторые места. Это нужно учитывать.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Официальный сайт клиента DBeaver для СУБД PostgreSQLhttps://dbeaver.io