Измененные функции =================== В **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**. .. csv-table:: Соответствие уровня транзакций стандарту SQL :header: "Уровень изоляции транзакции", "Arenadata DB 6", "PostgreSQL 9.1" :widths: 30, 35, 35 "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**.