PostgreSQL 16, выпущенный в сентябре 2023 года, приносит значительные улучшения производительности и множество новых возможностей в популярную открытую реляционную базу данных. Эти улучшения охватывают различные аспекты управления базой данных, включая скорость загрузки данных, варианты распределения данных и анализ производительности запросов. Вы можете попробовать PostgreSQL 16 как на Amazon Aurora PostgreSQL-Compatible Edition, так и на Amazon Relational Database Service (Amazon RDS) для PostgreSQL.
Новые возможности и улучшения логической репликации
Логическая репликация в PostgreSQL 16 вводит несколько новых функций, включая логическое декодирование на резервных копиях и параллельное применение логической репликации. Эти улучшения предоставляют более детальный контроль над репликацией данных и уменьшают задержку.
Параллельное применение больших транзакций
В предыдущих версиях большие транзакции отправлялись в нескольких потоках, что вызывало задержки в репликации. PostgreSQL 16 вводит опцию параллельного применения, которая записывает данные непосредственно в целевую таблицу с использованием нескольких фоновых рабочих процессов, значительно уменьшая задержку. Эта опция может быть включена при создании подписки, а столбец substream в каталожной таблице pg_subscription указывает, включена ли параллельная опция.
Пример: Репликация транзакции с 10 миллионами строк
Мы настроили базы данных RDS, включили параметры логической репликации и настроили репликацию через метод pub/sub. Следующий код демонстрирует настройку:
psql -d postgres -h primary_rds_endpoint -p 5432 -c "CREATE PUBLICATION logical_pub FOR TABLE large_tabl;"
Для сервера подписки:
psql -d postgres -h secondary_rds_endpoint -p 5432 -c "CREATE SUBSCRIPTION logical_sub connection 'dbname=postgres host=primary_rds_endpoint port=5432 password=password user=postgres' PUBLICATION logical_pub;"
Мы вставили данные в исходную таблицу, что заняло около 1 минуты:
INSERT INTO large_tabl VALUES(generate_series(1,10000000),md5(random()::text),now(),md5(random()::text));
INSERT 0 10000000
Time: 63447.643 ms (01:03.448)
Без параллельной опции репликация данных заняла около 2.5 минут. С включенной параллельной опцией это заняло около 1 минуты. Это демонстрирует значительное сокращение времени репликации с параллельным применением.
Логическая репликация с резервной копии
PostgreSQL 16 позволяет логическую репликацию с резервной копии, уменьшая нагрузку на основную инстанцию. Эта функция иллюстрируется настройкой трех баз данных, работающих на разных портах, с подключением между резервной копией и другой инстанцией с использованием логической репликации.
Новая функциональность SQL/JSON
PostgreSQL 16 улучшает свои возможности работы с JSON, вводя такие функции, как предикат IS JSON, который проверяет корректность JSON-объектов на основе их структуры. Предикат IS JSON включает тесты, такие как IS JSON VALUE, IS JSON ARRAY, IS JSON OBJECT и IS JSON SCALAR.
Кроме того, PostgreSQL 16 поддерживает стандартные конструкторы SQL/JSON для типов JSON, такие как JSON_ARRAY(), JSON_ARRAYAGG(), JSON_OBJECT() и JSON_OBJECTAGG(). Эти конструкторы позволяют более точно и эффективно обрабатывать данные JSON.
Ускорение одновременного ввода данных с помощью COPY
PostgreSQL 16 вводит значительное обновление своей функции массового расширения для отношений, позволяя одновременно расширять несколько блоков. Это уменьшает накладные расходы и улучшает производительность при одновременной загрузке данных.