E.4. Postgres Pro Enterprise 16.3.1 #

Дата выпуска: 2024-06-03

E.4.1. Обзор #

Этот выпуск основан на PostgreSQL 16.3 и Postgres Pro Enterprise 16.2.2. Все изменения, унаследованные от PostgreSQL 16.3, описаны в Замечаниях к выпуску PostgreSQL 16.3. По сравнению с Postgres Pro Enterprise 16.2.2 эта версия также содержит следующие изменения:

  • Отключён тайм-аут запуска системы: значение параметра TimeoutSec в systemd теперь по умолчанию равно 0. Ранее большие БД могли не успеть запуститься за указанное в параметре время.

  • Понижен уровень протоколирования во время создания указанной точки восстановления во время тайм-аута между контрольными точками только для неактивных баз. Это позволяет удалить из журнала лишние сообщения.

  • Улучшена производительность подсистем поверх SLRU. Внесены улучшения в механизм блокировок LWLock, причём изменён способ блокировки для различных сегментов SLRU, так что каждый сегмент использует отдельную блокировку, за счёт чего улучшена масштабируемость. Кроме того, для реализации SLRU внедрена новая модель распараллеливания с использованием атомарных операций чтения и записи.

  • Улучшена производительность, добавлены новые возможности и исправлены некоторые ошибки в CFS. Основные изменения перечислены ниже:

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

    • Добавлен параметр конфигурации cfs_gc_lock_file, задающий путь к файлу блокировки, который гарантирует, что для нескольких серверов Postgres Pro будет выполняться только один рабочий процесс сборки мусора.

    • Изменена логика усечения файлов *.cfm в CFS для повышения производительности. Раньше файлы обрабатывались, даже если размер файла не менялся, что могло вызывать ненужную нагрузку на систему. Новый подход предполагает проверку размера файла и его усечение только в том случае, если размер отличается от желаемого, чтобы уменьшить количество ненужных системных вызовов.

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

    • Исправлена проблема в CFS, которая могла приводить к сбою рабочего процесса сборки мусора с выводом предупреждения «CFS GC failed to read block 0 of file X at position 0 size 0: Success» (CFS GC не удалось прочитать блок 0 файла X в позиции 0, размер 0: Успех). Проблема возникала из-за некорректной обработки первого МБ файла данных, содержащего только нулевые страницы.

  • Добавлен параметр конфигурации xml_parse_huge, позволяющий выделить до 1 ГБ памяти для обработки XML-данных.

  • Устранена проблема, приводившая к ошибке «cache lookup failed for collation 128» (ошибка поиска правила сортировки 128 в кеше). Теперь для дополнительных столбцов индекса INCLUDE правила сортировки игнорируются.

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

  • Исправлена проблема, из-за которой после выполнения команды ALTER PUBLICATION pub ADD TABLE tab некоторые данные не передавались подписчику логической репликации. Основная причина проблемы заключалась в недостаточной взаимоблокировке между ALTER PUBLICATION и созданием снимка.

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

  • Добавлена поддержка ОС Astra Linux 1.8; поддержка ОС Astra Linux «Орёл» 2.12 и Astra Linux «Смоленск» 1.6 прекращена.

  • Добавлена поддержка РЕД ОС МУРОМ 8.

  • Добавлена поддержка ОС Ubuntu 24.04.

  • Модуль aqo обновлён до версии 2.1, в которой добавлен параметр конфигурации aqo.wal_rw, позволяющий включать физическую репликацию и выполнять полное восстановление данных после сбоя aqo.

  • Расширение biha обновлено до версии 1.2, в которой добавлены новые возможности и исправлены некоторые ошибки. Основные изменения перечислены ниже:

    • Реализована возможность добавления узла-рефери в расширении biha, что позволяет настроить отказоустойчивый кластер 2+1 с двумя обычными узлами и одним узлом-рефери. Такой узел используется только во время выборов и помогает избежать потенциального разделения кластера, состоящего только из лидера и последователя. Обратите внимание, что узел-рефери не содержит пользовательских баз данных и ему нельзя отправлять запросы.

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

    • Исправлена ошибка сегментации, которая могла возникать, когда узел запускался после ручной синхронизации с использованием pg_rewind. Теперь узел может автоматически восстанавливаться после синхронизации.

    • Исправлена ошибка, которая могла приводить к новым выборам лидера после удаления работающего узла с помощью функции biha.remove_node. Теперь перед удалением узел необходимо остановить.

  • Расширение citus обновлено до версии 12.1.3.1.

  • Добавлен модуль 1С dbcopies_decoding для обновления копий баз данных. Он реализован как модуль логической репликации и представлен в postgrespro-ent-16-contrib.

  • Расширение dbms_lob обновлено до версии 1.1, включающей необходимые изменения для обеспечения совместимости с новым расширением pgpro_sfile.

  • Модуль mamonsu обновлён до версии 3.5.8, в которой улучшена производительность и исправлены некоторые ошибки. Основные изменения перечислены ниже:

    • Добавлена поддержка API Zabbix 6.4: обработка устаревших параметров для запросов аутентификации.

    • Исключено кеширование метрики pgsql.connections[max_connections].

    • Обновлены правила ротации журналов по умолчанию.

    • Выполнена подготовка для поддержки Python 3.12.

    • Изменены названия метрик модуля pg_locks. Имейте в виду, что эти изменения могут нарушить работу пользовательских триггеров и функций обработки, использующих параметр item.name.

    • Исправлено несоответствие типов для pgpro_stats и pg_wait_sampling.

    • Исправлена ошибка в правах роли mamonsu, созданной с помощью bootstrap.

  • Модуль orafce обновлён до версии 4.10.0.

  • Приложение pg_probackup обновлено до версии 2.8.0 Enterprise, в которой улучшена производительность, добавлены новые возможности и исправлены некоторые ошибки. Основные изменения перечислены ниже:

    • Добавлена возможность ограничить скорость записи на диск с помощью параметра --write-rate-limit==bitrate (Mbps, Gbps).

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

    • Добавлена проверка командой checkdb контрольной суммы для файлов CFS.

    • Добавлена возможность проверять только архив WAL.

    • Расширено действие параметра --dry-run для всех команд pg_probackup.

    • По умолчанию при резервном копировании в режиме STREAM теперь создаётся временный слот, если не указано иное.

    • Алгоритм сжатия по умолчанию изменён на zstd. Если zstd не поддерживается системой, будет выбран алгоритм lz4. Параметр --compress теперь задаёт значения по умолчанию для --compress-level и --compress-algorithm.

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

    • Реализован новый метод блокировки, который позволяет использовать блокировки с протоколами S3 и NFS.

  • Добавлено расширение pgvector, предоставляющее поиск сходства векторов в Postgres Pro.

  • Добавлен модуль pgpro_sfile, предоставляющий функциональность, схожую c LOB в Oracle, и позволяющий хранить объекты с большим объёмом данных, называемые объектами sfile. Максимальное количество таких объектов, а также размер объекта в байтах ограничены 2^63 - 1.

  • Расширение pgpro_stats обновлено до версии 1.7.1, в которой были исправлены некоторые ошибки и появились новые возможности. Основные изменения перечислены ниже:

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

    • Исправлена проблема, препятствовавшая мониторингу, когда представление pgpro_stats_statements содержало большое количество строк с одинаковыми значениями plan и queryid, но разными значениями planid. Проблема была вызвана ошибкой в разборе дерева планов, содержащего узел T_Memoise.

  • Исправлена ошибка «ERROR: query failed: ERROR: tablespace "XXXX" does not exist» (ОШИБКА: запрос не выполнен: ОШИБКА: табличное пространство «XXXX» не существует), которая могла возникать, когда команда pg_repack пыталась реорганизовать таблицы в табличном пространстве, имя которого начинается с цифры. Основная причина проблемы заключалась в отсутствии дополнительных кавычек, которые ожидались pg_repack.

  • Добавлен модуль pljava, позволяющий использовать хранимые процедуры, триггеры и функции, написанные на языке Java, в Postgres Pro.

  • Добавлено расширение plpgsql_check, предоставляющее возможность статического анализа кода для PL/pgSQL в Postgres Pro.

  • Модуль sr_plan был обновлён, в новой версии улучшена производительность, добавлены новые возможности и исправлены некоторые ошибки. Основные изменения перечислены ниже:

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

    • Добавлен параметр конфигурации sr_plan.max_local_cache_size, позволяющий установить максимальный размер локального кеша (в КБ). Кроме того, значение по умолчанию sr_plan.max_items было изменено на 100.

    • Ограничен процесс регистрации запросов — теперь для каждого сервера можно зарегистрировать только один запрос.

    • Улучшен алгоритм идентификации замороженного запроса.

    • Реализовано хранение планов запросов в виде отдельных файлов JSON.

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

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

E.4.2. Миграция на версию 16.3.1 #

Если вы производите обновление выпуска Postgres Pro Enterprise, базирующегося на той же основной версии PostgreSQL, достаточно просто установить новый выпуск в текущий каталог инсталляции.

Важно

Если вы обновляете встроенный отказоустойчивый кластер с Postgres Pro Enterprise версий 16.1 и 16.2 до Postgres Pro Enterprise версии 16.3, выполните следующие действия:

  1. Остановите узел-последователь при помощи команды pg_ctl.

  2. Обновите сервер узла-последователя.

  3. Запустите узел-последователь при помощи команды pg_ctl.

  4. Повысьте статус обновленного узла-последователя до лидера при помощи функции biha.set_leader.

  5. Обновите серверы оставшихся узлов-последователей и старого лидера.

  6. Повысьте статус старого узла-лидера при помощи функции biha.set_leader.

Обратите внимание, что если узел с сервером Postgres Pro Enterprise версии 16.1 перешёл в состояние NODE_ERROR, другие узлы могут «видеть» его состояние некорректно, например, как REFEREE. В этом случае рекомендуется остановить узел, обновить сервер на нём, синхронизировать узел с помощью pg_rewind и запустить снова.

Для перехода с PostgreSQL, а также с выпуска Postgres Pro Standard или Postgres Pro Enterprise, базирующегося на предыдущей основной версии PostgreSQL, обратитесь к инструкциям по миграции на версию 16.