E.6. Примечания к выпуску для Tantor Certified 15.6.1#

E.6. Примечания к выпуску для Tantor Certified 15.6.1

E.6. Примечания к выпуску для Tantor Certified 15.6.1

Дата релиза:  2024-05-22

E.6.1. Обзор

Tantor Certified — это российская СУБД, основанная на обновленной и улучшенной версии СУБД PostgreSQL. Tantor Certified 15.6.1 основана на PostgreSQL 15.

Ниже приведены дополнительные модули и утилиты, добавленные в Tantor Certified, а также список изменений в ядре сервера.

E.6.2. Существенные отличия в этой версии

E.6.2.1. Реализован 64-битный счетчик транзакций

  • В PostgreSQL есть ограничение (N = 2^32) на количество идентификаторов транзакций (XID); при достижении этого ограничения необходимо выполнить процедуру заморозки. Эта процедура необходима для предотвращения зацикливания (каждые N/2 транзакций), что приводит к снижению производительности из-за необходимости чтения и перезаписи всех страниц таблицы, которые еще не заморожены. С 64-битным XID эта необходимость фактически откладывается на очень далекое будущее.

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

E.6.2.2. Поддержка автономных транзакций в PL/pgSQL

  • Добавлено расширение языка PL/pgSQL для автономных транзакций. Это расширение частично наследует синтаксис PL/SQL из Oracle (PRAGMA AUTONOMOUS_TRANSACTION).

  • Расширение предоставляет возможность независимого фиксирования или отмены дочерней транзакции без влияния на текущую родительскую транзакцию, например, для поддержки аудита.

  • Расширение языка реализует автономные транзакции через механизм фонового процесса.

  • Будущие версии будут добавлять поддержку расширений языка PL/Python и SQL.

E.6.2.3. Добавлена возможность создания двунаправленной логической репликации

  • Теперь можно использовать двунаправленную логическую репликацию между двумя таблицами, добавив новый параметр origin к команде CREATE SUBSCRIPTION.

  • Параметр origin может иметь два возможных значения: none и any.

  • Установка origin в none означает, что подписка будет запрашивать у издателя только изменения, не имеющие источника. То есть origin=none предотвращает зацикливание при двунаправленной репликации.

  • Установка origin=any означает, что издатель отправляет изменения независимо от их источника (так же, как в PostgreSQL). По умолчанию origin=any.

E.6.2.4. Добавлена поддержка сжатия в библиотеке libpq

  • Добавлена поддержка сжатия в библиотеке libpq, реализованная новым параметром в конфигурации libpq_compression. Функциональность может использоваться клиентскими приложениями и драйверами, написанными на C или других языках, поддерживающих вызовы API к C.

  • Параметр libpq_compression может принимать следующие значения: off, on, lz4, zlib. По умолчанию libpq_compression = off.

  • Сжатие особенно полезно для импорта/экспорта данных с использованием команды COPY и для репликации (как физической, так и логической). Сжатие также может уменьшить время отклика сервера Tantor SE-1С для запросов, возвращающих большие объемы данных (например, JSON, BLOB, текст и т.д.).

libpq-compression details:

E.6.2.5. Реализована SIMD-обработка данных

  • Ускорение обработки данных с помощью нескольких модификаций ядра Tantor Certified, которые реализуют вычислительную модель SIMD (Single Instruction, Multiple Data).

  • Улучшена производительность Tantor Certified за счет более эффективного использования ресурсов процессора, особенно при обработке больших объемов данных или сложной обработки данных, таких как обработка текстовых и JSON данных.

  • Среди реализованных функций: оптимизация линейного поиска, поддержка SSE2 (Streaming SIMD Extensions 2), абстракция зависимых от архитектуры частей, поддержка SIMD NEON.

E.6.2.6. Резервирование соединений

  • Добавлена возможность резервирования слотов соединений для пользователей, не имеющих прав суперпользователя.

  • Соединения зарезервированы с помощью нового параметра конфигурации reserved_connections (в файле postgresql.conf) и доступны только пользователям с новой предопределенной ролью pg_use_reserved_connections.

  • Значение параметра superuser_reserved_connections остается в качестве последнего резерва в случае исчерпания reserved_connections.

E.6.2.7. Добавлен параметр transaction_timeout

  • Параметр transaction_timeout позволяет отменить любую транзакцию, длительность которой превышает указанный период времени. Ограничение распространяется как на явные транзакции (начатые командой BEGIN), так и на неявно начатые транзакции, соответствующие отдельному оператору.

transaction_timeout details:

E.6.2.8. Предварительное чтение блоков для журнала предзаписи (WAL)

  • Производительность улучшена за счет предварительного чтения блоков журнала Tantor Certified (блоки WAL) с использованием системного вызова posix_fadvise() с параметром POSIX_FADV_WILLNEED.

  • Добавлено новое событие WAIT_EVENT_WAL_PREFETCH для отслеживания времени предварительного чтения WAL.

E.6.3. Исправления в ядре Tantor Certified

  • Исправлена неправильная обработка типа данных TYPALIGN_XID при включенной JIT.

  • Исправлена ошибка "cache lookup failed for type" при использовании автономных транзакций.

  • Исправлено поведение автономных транзакций для хранимых процедур.

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

  • Некоторые незначительные исправления, связанные с llvmjit.

  • Внесены изменения для улучшения стабильности СУБД.

  • Изменения, внесенные для улучшения производительности СУБД при большом количестве одновременных подключений.

  • Реализован пул потоков для автономных транзакций, что ускоряет создание автономных транзакций.

  • Расширено использование SIMD (Single Instruction, Multiple Data) для нескольких функций линейного поиска.

  • Объединена версия libzstd, используемая.

  • Оптимизированная производительность планировщика для сценариев 1С.

  • Исправлена редкая ошибка "отсутствует номер фрагмента 0 для toast-значения XXX в pg_toast_XXX" при работе с 64-битным счетчиком транзакций.

  • Улучшена информативность серверных журналов.

E.6.4. Метод поставки

Теперь доступны для установки три пакета:

  • Полный пакет СУБД (сервер, заголовочные файлы, клиентские приложения, libpq5)

  • Клиентские приложения

  • libpq5 (библиотека, которая позволяет пользовательским программам подключаться к серверам баз данных Tantor Certified и PostgreSQL)

E.6.5. Исправления в пакетировании

  • Исправлена логика предварительной установки и пост-деинсталляции для пакетов RPM и DEB.

E.6.6. Дополнительно поставляемые модули

E.6.6.1. Добавленные модули в текущем релизе

Таблица E.1. Таблица расширений

Расширение Описание
credcheck Модуль предоставляет несколько общих проверок учетных данных, которые будут оцениваться во время создания пользователя, изменения пароля и переименования пользователя. С использованием этого расширения можно определить набор правил для разрешения определенного набора учетных данных и набор правил для отклонения определенного типа учетных данных. Это расширение разработано на основе хука check_password_hook PostgreSQL.
dbcopies_decoding Модуль для поддержки механизма копирования базы данных и ускорителя данных.
fasttrun Модуль предоставляет небезопасную для транзакций функцию для усечения временных таблиц без увеличения размера pg_class. Этот модуль необходим для поддержки 1C Enterprise. Операция быстрого усечения не является транзакционной, поэтому ее результаты не могут быть отменены и становятся немедленно видимыми во всех сессиях независимо от уровня изоляции.
fulleq Модуль предоставляет дополнительный оператор эквивалентности для совместимости с Microsoft SQL Server. Этот модуль необходим для поддержки 1С:Предприятие.
hypopg Модуль добавляет поддержку для hypothetical_indexes. Гипотетический или виртуальный индекс — это индекс, который фактически не существует. Таким образом, не требуется ни ЦП, ни диск, ни какие-либо другие ресурсы для его создания. Это полезно, чтобы узнать, могут ли определенные индексы улучшить производительность проблемных запросов, так как можно узнать, будет ли Tantor использовать эти индексы или нет, не тратя ресурсы на их создание.
mchar Модуль, разработанный для улучшения поддержки 1С:Предприятие, самой популярной российской CRM и ERP системы. Реализованы типы MCHAR и MVARCHAR, которые совместимы с MS SQL CHAR и VARCHAR соответственно. Кроме того, эти типы используют библиотеку ICU для сравнения и преобразования регистра, поэтому их поведение идентично на разных операционных системах. В СУБД Tantor также включено расширение citext, которое предоставляет типы, аналогичные MCHAR. Однако это расширение не эмулирует поведение MS-SQL в отношении пробелов в конце значения.
online_analyze Модуль выполняет активацию сбора статистики сразу после INSERT/UPDATE/DELETE/SELECT INTO для задействованных таблиц.
orafce Модуль представляет собой набор функций, которые обеспечивают совместимость с базами данных Oracle. Эти функции позволяют упростить миграцию на Tantor и сократить расходы на перенастройку приложений.
Оптимизированный строково-колоночный (ORC) Модуль предоставляет колоночный метод хранения данных с возможностью сжатия для уменьшения объема ввода-вывода и обеспечения высокой производительности. Применимо только для добавления, например, временные ряды данных и отображения корпоративных хранилищ.
page_repair Модуль для восстановления отдельных поврежденных страниц с использованием данных с сервера горячего резервирования. Позволяет сэкономить время восстановления, так как требуется восстановление не всех данных, а только отдельных страниц.
pg_background Модуль позволяет пользователю выполнять произвольные команды в фоновом режиме и предоставляет возможность выполнять команды, такие как: VACUUM и CREATE INDEX CONCURRENTLY из SQL, а также выполнять автономные транзакции, включая асинхронный режим.
pg_cron Модуль представляет собой планировщик заданий на основе cron, работающий внутри базы данных в качестве расширения. Используется тот же синтаксис, что и у обычного cron, но он позволяет планировать команды Tantor DBMS непосредственно из базы данных.
pg_hint_plan Модуль позволяет настраивать планы выполнения SQL-запросов, используя так называемые "подсказки" в комментариях SQL. Это дает возможность компенсировать ошибки планировщика, возникающие в критических случаях.
pg_partman Модуль позволяет автоматически создавать и управлять пакетами таблиц, основанными как на временных интервалах, так и на списках.
pg_qualstats Модуль сохраняет статистические данные о найденных предикатах в операторах WHERE и операциях JOIN. Это позволяет анализировать наиболее частые квалификаторы (предикаты) в базе данных, а также выявлять коррелированные столбцы, определяя, какие столбцы наиболее часто запрашиваются вместе.
pg_repack Модуль позволяет устранить раздутие таблиц и индексов (раздутие) и, при необходимости, восстановить физический порядок кластеризованных индексов (CLUSTER). В отличие от команд CLUSTER и VACUUM FULL, работает онлайн, не удерживая исключающую блокировку таблиц, обслуживаемых во время операции.
pg_store_plans Модуль предоставляет средства для отслеживания статистики выполнения планов для всех SQL-запросов, выполненных сервером Tantor.
pg_variables Модуль предоставляет функциональность для работы с переменными различных типов в текущей пользовательской сессии.
pg_wait_sampling Модуль предоставляет информацию о текущем ожидающем событии для определенного процесса. Однако, чтобы собрать описательную статистику поведения сервера, пользователю необходимо многократно собирать текущее ожидающее событие. Этот модуль представляет собой расширение для сбора выборочной статистики ожидающих событий, что предотвращает ненужное выборочное ожидание текущего события.
pgaudit Модуль предоставляет детализированное ведение аудита сессий и/или объектов через стандартное средство ведения журналов Tantor DBMS. Цель pgAudit заключается в предоставлении пользователям Tantor DBMS возможности создавать журналы аудита, которые часто требуются для соответствия государственным, финансовым или ISO сертификациям.
pgauditlogtofile Является дополнением к pgAudit, которое будет перенаправлять строки аудита в независимый файл, вместо использования регистратора сервера PostgreSQL. Это позволит иметь файл аудита, который можно легко ротировать, не засоряя журналы сервера этими сообщениями. Аудиторские журналы в системах с высокой нагрузкой могут расти очень быстро. Это расширение позволяет автоматически ротировать файлы на основе количества минут.
pgq Модуль предоставляет универсальную высокопроизводительную неблокирующую очередь с простым API, основанным на SQL функциях.
pgsql-http Модуль позволяет создать триггер, который вызывает веб-сервис, доступный для возврата результата, или обновляет сервис в соответствии с новым состоянием базы данных.
plantuner Модуль предоставляет возможность управлять планировщиком, предоставляя подсказки, которые заставляют оптимизатор частично игнорировать его алгоритм.

E.6.6.2. Дополнительные поставляемые программы

Таблица E.2. Таблица утилит

Утилита Описание
pgcompacttable pgcompacttable - это инструмент уменьшения размера раздутых таблиц и индексов (блокировка) без серьезной блокировки. Он предназначен для переорганизации данных в таблицах и перестроения индексов для восстановления дискового пространства без влияния на производительность базы данных.

E.6.7. Исправления дополнительно поставляемых модулей

  • Исправлена ошибка сегментации в редких сценариях использования pg_store_plans.

  • Оптимизирована производительность fasttrun.

  • Оптимизирована производительность online_analyze.

E.6.8. Поддерживаемые операционные системы

Список поддерживаемых операционных систем (ОС) был расширен. Полный список приведен ниже:

  • AstraLinux 1.7

  • AstraLinux 1.8

  • Redos 7.3

Сборки СУБД создаются и тестируются для этих операционных систем на постоянной основе.

E.6.9. Миграция на версию 15.6.1

Для миграции с PostgreSQL или Tantor DB сначала установите последнюю минорную версию, а затем выполните выгрузку/восстановление данных, применяя утилиту pg_dumpall или используя утилиту pg_upgrade.