Что настроить в Greenplum 7, чтобы сделать эту MPP-СУБД еще эффективнее. Обзор наиболее популярных параметров конфигурации и рекомендации по установке их значений.
Ограничения подключений и выполнения SQL-запросов: 6 параметров с перезагрузкой системы
Будучи зрелой системой со множеством настроек, Greenplum предоставляет администратору и дата-инженеру широкие возможности по адаптации этой СУБД к особенностям различных вариантов использования. Сегодня рассмотрим наиболее часто применяемые параметры Greenplum, настройка которых пригодится в эффективном управлении памятью, ресурсами, производительностью и подключениями к базе данных. Некоторые из этих конфигураций можно изменить на уровне сеанса, а какие-то требуют перезагрузки системы.
Например, перезагрузки требуют следующие параметры:
- gp_vmem_protect_limit — объем памяти (в МБ), который могут потреблять все процессы PostgreSQL-экземпляра активного сегмента при управлении ресурсами на основе очереди ресурсов или группы ресурсов. Если запрос приведет к превышению этого предела, память не будет выделена, и запрос завершится неудачно.
- max_connections – максимальное количество одновременных подключений к серверу СУБД. В Greenplum подключения пользователей и клиентов проходят только через экземпляр координатора. Экземпляры сегмента должны позволять использовать в 3–10 раз больше ресурсов, чем координатор. Увеличение этого параметра может привести к тому, что Greenplum запросит больше разделяемой памяти. По умолчанию это значение равно 250 на координатора, 750 на сегментах. При увеличении этого параметра необходимо также увеличить значение конфигурации max_prepared_transactions.
- superuser_reserved_connections — количество слотов подключения, зарезервированных для суперпользователей Greenplum. По умолчанию 10.
- runaway_detector_activation_percent – процент памяти, которая может потребляться на выполнение запросов до того, как Greenplum прекратит их выполнение, чтобы избежать сбоя из-за чрезмерного потребления ресурсов. Для запросов, управляемых очередями ресурсов или группами ресурсов, этот параметр определяет, когда база данных Greenplum прекращает выполнение запросов в зависимости от объема памяти, используемой запросами. Значение 100 отключает автоматическое завершение запросов в зависимости от процента используемой памяти. По умолчанию этот параметр равен 90%.
- max_locks_per_transaction – максимальное количество заблокированных объектов в рамках транзакции. Общая таблица блокировок создается с возможностью описания блокировок объектов по формуле max_locks_per_transaction*(max_connections+ max_prepared_transactions), поэтому одновременно можно заблокировать не более этого количества отдельных объектов. Это не жесткое ограничение на количество блокировок, выполняемых одной транзакцией, а скорее максимальное среднее значение. По умолчанию это значение равно 128, и рекомендуется увеличить его при наличии клиентов, которые обращаются к множеству разных таблиц в одной транзакции.
- max_prepared_transactions – максимальное количество транзакций, которые могут одновременно находиться в подготовленном состоянии. Greenplum использует подготовленные транзакции, чтобы обеспечить целостность данных во всех сегментах. Это значение должно быть не меньше значения max_connections в координаторе. Экземплярам сегмента должно быть присвоено то же значение, что и координатору. По умолчанию равно 250, как на мастере, так и на сегментах.
Поскольку эти вышеперечисленные параметры требуют перезагрузки системы, их установкой занимается администратор кластера Greenplum. А следующие конфигурации можно изменить на уровне сеанса, что может сделать дата-инженер в рамках работы с базой данных. Их мы рассмотрим далее.
Параметры настройки Greenplum без перезагрузки системы
Чтобы ускорить выполнение SQL-запросов в рамках клиентской сессии, дата-инженер может настроить следующие конфигурации Greenplum:
- gp_max_plan_size – общий максимальный (несжатый) размер плана выполнения запроса, умноженный на количество операторов движения (срезов) в плане. Если размер плана запроса больше этого значения, запрос отменяется и возвращается ошибка. Значение по умолчанию, равное 0, означает отсутствие ограничений на размер плана. Единица измерения значения этого параметра по умолчанию — кБ, но задавать конфигуацию можно также в МБ и ГБ. Например, значение 200 соответствует 200 КБ, а 1 ГБ соответствует 1024 МБ или 1048576 КБ.
- gp_max_slices — максимальное количество срезов (частей плана запроса, выполняемых на экземплярах сегмента), которые могут быть созданы SQL-запросом. Если запрос генерирует больше срезов, чем задано в этом параметре, Greenplum возвращает ошибку и не выполняет SQL-запрос. Значение по умолчанию — 0, максимального ограничения нет. Дата-инженеру целесообразно установить это значение, чтобы предупредить падение производительности Greenplum, т.к. выполнение SQL-запроса, генерирующего большое количество срезов, снижает скорость работы системы. Например, SQL-запрос, содержащий операторы UNION или UNION ALL для нескольких сложных представлений, может генерировать большое количество срезов. Можно запустить команду EXPLAIN ANALYZE, о которой мы писали здесь, чтобы просмотреть статистику срезов для SQL-запроса.
- gp_vmem_idle_resource_timeout – время бездействия сеанса базы данных, пока системные ресурсы (например, общая память), остаются занятыми. При превышении этого значения системные ресурсы освобождаются, но сеанс остается подключенным к базе данных, что позволяет использовать больше одновременных подключений. По умолчанию этот параметр равен 18 секунд.
- statement_timeout – максимально допустимую продолжительность любого оператора а миллисекундах, по умолчанию равно 0.
- lock_timeout — количество миллисекунд, после которого выполнение любого SQL-оператора прерывается при попытке получить блокировку таблицы, индекса, строки или другого объекта базы данных. Значение 0 (по умолчанию) отключает мониторинг ожидания блокировки. Ограничение применяется отдельно к каждой попытке получения блокировки, включая явные запросы, такие как LOCK TABLE или SELECT FOR UPDATE, так и к неявно создаваемые блокировки. Если для параметра log_min_error_statement установлено значение ERROR или ниже, Greenplum регистрирует оператор, время ожидания которого истекло.
- statement_mem — Объем памяти хоста сегмента для каждого запроса. По умолчанию равно 125 МБ и не может превышать max_statement_mem или предел памяти в очереди ресурсов или группе ресурсов, через которую был отправлен запрос. Если для запроса требуется дополнительная память, используются временные файлы загрузки на диске.
О том, какие еще конфигурации надо настроить, чтобы улучшить работу этой MPP-СУБД, читайте в нашей новой статье. А про инструменты мониторинга системных метрик и SQL-Запросов в Greenplum вы узнаете здесь.
Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники