Что нового в PostgreSQL 16? Итоги PGConf.Russia 2023

16.04.2023

Инженеры компании DBI участвовали в международной технической конференции PGConf.Russia 2023 по открытой СУБД PostgreSQL!

Здесь ежегодно собираются более 700 разработчиков, администраторов баз данных, IT-директоров и менеджеров из разных городов и стран. В течение 2-х дней участники слушали блиц-доклады, обменивались профессиональным опытом и обсуждали задачи, с которыми сталкиваются ежедневно в работе.

Главные темы — миграция с зарубежных систем на Postgres, выход новой версии PostgreSQL 16, а также эксплуатация СУБД. Спикеры конференции описали мониторинг и настройку СУБД, в ряде докладов рассказали об отказоустойчивых и масштабируемых системах, а разработчики поделились личным опытом.

Новая версия PostgreSQL 16

В ней появится двунаправленная логическая репликация, которая позволит настроить аналог мультимастера, не используя вспомогательные программы. Параметр reserverd_connections для «обычных» пользователей поможет настроить стабильную работу мониторинговых процессов. В случае если пул соединений будет переполнен, это позволит не терять важные данные мониторинга, которые нужны для анализа подобных проблем. Для пользователей мониторинга будет добавлена встроенная роль MAINTAIN. Она позволит собирать метрики без прав SUPERUSER.

К новым функциям можно отнести также использование расширения pg_profile, которое позволяет:

  • получить статистику SQL в разных разрезах
  • посмотреть объёмные таблицы, которые отсканированы последовательным образом. Это позволяет понять для каких таблиц не хватает индексов
  • увидеть unused indexes

В PostgreSQL 16 расширены подходы анализа проблемы при обновлении и восстановлении поврежденных данных.

Про переход с Oracle и других зарубежных систем на PostgreSQL

Переход с Oracle на PostgreSQL можно осуществить с помощью Ora2Pg. Благодаря этому инструменту допускается перенести данные из Oracle в Postgres. Однако есть множество подводных камней, которые могут помешать это сделать. Всегда стоит учитывать особенности этих двух СУБД, такие как: типы данных и их отличия, разницу работы функций и их логики. Например, легко ошибиться в точности TIMESTAMP формата или запутаться в понятиях о типе NULL в Oracle и PostgreSQL. От этих особенностей надо отталкиваться при формировании миграционного плана, а делать миграцию лучше поэтапно.

Поврежденные данные

Конечно, чтобы не допустить потери данных, лучше всегда делать backup. Однако если по какой-либо причине возникли повреждения, а бэкапов нет, то есть несколько инструментов, которые помогут частично восстановить повреждённые данные. Физические повреждения блоков можно найти, запустив функцию molotilka. Функция поочередно перечитает каждый блок объекта и выдаёт ошибку, если найдёт повреждённый блок.

Что делать потом? — Есть несколько решений, например, pg_filedump, pg_waldump. С их помощью можно попытаться найти в какое время повредились данные, какие блоки и какого именно объекта побились, вплоть до поиска строки в таблице. Затем блоки можно очистить, например, с помощью pg_surgery. pg_surgery. Это очень опасная функция, которая может сильно навредить всему кластеру. Однако в опытных руках она может так же и спасти БД от полной потери данных.

Немного про мониторинг

Небезызвестный pg_profile собирает в себе массу метрик, которые помогают проанализировать здоровье БД. Сейчас в публичной ветке на github появился профиль для графаны, что делает развертку минимального мониторинга еще проще, а источником данных — сам Postgres.

Автоматическое устранение bloat в индексах

Для этого идеально подойдёт pg_index_watch — это расширение, которое помогает бороться с bloat в индексах на автоматической основе. Расширение постоянно собирает статистику по блоату в индексах. На основе полученных данных и настроек перестраивает индексы автоматически в режиме CONCURRENTLY. Важный момент, что утилита работает на основе первоначально полученных данных об объекте, из-за чего после установки расширения она перестраивает все индексы в БД, что может стать неприятным сюрпризом.

Кейсы, о которых рассказали на встрече

  1. Как сделать всё «с нуля», с помощью Postgres Professional, описали ребята одной из компаний. Инженеры пытаются построить решение в стиле Patroni и внести его «в коробоку». Кластер поднимается ctl утилитой и затем стартует.
  2. Другой кейс про шардирование базы данных при помощи различных инструментов масштабирования, таких как: Citus DB, Greenplum, Cockroach DB, Yugabyte DB и Shardman. Докладчики описали разницу между этими реализациями, достоинства и недостатки.
  3. Некоторые инженеры IT- компаний проводят миграцию баз данных на PostgreSQL с использованием Debezium (CDC-миграция) или Apache Airflow (запуск DAG`ов).

На основе полученной информации мы выделили критерии, которые могут повлиять на трудозатраты для выполнения миграции в наших будущих проектах:

  1. Количество процедур, функций и пакетов, которые необходимо будет адаптировать и переписать.
  2. Объем и типы данных.
  3. Возможность долгого простоя БД, были рассмотрены случаи, где он возможен.
  4. Различия в логике выполнения некоторых функций или процедур для разных СУБД. Рассмотрели отличия Oracle — PostgreSQL.

В течение последних 6 лет DBI активно работает с PostgreSQL. Более двадцати компаний находятся на поддержке в формате 24/7, а PostgreSQL используют как стандарт при разработке новых решений. Мы реализовали три проекта по миграции с MSSQL и Oracle на PostgreSQL и готовы к новым IT-проектам.

Благодарим организаторов компании Postgres Professional за то, что собрали всех вместе, устроили такое интересное мероприятие и красиво завершили его лекцией об экстремальной астрономии!