PostgreSQL 16: улучшение производительности и новые возможности

Обновлено: 13 июля, 2024

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 вводит значительное обновление своей функции массового расширения для отношений, позволяя одновременно расширять несколько блоков. Это уменьшает накладные расходы и улучшает производительность при одновременной загрузке данных.

Опубликовано: 13 июля, 2024

ЕЩЕ СТАТЬИ ПО ДАННОЙ ТЕМЕ

Поддержка Postgre SQL

Поддержка — это когда у вас возникает техническая
проблема с существующей системой,
и вам необходимо некоторое руководство