Мы уже писали про некоторые новинки свежего релиза Greenplum 7 здесь и здесь. Разбираемся, что еще полезного появилось в бета-версии, выпущенной 15 декабря 2022 года. А также рассмотрим, каковы ограничения этого выпуска и почему его пока нельзя использовать в production.
Новые функции PostgreSQL
Помимо возможности применения команды ALTER TABLE к уже заполненным таблицам, включая Append Only, за счет новых методов доступа и поддержки уникальных индексов в AO-таблицах, в свежем релизе, появилось еще много новых функций. Справедливости ради стоит отметить, что на начало января Greenplum 7 еще находится в статусе бета-релиза и пока не рекомендуется для производственного использования. Однако, ИТ-архитектору и дата-инженеру полезно ознакомиться с изменениями этой MPP-СУБД даже на этом этапе.
Итак, VMware Greenplum 7 включает в себя несколько новых функций из версий PostgreSQL с 9.5 по 12, на которой базируется эта MPP-СУБД, что мы рассматривали здесь:
- повышена скорость сортировки символьных, текстовых и числовых полей;
- добавлена поддержка функций array_position() и array_positions();
- введена поддержка SQL-операции INSERT … ON CONFLICT UPDATE, которая подобна UPSERT, но обрабатывает конфликты между одновременными изменениями данных в таблице. Впрочем, это пока не поддерживается оптимизатором GPORCA или AO-таблицами;
- добавлена поддержка безопасности на уровне строк, реализующая истинный контроль доступа к данным для каждой строки и каждого столбца. Администратор базы данных теперь может устанавливать политики безопасности, которые фильтруют, какие строки разрешено обновлять или просматривать определенным пользователям.
- утилита pg_resetxlog была переименована в pg_resetwal, которая очищает журнал упреждающей записи (WAL, Write Ahead Log) и может сбросить некоторую другую управляющую информацию в файле pg_control;
- общий список свободных хэш-таблиц разделен, чтобы уменьшить конкуренцию на серверах с несколькими процессорными сокетами;
- повышена производительность при использовании атомарных операций вместо спин-блокировки для защиты очереди ожидания LWLock;
- разрешена установка и отмена разрешений по умолчанию для схем с помощью команды ALTER DEFAULT PRIVILEGES;
- добавлена поддержка синтаксиса декларативного разделения таблиц PostgreSQL;
- разрешено удаление нескольких функций, операторов и агрегатов с помощью одной команды DROP;
- введена поддержка хранимых процедур SQL со встроенными транзакциями;
- снижена нагрузка на WAL при построении индекса GiST, GIN или SP-GiST – теперь для них требуется меньше места на диске, а данные воспроизводятся быстрее во время восстановления;
- добавлена поддержка JSON в указании путей на элементы, которые необходимо извлечь из данных, аналогично выражениям XPath для доступа SQL к XML;
- введена поддержка сгенерированных столбцов STORED, содержимое которых вычисляется из выражений, включая ссылки на другие столбцы в той же таблице, а не задаются командами INSERT или UPDATE. Но такие столбцы нельзя использовать в качестве ключа распределения в Greenplum;
- добавлена поддержка разрешения некоторым DDL-командам принимать текущего пользователя (CURRENT_USER) или пользователя сеанса (SESSION_USER) вместо определенного имени пользователя;
- команды CREATE/ALTER USER … PASSWORD больше не поддерживают опцию UNENCRYPTED;
- введена поддержка определения расширенной статистики для нескольких столбцов с наиболее распространенным значением (MCV) (через CREATE STATISTICS) для создания лучших планов для SQL-запросов, которые проверяют несколько неравномерно распределенных столбцов. Однако, это пока не поддерживается планировщиком GPORCA;
- введена поддержка автоматического (но переопределяемого) встраивания общих табличных выражений (CTE), если они не имеют побочных эффектов, не являются рекурсивными и в запросе на них ссылаются только один раз. Можно предотвратить встраивание, указав MATERIALIZED, или принудительно встроить CTE с множественными ссылками, указав NOT MATERIALIZED. В предыдущих релизах Greenplum выражения CTE никогда не были встроенными и всегда оценивались перед остальной частью SQL-запроса.
- добавлена поддержка индексов BRIN (Block Range INdexes), хотя оптимизатор GPORCA пока не поддерживает полный набор типов данных BRIN, поддерживаемых планировщиком PostgreSQL;
- добавлена поддержка хэш-индексов с планировщиком PostgreSQL, но пока еще без поддержки GPORCA;
- встроенная функция полнотекстового поиска теперь может искать фразы (несколько соседних слов), которые появляются рядом друг с другом в определенном порядке или с заданным расстоянием между словами;
- Greenplum теперь поддерживает команду ALTER TABLE SET DISTRIBUTED BY для внешних таблиц, но их содержимое должно удовлетворять правилам DISTRIBUTED BY;
- оконные функции теперь поддерживают все параметры кадрирования, показанные в стандарте SQL:2011, включая RANGE, PRECEDING/FOLLOWING, режим GROUPS и расширенные параметры исключения фреймов.
Новые возможности сервера СУБД
Как уже было отмечено ранее, Greenplum 7 теперь включает новый параметр конфигурации сервера, default_table_access_method, который определяет метод доступа к таблице по умолчанию, когда команда CREATE TABLE явно не указывает метод доступа. SQL-команда CREATE TABLE теперь поддерживает указание метода доступа к таблице с помощью нового условия USING <access method>. Это позволяет динамически обновлять метод доступа к таблице с помощью команды ALTER TABLE, используя команду) SET ACCESS METHOD <access_method>.
Также можно динамически обновлять целый ряд параметров хранения для таблицы с помощью команды ALTER TABLE и менять кодировку столбцов таблицы AOCO. Также в AO-таблицах теперь поддерживаются уникальные индексы, ограничения и первичные ключи.
Еще Greenplum теперь включает новый параметр конфигурации сервера, enable_partition_pruning, который включает или отключает возможность планировщика запросов исключать разделы партиционированной таблицы из планов запросов. А новая функция gp_toolkit.__gp_aoblkdir(regclass) позволяет получить записи каталога блоков для индексированной AO-таблицы.
Оптимизатор запросов GPORCA теперь поддерживает набор результатов группировки CUBE, а также планирование и выполнение запросов с несколькими наборами группировок.
По сравнению с версией 6, в Greenplum 7 изменен размер кэша последовательности по умолчанию с 1 (без кэша) на 20, чтобы повысить производительность операций вставки в таблицы, которые определены с последовательным типом данных с использованием значения последовательности. Однако, при работе с кэшем порядковых номеров Greenplum может отбросить некоторые кэшированные значения последовательности. Чтобы избежать этого, рекомендуется явно установить CACHE 1 при создании последовательности.
Изменился синтаксис CPUSET для резервирования ядер ЦП для группы ресурсов: теперь он требует отдельных спецификаций ядер для хоста-координатора и хостов-сегментов. При использовании CPUSET с CREATE RESOURCE GROUP или ALTER RESOURCE GROUP надо сначала настроить ядра для хоста-координатора, а затем сегментировать хосты, используя точку с запятой для их разделения.
Утилита резервного копирования gpscp была переименована в gpsync и теперь принимает новую опцию -a, чтобы синхронизировать исходный и целевой каталоги в режиме архивации. А параметр конфигурации сервера автоочистки теперь включен по умолчанию для всех баз данных.
Функциональность курсора параллельного извлечения, доступная в модуле gp_parallel_retrieve_cursor в Greenplum 6, в 7-ой версии встроена по умолчанию. А команда pg_tables больше не включает в свой вывод внешние таблицы.
В VMware Greenplum 7.0 удалены утилиты gpsys1, createlang и droplang, которые ранее считались устаревшими, опция —skip_root_stats., а также агенты сбора данных gpperfmon, переменная ARRAY_NAME и параметры CREATEUSER/NOCREATEUSER из команды CREATE ROLE и родственных команд. Также удалены следующие параметры конфигурации сервера: debug_latch, gp_eager_dqa_pruning, gp_eager_one_phase_agg, gp_enable_exchange_default_partition, gp_enable_gpperfmon, gp_enable_sort_distinct, gp_gpperfmon_send_interval, gp_hashagg_streambottom, gp_perfmon_print_packet_info, gpperfmon_log_alert_level, gpperfmon_port, max_appendonly_tables, optimizer_enable_dml_triggers, password_hash_algorithm.
Еще в 7-ой версии VMware Greenplum удалены следующие таблицы и представления системного каталога: pg_partition_columns, pg_partition_encoding, pg_partition_rule, pg_partition_template, pg_stat_partition_operations.
Проблемы и ограничения VMware Greenplum 7
В заключение отметим ряд известных проблем и ограничений свежего выпуска этой MPP-СУБД. Из-за статуса бета-релиза пока нельзя обновить предыдущую основную версию до Greenplum 7 Beta, а многие утилиты и расширения еще не поддерживаются в этой версии. Сюда относятся gppkg, Diskquota, IP4R, HLL, TIMESTAMP9, pl/container, pl/java, Madlib, PostGIS, pgbouncer, gpcopy, расширенная проверка пароля, GreenplumPython , PL/R, PXF, коннекторы Spark, NiFi, GemFire, Kafka, центр управления и сборщик метрик, WLM, сервер потоковой передачи, драйверы ODBC и JDBC, GreenplumR, пакеты Data Science, gpmt, восстановление кластера, gp_filedump, gpst, обновления и облачные предложения Greenplum.
Впрочем, по мере исправления ошибок и развития эти ограничения будут сняты и можно будет на практике попробовать новинки Greenplum 7.
Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники