Новые функции

В Arenadata DB 6 добавлено:

Основные возможности 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 установлены для использования схемы управления памятью, подобной очереди ресурсов, поэтому при первоначальном включении групп ресурсов запросы выполняются в аналогичной предыдущей среде памяти.

Табл. 1. Значения по умолчанию атрибутов ресурсных групп
Resource Group admin_group default_group
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 и Greenplum:

  • 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.х.