Настройка GUC
Обзор
Серверные конфигурационные параметры (также известные как Global User Configuration, GUC) позволяют администраторам управлять состоянием и конфигурацией ADB. Многие из этих параметров имеют те же названия и поведение, что в PostgreSQL.
ПРИМЕЧАНИЕ
Полный список конфигурационных параметров доступен в документации Greenplum.
|
Основные особенности GUC перечислены ниже:
-
Имена и значения параметров нечувствительны к регистру.
-
Каждый параметр может принимать значение одного из следующих типов данных: boolean, integer, floating point, enum или string.
-
Для параметров с типом boolean допускаются следующие значения:
-
true —
ON
,TRUE
,YES
,1
; -
false —
OFF
,FALSE
,NO
,0
.
-
-
Enum-параметры заполняются так же, как и строковые параметры, но ограничены определенным набором значений.
-
Для параметров, определяющих объем памяти, можно использовать следующие единицы измерения:
-
kB
— килобайты; -
MB
— мегабайты; -
GB
— гигабайты.
Обратите внимание, что в качестве множителя для единиц измерения памяти выступает число
1024
, не1000
. -
-
Для параметров, определяющих время, допускаются следующие единицы измерения:
-
ms
— миллисекунды; -
s
— секунды; -
min
— минуты; -
h
— часы; -
d
— дни.
-
-
При установке параметров, определяющих время или объем памяти, необходимо поместить значение в одинарные кавычки
'
и не использовать пробелы между значением и единицей измерения. Пример:SET effective_cache_size = '20GB';
Установка параметров
Каждый конфигурационный параметр принадлежит к одной из категорий (см. столбец Set Classifications в документации Greenplum), которые определяют каким образом можно изменять значения этого параметра. Все категории подробно описаны ниже.
session или system
Эта классификация определяет, можно ли изменить значение параметра "на лету" (без перезапуска СУБД и перезагрузки конфигурационного файла):
-
session — параметры этой категории могут быть изменены "на лету" на одном из следующих уровней:
-
на уровне сессии:
SET <parameter> = <value>;
-
на уровне БД и роли:
ALTER ROLE <role_name> IN DATABASE <database_name> SET <parameter> = <value>;
-
на уровне роли:
ALTER ROLE <role_name> SET <parameter> = <value>;
-
на уровне БД:
ALTER DATABASE <database_name> SET <parameter> = <value>;
Параметры с типом session также можно определить на уровне всей системы — путем редактирования файла postgresql.conf. В этом случае параметры уже не применяются "на лету" и требуют перезапуска СУБД или перезагрузки конфигурационного файла (подобно параметрам с типом system, которые описаны ниже).
Если параметр с типом session определен одновременно на нескольких уровнях, наиболее детализированная настройка имеет более высокий приоритет. Например, значение, указанное на уровне сессии, перекрывает все прочие настройки. Значение, установленное на уровне БД и роли, перекрывает настройки всех уровней за исключением уровня сессии, и так далее. Системный уровень имеет наименьший приоритет из всех.
-
-
system — параметры этого типа могут быть изменены только путем редактирования файла postgresql.conf (с помощью утилиты
gpconfig
). Изменить такие параметры "на лету" невозможно. Чтобы определить значение системного параметра, необходимо запустить одну из следующих команд, после чего выполнить операцию перезапуска системы или перезагрузки файла (в зависимости от типа параметра):-
Установка значения параметра на Master. Используйте это команду для определения параметров с типом master:
$ gpconfig -c <parameter> -v <value> --masteronly
ВНИМАНИЕЭту команду нельзя применить к параметруgp_default_storage_options
несмотря на то, что он принадлежит к категории master. При попытке установки различных значений этого параметра на Master and Segment-хостах вы получите следующую ошибку: "gp_default_storage_options value cannot be different on master and segments". Для установки значенияgp_default_storage_options
используйте команду, приведенную ниже. -
Установка одинакового значения параметра на всех сегментах (включая Master):
$ gpconfig -c <parameter> -v <value>
-
Установка различных значений одного параметра на Segment-хостах и Master:
$ gpconfig -c <parameter> -v <value_segment> -m <value_master>
-
Комментирование параметра во всех конфигурационных файлах, которое приводит к возвращению значения по умолчанию:
$ gpconfig –r <parameter>
-
master или local
Эта классификация применима только к тем параметрам, значения которых устанавливаются в файле postgresql.conf (system-параметры или session-параметры на системном уровне):
-
master — параметры этого типа должны быть определены только в конфигурационном файле Master-сервера. Значения для этих параметров затем передаются сегментам (или игнорируются ими) во время выполнения.
-
local — параметры этого типа должны быть определены в конфигурационных файлах каждого сегмента (включая Master). Каждый сегмент просматривает свой собственный файл для определения значений таких параметров. Параметры с типом local всегда требуют перезапуска системы для применения изменений.
restart или reload
Эта классификация применима только к тем параметрам, значения которых устанавливаются в файле postgresql.conf (system-параметры или session-параметры на системном уровне):
-
restart — параметры этого типа требуют перезапуска СУБД для применения изменений:
$ gpstop -r -a
-
reload — параметры этого типа не требуют перезапуска СУБД для применения изменений и могут быть обновлены путем перезагрузки конфигурационного файла:
$ gpstop -u -a
Чтение параметров
Для вывода текущего значения конфигурационного параметра существует несколько способов:
-
При использовании psql или иной клиентской программы можно выполнить команду
SHOW <parameter>;
. Например:SHOW effective_cache_size;
Результат:
effective_cache_size ---------------------- 16GB (1 row)
ВАЖНОДля параметров с типом session, значения которых определены одновременно на нескольких уровнях, командаSHOW
учитывает приоритет настроек. Уровень сессии имеет наибольший приоритет, системный уровень — наименьший. -
Чтобы вывести значение параметра, хранимое в файле postgresql.conf (на системном уровне), необходимо выйти из psql (или иного используемого клиента) и выполнить следующую команду:
gpconfig –s <parameter>
. Эта команда показывает значения параметра отдельно для Master и Segment-хостов. Она также проверяет консистентность установки значений на всех сегментах. Пример:$ gpconfig -s effective_cache_size
Результат:
Values on all segments are consistent GUC : effective_cache_size Master value: 16GB Segment value: 16GB
Примеры
Ниже приведен пример изменения параметра optimizer
. Этот параметр имеет следующую классификацию: master, session, reload
. Для изменения значения параметра на уровне сессии необходимо:
-
Подключиться к Master-серверу ADB (например, через SSH) под пользователем
gpadmin
, который создается по умолчанию:$ sudo su - gpadmin
-
Подключиться к БД через psql (или иную клиентскую программу):
$ psql adb
Результат команды:
psql (9.4.24) Type "help" for help.
-
Вывести текущее значение параметра:
SHOW optimizer;
Результат:
optimizer ----------- on (1 row)
-
Изменить значение параметра на
off
на уровне сессии:SET optimizer = off;
Результат:
SET
-
Повторно получить текущее значение параметра. Значение параметра изменилось:
adb=# SHOW optimizer; optimizer ----------- off (1 row)
-
Выйти из psql (или иной клиентской программы, которую вы используете):
\q
-
Подключиться к БД через psql (или иную клиентскую программу):
$ psql adb
-
Повторно вывести значение параметра. В другой сессии параметр по-прежнему имеет значение по умолчанию:
adb=# SHOW optimizer; optimizer ----------- on (1 row)
Ниже приведен пример изменения параметра gp_external_max_segs
. Этот параметр имеет следующую классификацию: master, session, reload
. Для изменения значения параметра на уровне БД необходимо:
-
Подключиться к Master-серверу ADB (например, через SSH) под пользователем
gpadmin
, который создается по умолчанию:$ sudo su - gpadmin
-
Подключиться к БД через psql (или иную клиентскую программу):
$ psql adb
Результат команды:
psql (9.4.24) Type "help" for help.
-
Вывести текущее значение параметра:
SHOW gp_external_max_segs;
Результат:
gp_external_max_segs ---------------------- 64 (1 row)
-
Изменить значение параметра на
32
для базы данныхadb
:ALTER DATABASE adb SET gp_external_max_segs = 32;
Результат:
ALTER DATABASE
-
Выйти из psql (или иной клиентской программы, которую вы используете):
\q
-
Подключиться к БД через psql (или иную клиентскую программу):
$ psql adb
-
Повторно получить текущее значение параметра. Значение изменилось:
adb=# SHOW gp_external_max_segs; gp_external_max_segs ---------------------- 32 (1 row)
РЕКОМЕНДАЦИЯПри изменении конфигурационного параметра с типом session на уровне БД, к которой вы подключены — не забудьте перезапустить текущую сессию. В противном случае вы не увидите изменений. -
Подключиться к другой БД:
\c books_store
Результат:
You are now connected to database "books_store" as user "gpadmin".
-
Повторно вывести значение параметра. В другой БД параметр по-прежнему имеет значение по умолчанию:
books_store=# SHOW gp_external_max_segs; gp_external_max_segs ---------------------- 64 (1 row)
Ниже приведен пример изменения параметра gp_connection_send_timeout
. Этот параметр имеет следующую классификацию: master, system, reload
. Для изменения значения параметра необходимо:
-
Подключиться к Master-серверу ADB (например, через SSH) под пользователем
gpadmin
, который создается по умолчанию:$ sudo su - gpadmin
-
Вывести текущие значения параметра на сегментах:
$ gpconfig -s gp_connection_send_timeout
Результат:
Values on all segments are consistent GUC : gp_connection_send_timeout Master value: 3600 Segment value: 3600
-
Изменить значение параметра на
1800
на Master-сервере:$ gpconfig -c gp_connection_send_timeout -v 1800 --masteronly
Результат:
20221214:19:32:05:010670 gpconfig:bds-mdw:gpadmin-[INFO]:-completed successfully with parameters '-c gp_connection_send_timeout -v 1800 --masteronly'
-
Повторно вывести значения параметра на сегментах. Они не изменились:
[gpadmin@bds-mdw ~]$ gpconfig -s gp_connection_send_timeout Values on all segments are consistent GUC : gp_connection_send_timeout Master value: 3600 Segment value: 3600
-
Перезагрузить конфигурационный файл:
$ gpstop -u -a
-
Проверить значения параметра еще раз. Убедиться, что значение обновлено на Master. Поскольку параметр
gp_connection_send_timeout
относится к категорииmaster
, изменять значение параметра на других сегментах не требуется.[gpadmin@bds-mdw ~]$ gpconfig -s gp_connection_send_timeout Values on all segments are consistent GUC : gp_connection_send_timeout Master value: 1800 Segment value: 3600
Ниже приведен пример изменения параметра max_connections
. Этот параметр имеет следующую классификацию: local, system, restart
. Для изменения значения параметра необходимо:
-
Подключиться к Master-серверу ADB (например, через SSH) под пользователем
gpadmin
, который создается по умолчанию:$ sudo su - gpadmin
-
Вывести текущие значения параметра на сегментах:
$ gpconfig -s max_connections
Результат:
Values on all segments are consistent GUC : max_connections Master value: 250 Segment value: 750
-
Увеличить значение параметра на Master-сервере до
300
и на Segment-хостах — до800
:$ gpconfig -c max_connections -v 800 -m 300
Результат:
20221214:19:19:15:009073 gpconfig:bds-mdw:gpadmin-[INFO]:-completed successfully with parameters '-c max_connections -v 800 -m 300'
-
Повторно вывести значения параметра на сегментах. Они не изменились:
[gpadmin@bds-mdw ~]$ gpconfig -s max_connections Values on all segments are consistent GUC : max_connections Master value: 250 Segment value: 750
-
Перезапустить СУБД:
$ gpstop -r -a
-
Проверить значения параметра еще раз. Убедиться, что значения обновлены и на Master, и на Segment-хостах в соответствии с цифрами, указанными на шаге 3:
[gpadmin@bds-mdw ~]$ gpconfig -s max_connections Values on all segments are consistent GUC : max_connections Master value: 300 Segment value: 800