3. Каковы различия между Tantor SE 17 и PostgreSQL 17#

3. Каковы различия между Tantor SE 17 и PostgreSQL 17

3. Каковы различия между Tantor SE 17 и PostgreSQL 17 #

3.2. Улучшения ядра #

  • 64-битный счетчик транзакций.

  • Автономные транзакции.

  • Оптимизированный алгоритм сжатия данных pglz (~1,4 раза).

  • Сжатие в libpq.

  • Оптимизированный процесс восстановления репликации (fadvise на резервном сервере).

  • Расширенное использование инструкций SIMD. Улучшения, запланированные для PostgreSQL 18, уже доступны в Tantor SE 17.

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

  • Проверка контрольной суммы блоков данных при отправке WAL на резервный сервер.

  • Повышенная информативность диагностической информации:

    • Диагностика внутренних ошибок СУБД (backtrace_on_internal_error параметр).

    • Информативность журналов сервера СУБД — стартовые сообщения содержат дополнительную диагностическую информацию.

    • Приложение сервера pg_controldata содержит дополнительную метаинформацию о редакции и сборке для упрощения диагностики возможных неполадок.

  • Максимальный размер данных в ячейках таблицы, поддерживаемый модулем pg_dump, составляет 2 ГБ.

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

  • Улучшенный pg_stat_statements для повышения точности мониторинга и производительности:

    • Интеллектуальная агрегация данных: система теперь маскирует имена временных таблиц и массивов, что позволяет более точно агрегировать статистику по однотипным запросам с разными параметрами.

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

  • Увеличенное количество секций в общих буферах.

  • Улучшенное поведение планировщика за счет использования по умолчанию покрывающих индексов с учетом их селективности.

  • Настройка enable_convert_exists_as_lateral_join, позволяющая планировщику преобразовывать подзапросы EXISTS в LATERAL SEMI JOIN, когда это возможно, для улучшения производительности.

  • Отложенное размещение временных таблиц с помощью настройки enable_delayed_temp_file.

  • Ускоренное выполнение запросов с использованием конструкции IN VALUES.

  • Улучшенное поведение планировщика с использованием технологии Join Predicate Pushdown.

  • Устранение ненужных соединений, когда таблица соединяется сама с собой.

  • Прецизионный сбор статистики. Позволяет осуществлять детальный контроль за выборкой статистики для отдельных столбцов таблицы с помощью команды ALTER TABLE ... ALTER COLUMN ... SET STAT MULTIPLIER.

  • Поддержка аутентификации OAuth 2.0. Для получения дополнительной информации см. Поддержка OAuth и Модули проверки OAuth.

  • Поддержка расширений и типов данных для совместимости с 1С.

  • Оптимизированная работа команды ANALYZE для широких таблиц.

  • Оптимизированные запросы с группировками, характерные для операций Закрытие месяца в 1C:ERP.

  • Хеш-таблица для ускорения проверки уникальности имен столбцов во время обратного синтаксического анализа представления.

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

3.3. Дополнительные поставляемые утилиты #

  • pg_diag_setup — автоматизирует настройку расширений диагностики производительности Tantor SE, таких как pg_store_plans, pg_stat_statements, pg_stat_kcache, auto_explain, pg_buffercache и других. Это упрощает интеграцию систем мониторинга баз данных.

  • pg_sec_check — проводит аудит безопасности конфигураций базы данных Tantor SE. Он автоматизирует проверку различных аспектов безопасности: от настроек сервера до параметров, специфичных для базы данных, и предоставляет подробные отчеты об обнаруженных проблемах вместе с практическими рекомендациями по их устранению.

  • pgcompacttable — уменьшает размер раздутых таблиц и индексов без использования тяжелых блокировок. Он разработан для реорганизации данных в таблицах и перестроения индексов с целью освобождения дискового пространства без влияния на производительность базы данных.

  • pgcopydb — автоматизирует выполнение pg_dump | pg_restore между двумя работающими серверами Postgres. Чтобы как можно быстрее скопировать базу данных на другой сервер, желательно использовать параллельные опции pg_dump и при этом иметь возможность передавать данные в несколько задач pg_restore.

3.4. Дополнительные модули (расширения) #

credcheck - обеспечивает проверку учетных данных, во время создания пользователя, смены пароля и переименования пользователя. Используя это расширение, можно определить набор правил для разрешения определенного набора учетных данных и набор правил для отклонения определенного типа учетных данных. Расширение разработано на основе хука check_password_hook в PostgreSQL.

dbcopies_decoding - поддерживает механизм копирования базы данных и ускоритель данных.

fasttrun - предоставляет небезопасную для транзакций функцию для обрезки временных таблиц без увеличения размера pg_class. Этот модуль необходим для поддержки 1C Enterprise. Быстрая операция обрезки не является транзакционной, поэтому ее результаты не могут быть отменены и сразу становятся видимыми во всех сессиях независимо от уровня изоляции.

fulleq - предоставляет дополнительный оператор эквивалентности для совместимости с Microsoft SQL Server. Этот модуль необходим для поддержки 1C Enterprise.

hypopg - добавляет поддержку гипотетических индексов. Гипотетический, или виртуальный индекс — это индекс, который в действительности не существует, и поэтому его создание не требует ресурсов ЦП, диска или каких-либо ресурсов. Они полезны, чтобы знать, могут ли определенные индексы повысить производительность для проблемных запросов. Дает возможность узнать, будет ли СУБД использовать эти индексы или нет, не тратя ресурсы на их создание.

mchar - разработан для улучшения поддержки 1C: Предприятие, самой популярной российской CRM и ERP системы. Он реализует типы MCHAR и MVARCHAR, которые совместимы с MS SQL CHAR и VARCHAR соответственно. Кроме того, эти типы используют библиотеку ICU для сравнения и преобразования регистра, поэтому их поведение одинаково на разных операционных системах. СУБД Tantor также включает расширение citext, которое предоставляет типы, аналогичные MCHAR. Однако это расширение не эмулирует поведение MS-SQL в отношении пробелов в конце значения.

oauth_base_validator - реализует простой валидатор токенов OAuth 2.0 для встроенной поддержки потока авторизации устройства.

online_analyze - выполняет активацию сбора статистики сразу после операций INSERT/UPDATE/DELETE/SELECT INTO для задействованных таблиц.

orafce - представляет собой набор функций, обеспечивающих совместимость с базами данных Oracle. Эти функции позволяют упростить миграцию на Tantor и снизить затраты на перенастройку приложений.

Оптимизированное строково-колоночное (ORC) - обеспечивает колоночный метод хранения данных с возможностью сжатия для уменьшения объема ввода-вывода и обеспечения высокой производительности. Применимо только для добавления, например, временные ряды данных и отображения корпоративных хранилищ.

page_repair - предназначен для восстановления отдельных поврежденных страниц с использованием резервных данных с сервера репликации. Он позволяет сэкономить время на операции восстановления, так как не требует восстановления всех данных, а только отдельных страниц.

pg_archive - позволяет автоматически архивировать исторические данные из секционированных таблиц.

pg_background - позволяет выполнять команды в фоновом режиме, такие как VACUUM и CREATE INDEX CONCURRENTLY, из SQL, а также запускать автономные транзакции.

pg_cron - это планировщик заданий на основе cron, работающий внутри базы данных как расширение. Он использует тот же синтаксис, что и обычный cron, и позволяет планировать выполнение команд непосредственно из базы данных Tantor.

pg_hint_plan - позволяет настраивать планы выполнения SQL-запросов с использованием так называемых "подсказок" в комментариях SQL. Это дает возможность компенсировать ошибки планировщика, возникающие в критических случаях.

pg_ivm - предоставляет функцию инкрементного обслуживания представлений (IVM) для Tantor SE.

pg_partman - позволяет создавать и управлять секциями таблицы как на основе времени, так и на основе последовательностей.

pg_qualstats - сохраняет статистические данные по найденным предикатам в операторах WHERE и предложениях JOIN. Это позволит проанализировать наиболее часто выполняемые квалификаторы (предикаты) в вашей базе данных, а также идентифицировать коррелированные столбцы, определяя, какие столбцы чаще всего запрашиваются вместе.

pg_query_id - позволяет управлять аспектами вычисления идентификатора запроса.

pg_repack - позволяет удалять раздувание таблиц и индексов (BLOAT) и, при необходимости, восстанавливать физический порядок кластеризованных индексов. В отличие от CLUSTER и VACUUM FULL, он работает онлайн, не удерживая эксклюзивную блокировку обрабатываемых таблиц во время обработки.

pg_stat_advisor - позволяет анализировать производительность запросов и создавать дополнительные статистики для улучшения плана запроса.

pg_stat_kcache - собирает статистику о реальных операциях чтения и записи, выполняемых на уровне файловой системы.

pg_store_plans - предоставляет средства для отслеживания статистики плана выполнения для всех операторов SQL, выполняемых сервером Tantor.

pg_tde - реализует прозрачное шифрование данных (TDE) на уровне хранения. Оно не шифрует данные в памяти или при передаче по сети.

pg_throttle - позволяет ограничивать скорость выполнения запросов.

pg_trace - предоставляет возможность для глубокого анализа и профилирования SQL-запросов, особенно актуальное для пользователей платформы 1С.

pg_uuidv7 - обеспечивает поддержку работы с типом данных UUIDv7.

pg_variables - предоставляет функции для работы с переменными различных типов в текущей сессии пользователя.

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

pgaudit - предоставляет детализированное ведение журнала аудита сеансов и/или объектов через стандартное средство ведения журнала Tantor DBMS. Цель pgAudit - предоставить пользователям Tantor DBMS возможность создавать журналы аудита, которые часто требуются для соблюдения государственных, финансовых или ISO сертификаций.

pgauditlogtofile - это дополнение к pgAudit, которое перенаправляет строки аудита в отдельный файл, вместо использования диспетчера журналирования сервера PostgreSQL. В итоге мы получаем файл аудита, который можно легко ротировать, не загрязняя журналы сервера этими сообщениями. Журналы аудита в системах с высокой нагрузкой могут очень быстро расти. Это расширение позволяет автоматически ротировать файлы на основе заданного количества минут.

pgl_ddl_deploy - это расширение для отправки команд DDL на сервер-реплику во время логической репликации.

pgq - предоставляет универсальную высокопроизводительную не заблокированную очередь с простым API, основанным на функциях SQL.

pgsql-http - дает возможность написать триггер, вызывающий веб-сервис, способный вернуть результат, либо заставить этот сервис обновляться в соответствии с новым состоянием базы данных.

plantuner - позволяет использовать подсказки для планировщика.

transp_anon (прозрачная анонимизация) - это расширение для маскировки или замены персонально идентифицируемой информации или коммерчески чувствительных данных из базы данных Tantor SE.

vector - позволяет находить сходства векторов.

wal2json - это плагин вывода для логического декодирования. Это означает, что плагин имеет доступ к кортежам, создаваемым INSERT и UPDATE. Также, старые версии строк для UPDATE/DELETE могут быть доступны в зависимости от настроенной идентичности реплики. Изменения могут быть потреблены с использованием протокола потоковой передачи (слоты логической репликации) или через специальный SQL API.

3.5. Дополнительно поставляемые программы: #

  • Tantor Platform: полнофункциональная модульная платформа для администрирования и мониторинга Tantor RDMS и большинства кластеров, основанных на PostgreSQL. Платформа упрощает ежедневную работу с RDBMS и значительно упрощает управление RDBMS. Функциональность программного обеспечения включает: умный и простой пользовательский интерфейс, автоматическую адаптивную настройку кластера, обзор системы, оповещения и мониторинг, автоматическую проверку работоспособности и аудит схемы, выполнение задач обслуживания через графический интерфейс, профилирование запросов и администрирование нескольких серверов в одном месте;

  • pg_anon: это самостоятельная программа на Python для работы с СУБД Tantor или PostgreSQL для маскировки и анонимизации данных во время миграции данных между производственной и тестовой средами;

  • wal-g: это инструмент создания зашифрованных, сжатых резервных копий Tantor SE (полных и инкрементных) и их отправки/получения из/в хранилища без сохранения в файловой системе;

  • pg_configurator: инструмент настройки PostgreSQL;

  • pg_cluster: это ansible playbook для кластера высокой доступности PostgreSQL на Patroni.

3.6. Программные интерфейсы для различных языков #

Tantor SE предоставляет широкий спектр драйверов и библиотек для взаимодействия с базой данных из различных языков программирования и сред. В следующих разделах описаны основные интерфейсы и соответствующие инструменты.

3.6.1. C/C++ #

  • libpq: Основная библиотека C для клиентских программ Tantor SE. Она позволяет отправлять запросы, получать результаты и управлять соединениями.

  • libpqxx: Обертка C++ над libpq, предлагающая более современный и удобный интерфейс для разработчиков на C++.

3.6.2. Java/JDBC #

  • PostgreSQL JDBC Driver: Официальный JDBC-драйвер, который позволяет Java-приложениям взаимодействовать с базами данных Tantor SE с использованием стандартного JDBC API.

3.6.3. .NET #

  • Npgsql: Открытый .NET провайдер данных для PostgreSQL. Он позволяет .NET приложениям использовать ADO.NET для подключения к Tantor SE, выполнения запросов и получения данных.

3.6.4. ODBC #

  • psqlODBC: Официальный драйвер PostgreSQL ODBC, обеспечивающий подключение для приложений и инструментов, использующих интерфейсы ODBC.

3.6.5. Perl #

  • DBD::Pg: Perl модуль, совместимый с DBI для Tantor SE. Он безупречно интегрируется с Perl DBI фреймворком для взаимодействия с базами данных.

3.6.6. Python #

  • psycopg2/psycopg: Широко используемые адаптеры Python, реализующие спецификацию Python DB-API. Они обеспечивают надежный и эффективный способ выполнения запросов, обработки транзакций и управления соединениями.

  • pg8000: Чисто-Python альтернативный адаптер, который также поддерживает стандарт DB-API.

3.6.7. Ruby #

  • pg gem: Официальный драйвер Ruby для PostgreSQL, предоставляющий родной интерфейс для выполнения запросов и обработки результатов.

3.6.8. Ткл #

  • pgtcl/pgtcl-ng: расширения Tcl, позволяющие устанавливать соединения с Tantor SE, выполнять запросы и управлять результатами запросов в скриптах Tcl.

3.7. Заметки к релизу #

Первый выпуск Tantor SE — это 17.5.0. Значительные изменения можно найти на соответствующей странице.

Все остальные изменения см. в Примечаниях к выпуску.