Измененные функции

В Arenadata DB 6 изменены следующие функции:

  • Рабочие характеристики базы данных ADB при больших нагрузках изменились по сравнению с предыдущими версиями. В частности, можно заметить увеличение операций ввода-вывода на первичных сегментах из-за изменений, связанных с WAL-репликацией и другими функциями. Всем клиентам рекомендуется выполнять нагрузочное тестирование с использованием реальных данных, чтобы убедиться, что новая конфигурация кластера ADB 6.0 отвечает их требованиям к производительности.
  • Утилиты gpbackup и gprestore больше не устанавливаются с Arenadata DB 6, но они доступны отдельно и могут быть обновлены независимо от инсталляции базы данных.
  • ADB 6 использует новый алгоритм согласованного хеширования jump consistent hash для распределения данных по сегментам ADB. Алгоритм гарантирует, что после добавления новых сегментов в кластер ADB 6 необходимо перемещать только те строки, которые хешируются в новый сегмент. Хэширование базы данных имеет характеристики производительности, схожие с предыдущими релизами системы, но должно обеспечивать более быстрое расширение базы данных. Важно обратить внимание, что новый алгоритм является более вычислительно интенсивным по сравнению с предыдущим, поэтому производительность COPY может несколько снизиться в системах, где производительность ограничена процессором.
  • Хеш-функции предыдущей версии ADB представлены как классы нестандартных хеш-операторов с именем cdbhash_*_ops. Классы нестандартных операторов используются при обновлении базы данных ADB предыдущих версий. Унаследованные классы операторов совместимы друг с другом, но при смешении устаревших классов операторов с новыми, запросы требуют Redistribute Motions.

Параметр конфигурации сервера gp_use_legacy_hashops фиксирует – используются ли устаревшие хеш-функции или функции по умолчанию при создании таблиц, с указанным столбцом распределения

Системная таблица gp_distribution_policy теперь содержит больше информации о таблицах ADB и политике распределения табличных данных по сегментам, включая класс операторов хеш-функций распределения.

  • Утилита gpcheck не включена в базу данных Arenadata DB 6.
  • Изменился формат входного файла для утилит gpmovemirrors, gpaddmirrors, gprecoverseg и gpexpand. В качестве разделителя вместо использования символа двоеточия : новый формат файла использует символ вертикальной черты |. Например, в предыдущих выпусках строка во входном файле gpexpand выглядит:
sdw5:sdw5-1:50011:/gpdata/primary/gp9:11:9:p

Обновленный формат файла:

sdw5|sdw5-1|50011|/gpdata/primary/gp9|11|9|p

Кроме того, gpaddmirrors удаляет префикс зеркала из строк входного файла. Например, строка из предыдущей версии:

mirror0=0:sdw1:sdw1-1:52001:53001:54001:/gpdata/mir1/gp0

Обновленный формат:

0=0|sdw1|sdw1-1|52001|53001|54001|/gpdata/mir1/gp0
  • ADB использует прямую диспетчеризацию для целевых запросов с IS NULL аналогично запросам, которые фильтруются по столбцу (столбцам) ключа распределения таблицы.
  • Опция gpinitsystem для указания каталога данных резервного мастера изменена с -F на -S. Опция -S больше не определяет spread тип зеркалирования. Для указания конфигурации зеркалирования введена новая опция gpinitsystem: --mirror-mode={group|spread}.
  • Значение по умолчанию параметра конфигурации сервера log_rotation_size изменилось с 0 до 1 ГБ. Это меняет поведение по умолчанию ротации журнала, так что новый лог-файл открывается только тогда, когда в текущий файл записано более 1 ГБ или когда он открыт в течение 24 часов.
  • Утилита gpssh-exkeys теперь требует настроенного доступа по SSH без пароля с мастер-хоста ко всем остальным хостам в кластере. После запуска утилиты доступ по SSH без пароля устанавливается с каждого хоста на любой другой хост.
  • Изменено поведение smart shutdown в gpstop. Ранее при запуске gpstop -M smart (или просто gpstop) утилита осуществляла выход, выводя сообщение об активных клиентских подключениях. Теперь gpstop ожидает завершения текущих подключений, прежде чем завершить выключение. Если какие-либо соединения остаются открытыми после истечения времени ожидания или прерываются с помощью CTRL-C утилита выводит список открытых соединений и запрос о том, продолжать ли ожидание завершения соединения или выполнить незамедлительное отключение. Период ожидания по умолчанию составляет 120 секунд и может быть изменен с помощью опции -t timeout_seconds.
  • В системных представлениях pg_stat_activity и pg_stat_replication столбец procpid переименован в pid, чтобы соответствовать связанному изменению в PostgreSQL 9.2.
  • В системной таблице pg_proc столбец proiswin переименован в proiswindow и перемещен в таблицу, чтобы соответствовать одноименной системной таблице в PostgreSQL 8.4.
  • Запросы, использующие SELECT DISTINCT и UNION/INTERSECT/EXCEPT, больше не обязаны возвращать отсортированную информацию. Ранее эти запросы всегда удаляли повторяющиеся строки с помощью обработки Sort/Unique. Теперь они реализуют хеширование с целью соответствия поведению, введенному в PostgreSQL 8.4, и этот метод не осуществляет сортировку. В случае если приложение требует отсортированного вывода для таких запросов, необходимо явно использовать условие ORDER BY в самих запросах. Важно обратить внимание, что SELECT DISTINCT ON не использует хеширование, поэтому его поведение не отличается от предыдущих версий.
  • В схеме gp_toolkit представление gp_resgroup_config больше не содержит столбцы proposed_concurrency, proposed_memory_shared_quota и proposed_memory_spill_ratio.
  • В системной таблице pg_resgroupcapability столбец proposed удален.
  • В системной таблице pg_database столбец datconfig удален. Теперь для отслеживания параметров конфигурации сервера для каждой базы данных и для каждой роли ADB использует системную таблицу pg_db_role_setting (PostgreSQL 9.0).
  • В системной таблице pg_aggregate столбец aggordered удален и добавлено несколько новых столбцов для поддержки агрегатов ordered-set и moving-aggregates с помощью Postgres Planner (PostgreSQL 9.4). Сигнатуры команд ALTER/CREATE/DROP AGGREGATE SQL также обновлены, чтобы отразить изменения каталога pg_aggregate.
  • В системной таблице pg_authid столбец rolconfig удален. Теперь для отслеживания параметров конфигурации сервера для каждой базы данных и для каждой роли ADB использует системную таблицу pg_db_role_setting (PostgreSQL 9.0).
  • При создании и изменении таблицы, имеющей столбец распределения, теперь можно указать хеш-функцию, используемую для распределения данных между экземплярами сегментов.
  • Arenadata DB 6 удаляет опцию RECHECK из ALTER OPERATOR FAMILY и CREATE OPERATOR CLASS DDL (PostgreSQL 8.4). Теперь ADB на лету во время выполнения определяет, является ли оператор индекса “lossy”.
  • Таблицы operator-related системного каталога изменены для поддержки операторов семейств, совместимости и типов (сортировка или поиск).
  • Записи таблиц системного каталога для функций HyperLogLog (HLL), агрегатов и типов переименованы с использованием префикса gp_. Переименование функций HLL предотвращает конфликты имен с внешними расширениями базы данных, использующими HLL. Любой пользовательский код, написанный с использованием встроенных функций HLL базы данных ADB, должен быть обновлен на имена с префиксом.
  • “Устаревший оптимизатор” предыдущих выпусков ADB теперь упоминается как Postgres planner как в коде, так и в документации.
  • Уровни изоляции транзакций в Arenadata DB 6 изменены в соответствии с уровнями изоляции транзакций PostgreSQL, начиная с введения режима serializable snapshot isolation (SSI) в PostgreSQL 9.1. Новый режим SSI, который не реализован в ADB, обеспечивает истинную сериализуемость путем мониторинга одновременных транзакций и отката транзакций, которые могут привести к аномалии сериализации. Существующий режим изоляции моментальных снимков snapshot isolation (SI) гарантирует, что транзакции работают с одним согласованным снимком базы данных, но не гарантирует согласованного результата при выполнении набора одновременных транзакций в любой заданной последовательности.

Arenadata DB 6 теперь позволяет использовать ключевые слова REPEATABLE READ с SQL-выражениями, такими как BEGIN и SET TRANSACTION. Транзакция SERIALIZABLE в PostgreSQL версии 9.1 и выше использует новый режим SSI. В ADB 6 транзакция SERIALIZABLE возвращается к REPEATABLE READ, используя режим SI. Далее в таблице показано соответствие стандарту SQL для каждого уровня изоляции транзакций в Arenadata DB 6 и PostgreSQL 9.1.

Табл. 2. Соответствие уровня транзакций стандарту SQL
Уровень изоляции транзакции Arenadata DB 6 PostgreSQL 9.1
READ UNCOMMITTED READ COMMITTED READ COMMITTED
READ COMMITTED READ COMMITTED READ COMMITTED
REPEATABLE READ REPEATABLE READ (SI) REPEATABLE READ (SI)
SERIALIZABLE Возвращается к REPEATABLE READ (SI) SERIALIZABLE (SSI)
  • Команда CREATE TABLESPACE изменена:
    • Команде больше не требуется файловое пространство, создаваемое с помощью утилиты gpfilespace;
    • Условие FILESPACE удалено;
    • Условие WITH добавлено, чтобы позволить указывать расположение табличного пространства для конкретного экземпляра сегмента.
  • Команда ALTER SEQUENCE SQL содержит новые условия START [WITH] start и OWNER TO new_owner (PostgreSQL 8.4). Условие START устанавливает начальное значение, которое будет использоваться будущими командами ALTER SEQUENCE RESTART, но не изменяет текущее значение последовательности. Условие OWNER TO меняет владельца последовательности.
  • Команда ALTER TABLE SQL содержит условие SET WITH OIDS для добавления системного столбца oid в таблицу (PostgreSQL 8.4). Важно обратить внимание, что использование oids с таблицами базы данных ADB настоятельно не рекомендуется.
  • Команда CREATE DATABASE SQL содержит новые параметры LC_COLLATE и LC_CTYPE для указания порядка сортировки и классификации символов для новой базы данных.
  • Команда CREATE FUNCTION SQL содержит новое ключевое слово WINDOW, которое указывает, что функция является не простой, а оконной (PostgreSQL 8.4).
  • Указание имени индекса в команде CREATE INDEX SQL теперь необязательно. База данных ADB создает имя индекса по умолчанию из имени таблицы и индексированных столбцов.
  • В команде CREATE TABLE парсер базы данных ADB позволяет размещать запятые между условиями SUBPARTITION TEMPLATE и SUBPARTITION BY, а также между последовательными условиями SUBPARTITION BY. Но эти недокументированные запятые являются устаревшими и генерируют предупреждение об устаревании.
  • Для создания протокола теперь необходимы привилегии суперпользователя.
  • Команда CREATE TYPE SQL содержит новое условие LIKE=type, которое копирует представление нового типа (INTERNALLENGTH, PASSEDBYVALUE, ALIGNMENT и STORAGE) из существующего (PostgreSQL 8.4).
  • Команда GRANT SQL содержит новый синтаксис для предоставления прав на truncate, обертки сторонних данных и сторонние серверы (PostgreSQL 8.4).
  • Команда LOCK SQL содержит опциональное ключевое слово ONLY (PostgreSQL 8.4). Если оно указано, таблица блокируется, но без блокировки наследуемых от нее таблиц.
  • Использование выражения LOCK table вне транзакции вызывает ошибку. В более ранних выпусках ADB выражение выполняется, хотя оно полезно только при выполнении внутри транзакции.
  • Команды SELECT и VALUES SQL поддерживают синтаксис SQL 2008 OFFSET и FETCH (PostgreSQL 8.4). Эти условия предоставляют альтернативный синтаксис для ограничения возвращаемых запросом результатов.
  • Условие FROM может быть опущено в команде SELECT, но ADB больше не допускает такие запросы и ссылается на таблицы базы данных.
  • Ключевые слова ROWS и RANGE SQL изменились с зарезервированных на незарезервированные и могут использоваться без кавычек в качестве имен таблиц или столбцов.
  • В Arenadata DB 6 запрос к внешней таблице с наследуемыми таблицами по умолчанию выполняется рекурсирсивно. Для того, чтобы ограничить запрос родительской таблицей, необходимо в запрос включить ключевое слово ONLY.
  • Значение по умолчанию для параметра конфигурации сервера optimizer_force_multistage_agg изменилось с true на false. Теперь GPORCA по умолчанию выбирает между одноэтапным или двухэтапным планом агрегирования для скалярных агрегатов, содержащих оператор distinct, основываясь на стоимости.
  • Команда TRUNCATE SQL имеет опциональное ключевое слово ONLY (PostgreSQL 8.4). Если оно указано, к таблице применяется операция truncate, не затрагивая наследованные ею таблицы.
  • Утилита командной строки createb содержит новые опции -l(--locale), --lc-collate и --lc-ctype для указания языкового стандарта и классификации символов для базы данных (PostgreSQL 8.4).
  • Утилиты pg_dump, pg_dumpall и pg_restore содержат новую опцию --role=rolename, которая указывает утилите выполнять SET ROLE rolename после подключения к базе данных и перед запуском дампа или операции восстановления (PostgreSQL 8.4).
  • Утилиты командной строки pg_dump и pg_dumpall содержат новую опцию --lock-wait-timeout=timeout (PostgreSQL 8.4). Если она задана, то в случае, когда утилита не может получить блокировку общей таблицы в течение указанного количества миллисекунд, дамп завершается ошибкой вместо бесконечного ожидания.
  • Параметры командной строки -d и -D удалены из утилит pg_dump и pg_dumpall. Соответствующие им длинные версии --inserts и --column-inserts по-прежнему поддерживаются. Добавлена новая опция --binary-upgrade для in-place утилит обновления.
  • Добавлена опция -w (--no-password) в утилиты pg_dump, pg_dumpall и pg_restore.
  • Удалена опция -D из утилиты gpexpand. Схема расширения создается в базе данных postgres.
  • Утилита gpstate содержит новую опцию -x, которая отображает детали текущего расширения системы. При этом gpstate -s и gpstate без указания параметров также сообщают, если выполняется расширение системы.
  • Утилита pg_restore содержит новую опцию -j (--number-of-jobs). Этот параметр позволяет сократить время восстановления большой базы данных за счет одновременного выполнения таких задач, как загрузка данных, создание индексов и создание ограничений.
  • Утилита vacuumdb содержит новую опцию -F (--freeze) для фиксации информации о транзакциях строк.
  • ALTER DATABASE включает условие SET TABLESPACE для изменения табличного пространства по умолчанию.
  • CREATE DATABASE включает опции COLLATE и CTYPE для установки порядка сортировки и классификации символов новой базы данных.
  • В схеме gp_toolkit представления gp_workfile_* изменились благодаря улучшениям рабочего файла Arenadata DB 6.
  • Параметр конфигурации сервера gp_workfile_compress_algorithm изменен на gp_workfile_compression. При включенном сжатии рабочего файла ADB использует компрессию Zstandard.
  • Функции совместимости с Oracle теперь доступны в ADB в виде расширения, основанного на проекте PostgreSQL orafce по ссылке https://github.com/orafce/orafce. Теперь для установки функций совместимости в базе данных вместо выполнения SQL-скрипта выполняется команда SQL CREATE EXTENSION orafce. Расширение orafce базы данных Arenadata DB 6 основано на выпуске orafce 3.7.
  • В качестве ключа распределения ADB 6 поддерживает указание столбца таблицы типа данных citext.
  • Arenadata DB 6 предоставляет единый пакет Client and Loader Tools, который можно загрузить и установить в клиентской системе. Предыдущие выпуски ADB предоставляют отдельные пакеты клиента и загрузчика.
  • Arenadata DB 6 включает в себя модули contrib как для PostgreSQL-sourced, так и для GPDB-sourced. Большинство из этих модулей теперь упакованы как расширения, которые регистрируются с помощью команды CREATE EXTENSION name.
  • В режиме высокой доступности (High Availability, HA) базы данных ADB основной сегмент находится в согласованном состоянии со своим зеркалом с помощью синхронной потоковой репликации на основе журнала предзаписи (Write-Ahead Logging, WAL). Представление gp_stat_replication содержит статистику репликации при включенном зеркалировании мастера или сегмента. В предыдущих выпусках зеркалирование сегментов использовало физическую схему репликации файлов.
  • В таблице gp_segment_configuration удален порт replication_port. При этом для отображения каталога данных экземпляра сегмента добавлен столбец datadir. Значения столбца mode теперь s (синхронизированы) или n (не синхронизированы). Для определения состояния синхронизации необходимо использовать представление gp_stat_replication.