Измененные функции¶
В 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.
Уровень изоляции транзакции | 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.