Новые функции ============== В **Arenadata DB 6** добавлено: + `Основные возможности PostgreSQL`_; + `Алгоритм сжатия Zstandard`_; + `Послабления для столбцов в распределенных таблицах`_; + `Функции Ресурсных Групп`_; + `Доработка процедурного языка PL/pgSQL`_; + `Репликация данных таблицы`_; + `Доработки параллельной обработки`_; + `Дополнительные модули Contrib`_; + `PXF версии 5.8.1`_; + `Дополнительные функции`_. Основные возможности PostgreSQL --------------------------------- **Arenadata DB 6** включает в себя несколько новых функций от **PostgreSQL** версий *8.4 -- 9.4*. Обработка типа данных *INTERVAL* улучшена в **PostgreSQL 8.4** в ключе синтаксического анализа литералов интервала в целях соответствия стандартам SQL. Это изменяет вывод для запросов, использующих литералы *INTERVAL* между версиями *5* и *6*. Например: :: $ psql psql (8.3.23) Type "help" for help. gpadmin=# select INTERVAL '1' YEAR; interval ---------- 00:00:00 (1 row) ``` ``` sql $ psql psql (9.2beta2) Type "help" for help. gpadmin=# select INTERVAL '1' YEAR; interval ---------- 1 year (1 row) Так же в **Arenadata DB 6** включены следующие функции и изменения из **PostgreSQL**: + Поддержка пользовательских преобразований ввода-вывода (PostgreSQL 8.4); + Поддержка привилегий на уровне столбцов (PostgreSQL 8.4); + Таблица каталога *pg_db_role_setting*, обеспечивающая поддержку настройки параметров конфигурации сервера для конкретной комбинации базы данных и роли (PostgreSQL 9.0); + Значения в столбце *relkind* таблицы каталога *pg_class* изменены, чтобы соответствовать записям в PostgreSQL 9.3; + Поддержка метода GIN-индекса (PostgreSQL 8.3); + Поддержка Postgres Planner для метода доступа к индексам *SP-GiST* (PostgreSQL 9.2). GPORCA игнорирует индексы SP-GiST; + Поддержка Postgres Planner для агрегатов упорядоченного набора (ordered-set aggregates) и агрегатов перемещения (moving-aggregates) (PostgreSQL 9.4). + Поддержка типа данных *jsonb* (PostgreSQL 9.4); + *DELETE*, *INSERT* и *UPDATE* поддерживают *CTE* (common table expression) условие *WITH* (PostgreSQL 9.1); + Поддержка правил сортировки для задания ее порядка и классификации символов для данных на уровне столбцов (PostgreSQL 9.1). Но GPORCA поддерживает правила сортировки, только когда все столбцы в запросе используют одинаковые правила сортировки. Если столбцы в запросе используют разные правила сортировки, то ADB использует Postgres Planner. Алгоритм сжатия Zstandard --------------------------- В **Arenadata DB 6** для некоторых операций с базой данных добавлена поддержка сжатия *zstd* (Zstandard). Послабления для столбцов в распределенных таблицах ---------------------------------------------------- В предыдущих выпусках при указании ограничения *UNIQUE* и условия *DISTRIBUTED BY* в операторе *CREATE TABLE* условие *DISTRIBUTED BY* должно было быть равно или являться левым подмножеством столбцов *UNIQUE*. **Arenadata DB 6** ослабляет это правило, так что любое подмножество столбцов *UNIQUE* принимается. Это изменение также влияет на правила того, как **Arenadata DB 6** выбирает ключ распределения по умолчанию. Если параметр *gp_create_table_random_default_distribution* выключен (по умолчанию) и условие *DISTRIBUTED BY* не включено, то **ADB** выбирает ключ распределения таблицы, основываясь на следующем: + Если указано условие *LIKE* или *INHERITS*, то ADB копирует ключ распределения из исходной или родительской таблицы; + Если указаны ограничения *PRIMARY KEY* или *UNIQUE*, то ADB выбирает в качестве ключа распределения наибольшее подмножество из всех столбцов ключей; + Если не указаны ни ограничения, ни условия *LIKE* или *INHERITS*, то ADB выбирает в качестве ключа распределения первый подходящий столбец (столбцы с геометрическими или пользовательскими типами данных не допускаются в качестве столбцов ключей распределения ADB). Функции Ресурсных Групп ------------------------- В **ADB** добавлены следующие новые функции для ресурсных групп: + При настройке группы ресурсов больше не требуется указывать *MEMORY_LIMIT*. При указании ``MEMORY_LIMIT=0`` база данных использует глобальный пул общей памяти группы ресурсов для обслуживания запросов, выполняющихся в группе. + При указании ``MEMORY_SPILL_RATIO=0`` для определения начального объема памяти оператора запроса база данных теперь использует параметр конфигурации сервера *statement_mem*. + При совместном использовании настроек групп ресурсов ``MEMORY_LIMIT=0`` и ``MEMORY_SPILL_RATIO=0`` эти новые возможности обеспечивают схему управления памятью, аналогичную схеме, предоставляемой очередями ресурсов базы данных ADB. Значения по умолчанию атрибутов *MEMORY_SHARED_QUOTA*, *MEMORY_SPILL_RATIO* и *MEMORY_LIMIT* для групп ресурсов *admin_group* и *default_group* установлены для использования схемы управления памятью, подобной очереди ресурсов, поэтому при первоначальном включении групп ресурсов запросы выполняются в аналогичной предыдущей среде памяти. .. csv-table:: Значения по умолчанию атрибутов ресурсных групп :header: "Resource Group", "admin_group", "default_group" :widths: 50, 25, 25 "MEMORY_LIMIT", "10", "0" "MEMORY_SHARED_QUOTA", "80", "80" "MEMORY_SPILL_RATIO", "0", "0" Доработка процедурного языка PL/pgSQL --------------------------------------- Процедурный язык PL/pgSQL в **Arenadata DB 6** включает поддержку следующих новых функций: + Прикрепление текста *DETAIL* и *HINT* к выдаваемым пользователю сообщениям об ошибках. Также можно указать коды *SQLSTATE* и *SQLERRMSG* для возврата ошибки, вызванной пользователем (PostgreSQL 8.4); + Оператор *RETURN QUERY EXECUTE*, задающий запрос для динамического выполнения (PostgreSQL 8.4); + Условное выполнение с использованием оператора *CASE* (PostgreSQL 8.4). Подробнее в документации `PostgreSQL `_. Репликация данных таблицы --------------------------- Команда *CREATE TABLE* поддерживает *DISTRIBUTED REPLICATED* в качестве политики распределения. Если указана эта политика распределения, база данных распределяет все строки таблицы по всем экземплярам сегмента в системе **ADB**. .. important:: В пользовательских запросах к реплицированным таблицам нельзя ссылаться на скрытые системные столбцы (ctid, cmin, cmax, xmin, xmax и gp_segment_id), поскольку они не имеют единую, однозначную величину. Для такого запроса ADB возвращает ошибку несуществующего столбца Доработки параллельной обработки ---------------------------------- **Arenadata DB 6** включает следующие усовершенствования параллельной обработки: + Global Deadlock Detector -- предыдущие версии ADB препятствуют глобальной взаимоблокировке, удерживая исключительную блокировку таблиц для операций *UPDATE* и *DELETE*. Хотя эта стратегия действительно предотвращает deadlocks, это обеспечивается за счет низкой производительности при одновременных обновлениях. База данных Arenadata DB 6 включает в себя глобальный детектор взаимоблокировок -- это внутренний процесс, который собирает и анализирует данные ожидания в кластере ADB. Если Global Deadlock Detector определяет, что deadlock существует, он ее прерывает, отменяя один или несколько внутренних процессов. По умолчанию детектор отключен, и для обновлений таблиц проводятся исключительные блокировки на уровне таблицы. А когда детектор включен, база данных ADB проводит исключительные блокировки на уровне строк, и в таком случае одновременные обновления допускаются; + Transaction Lock Optimization -- Arenadata DB 6 оптимизирует использование блокировки транзакций как при *BEGIN*, так и при *COMMIT* транзакции. Это особо выгодно при одновременных смешанных рабочих нагрузках; + Upstream PostgreSQL Features -- Arenadata DB 6 включает в себя основные функции PostgreSQL, в том числе fastpath lock, сокращающие конфликты блокировок. Это выгодно для одновременных коротких запросов и смешанных рабочих нагрузок; + Команда *VACUUM* пропускает страницы, которые не может заблокировать. Это уменьшает частоту появления вакуума, который "застревает" в результате ожидания блокировки блока для очистки в то время, когда другая сессия удерживает блокировку этого блока. Теперь *VACUUM* пропускает блоки, который не может заблокировать сразу, и пытается повторить их блокировку позже; + Команда *VACUUM* перепроверяет видимость блока после удаления "мертвых" кортежей. Если все оставшиеся кортежи в блоке видимы для текущих и будущих транзакций, блок помечается как полностью видимый; + Таблицы, являющиеся частью иерархии партиционированных таблиц, но не содержащие данных, замораживаются, поэтому их не нужно очищать отдельно, и при этом они не влияют на вычисление количества оставшихся идентификаторов транзакций даже до того, как произойдет wraparound. Эти таблицы включают корневую и промежуточную таблицы в иерархии партиций и, если они являются append-optimized, связанные с ними таблицы метаданных. Это делает ненужной операцию *vacuum* для корневой партиции для сокращения ее возраста и устраняет вероятно излишнюю очистку всех дочерних таблиц. Дополнительные модули Contrib ------------------------------ База данных **Arenadata DB 6** разворачивается с дополнительными модулями **PostgreSQL** и **GPDB**: + *auto_explain*; + *diskquota*; + *fuzzystrmatch*; + *gp_sparse_vector*; + *pageinspect*; + *sslinfo*. PXF версии 5.8.1 ------------------ **Arenadata DB 6** включает **PXF 5.8.1**, который вводит следующие новые и измененные функции: + Коннектор PXF S3 теперь поддерживает доступ к данным *CSV* и *Parquet* на S3 с помощью сервиса Amazon S3 Select; + PXF объединяет новые и обновленные библиотеки, чтобы обеспечить поддержку Java 11; + В PXF добавлена поддержка типа *timestamptz* при записи данных *Parquet* во внешний источник данных; + PXF теперь предоставляет команду сброса локального экземпляра PXF-сервера или всех экземпляров PXF-сервера в кластере в неинициализированное состояние; + PXF больше не поддерживает уточнение *DELIMITER* в *CREATE EXTERNAL TABLE* команды *LOCATION URI*. Дополнительные функции ------------------------ **Arenadata DB 6** также включает следующие функции, отличные от версии *5*: + Recursive WITH Queries (Common Table Expressions) больше не считаются бета-функцией и теперь включены по умолчанию; + *VACUUM* обновлен для упрощения пропуска страниц, которые нельзя заблокировать. Это изменение должно значительно снизить частоту "застревания" операции *VACUUM* во время ожидания завершения других сессий; + Appendoptimized alias для опции хранения appendonly-таблицы; + Новые gp_toolkit-представления *gp_resgroup_status_per_host* и *gp_resgroup_status_per_segment* отображают CPU группы ресурсов и использование памяти для каждого хоста и/или сегмента; + Новое представление *gp_stat_replication* содержит статистику репликации, когда включено зеркалирование мастера или сегмента. Представление *pg_stat_replication* содержит только статистику репликации мастера; + Программы *gpfdists* и *psql* в пакете Client and Loader Tools для Windows поддерживают шифрование OpenSSL; + Arenadata DB 6 включает некоторые улучшения производительности PostgreSQL 9.6. + Утилита *gpload* совместима с базой данных ADB 5.х.