Для PostgreSQL предложено новое хранилище zheap
Как сообщает opennet.ru разработчики из компании EnterpriseDB представили новое хранилище zheap, которое предложено для включения в состав СУБД PostgreSQL 12. Хранилище zheap разработано для решения проблемы с разрастанием файлов с содержимым БД в результате фрагментации при обновлении содержимого записей и отличается от традиционного хранилища тем, что минимизирует необходимость выполнения операции VACUUM.
Суть предложенного в zheap формата хранения данных на диске в сохранении в основном хранилище только актуальных данных и выноса старых версий записей в отдельный лог отката изменений. При выполнении операций обновления записей данные в основном хранилище заменяются по месту, без применения схемы copy-on-write. Блоки, освобождающиеся в результате операций удаления или выполнения транзакции, для которых невозможна замена данных по месту, могут оперативно повторно использоваться сразу после высвобождения. Подобные особенности позволяют улучшить контроль за разрастанием хранилища и сделать его более предсказуемым.
Новое хранилище также позволяет добиться увеличения производительности и сократить размер служебных данных. Увеличение производительности достигается благодаря сокращению операций записи, путем исключения перезаписи страниц и выборочного обновления только индексированных столбцов без обновления каждого индекса. Оптимизация размера обеспечивается благодаря сокращению размера блоков (сокращен заголовок и исключено добавочное заполнение для выравнивания блока).
Тестирование производительности показало общее увеличение производительности, сокращение размера хранилища и более эффективное выполнение операций отката изменений. Наибольший выигрыш в производительности (до 45%) достигается в условиях большого числа операций перезаписи, а также когда операция UPDATE приводит к обновлению небольшого числа проиндексированных столбцов. Применение zheap также позволяет избавиться от проседания производительности во время активации процесса autovacuum и сократить число операций записи в WAL-лог. Из недостатков zheap упоминается более ресурсоемкое выполнение операций удаления и сброса транзакций, а также снижение производительности при выполнении обновлений, затрагивающих большую часть проиндексированных столбцов.