Настройка GUC

Обзор

Серверные конфигурационные параметры (также известные как Grand Unified 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:

      $ gpconfig -c <parameter> -v <value> --masteronly
      ВНИМАНИЕ
      Эту команду нельзя применить к параметру gp_default_storage_options несмотря на то, что он принадлежит к категории master. При попытке установки различных значений этого параметра на мастере и сегмент-хостах вы получите следующую ошибку: gp_default_storage_options value cannot be different on master and segments. Для установки значения gp_default_storage_options используйте команду, приведенную ниже.
    • Установка одинакового значения параметра на всех сегментах (включая мастер):

      $ gpconfig -c <parameter> -v <value>
    • Установка различных значений одного параметра на сегмент-хостах и мастере:

      $ gpconfig -c <parameter> -v <value_segment> -m <value_master>
    • Комментирование параметра во всех конфигурационных файлах, которое приводит к возвращению значения по умолчанию:

      $ gpconfig –r <parameter>

master или local

Эта классификация применима только к тем параметрам, значения которых устанавливаются в файле postgresql.conf (system-параметры или session-параметры на системном уровне):

  • master — параметры этого типа должны быть определены только в конфигурационном файле мастера. Значения для этих параметров затем передаются сегментам (или игнорируются ими) во время выполнения.

  • local — параметры этого типа должны быть определены в конфигурационных файлах каждого сегмента (включая мастер). Каждый сегмент просматривает свой собственный файл для определения значений таких параметров. Параметры с типом local всегда требуют перезапуска системы для применения изменений.

restart или reload

Эта классификация применима только к тем параметрам, значения которых устанавливаются в файле postgresql.conf (system-параметры или session-параметры на системном уровне):

  • restart — параметры этого типа требуют перезапуска СУБД для применения изменений:

    $ gpstop -r -a
  • reload — параметры этого типа не требуют перезапуска СУБД для применения изменений и могут быть обновлены путем перезагрузки конфигурационного файла:

    $ gpstop -u -a

superuser

Параметры этого типа могут быть установлены только суперпользователем. Обычным пользователям изменение этих параметров недоступно.

read only

Параметры этого типа недоступны для изменения пользователям (включая суперпользователей). Допускается чтение таких параметров, но не их редактирование.

Чтение параметров

Для вывода текущего значения конфигурационного параметра существует несколько способов:

  • При использовании psql или иной клиентской программы можно выполнить команду SHOW <parameter>;. Например:

    SHOW effective_cache_size;

    Результат:

     effective_cache_size
    ----------------------
     16GB
    (1 row)
    ВАЖНО
    Для параметров с типом session, значения которых определены одновременно на нескольких уровнях, команда SHOW учитывает приоритет настроек. Уровень сессии имеет наибольший приоритет, системный уровень — наименьший.
  • Чтобы вывести значение параметра, хранимое в файле postgresql.conf (на системном уровне), необходимо выйти из psql (или иного используемого клиента) и выполнить следующую команду: gpconfig –s <parameter>. Эта команда показывает значения параметра отдельно для мастера и сегмент-хостов. Она также проверяет консистентность установки значений на всех сегментах. Пример:

    $ gpconfig -s effective_cache_size

    Результат:

    Values on all segments are consistent
    GUC          : effective_cache_size
    Master  value: 16GB
    Segment value: 16GB

Примеры

Session-параметр (на уровне сессии)

 

Ниже приведен пример изменения параметра optimizer. Этот параметр имеет следующую классификацию: master, session, reload. Для изменения значения параметра на уровне сессии выполните следующее:

  1. Подключитесь к мастер-хосту ADB (например, через SSH) под пользователем gpadmin, который создается по умолчанию:

    $ sudo su - gpadmin
  2. Подключитесь к БД через psql (или иную клиентскую программу):

    $ psql adb

    Результат команды:

    psql (9.4.24)
    Type "help" for help.
  3. Выведите текущее значение параметра:

    SHOW optimizer;

    Результат:

     optimizer
    -----------
     on
    (1 row)
  4. Измените значение параметра на off на уровне сессии:

    SET optimizer = off;

    Результат:

    SET
  5. Повторно получите текущее значение параметра:

    SHOW optimizer;

    Значение параметра изменилось:

     optimizer
    -----------
     off
    (1 row)
  6. Выйдите из psql (или иной клиентской программы, которую вы используете):

    \q
  7. Подключитесь к БД через psql (или иную клиентскую программу):

    $ psql adb
  8. Повторно выведите значение параметра:

    SHOW optimizer;

    В другой сессии параметр по-прежнему имеет значение по умолчанию:

     optimizer
    -----------
     on
    (1 row)
Session-параметр (на уровне БД)

 

Ниже приведен пример изменения параметра gp_external_max_segs. Этот параметр имеет следующую классификацию: master, session, reload. Для изменения значения параметра на уровне БД выполните следующее:

  1. Подключитесь к мастер-хосту ADB (например, через SSH) под пользователем gpadmin, который создается по умолчанию:

    $ sudo su - gpadmin
  2. Подключитесь к БД через psql (или иную клиентскую программу):

    $ psql adb

    Результат команды:

    psql (9.4.24)
    Type "help" for help.
  3. Выведите текущее значение параметра:

    SHOW gp_external_max_segs;

    Результат:

     gp_external_max_segs
    ----------------------
     64
    (1 row)
  4. Измените значение параметра на 32 для базы данных adb:

    ALTER DATABASE adb SET gp_external_max_segs = 32;

    Результат:

    ALTER DATABASE
  5. Выйдите из psql (или иной клиентской программы, которую вы используете):

    \q
  6. Подключитесь к БД через psql (или иную клиентскую программу):

    $ psql adb
  7. Повторно получите текущее значение параметра:

    SHOW gp_external_max_segs;

    Значение изменилось:

     gp_external_max_segs
    ----------------------
     32
    (1 row)
    РЕКОМЕНДАЦИЯ
    При изменении конфигурационного параметра с типом session на уровне БД, к которой вы подключены — не забудьте перезапустить текущую сессию. В противном случае вы не увидите изменений.
  8. Подключитесь к другой БД:

    \c books_store

    Результат:

    You are now connected to database "books_store" as user "gpadmin".
  9. Повторно выведите значение параметра:

    SHOW gp_external_max_segs;

    В другой БД параметр по-прежнему имеет значение по умолчанию:

     gp_external_max_segs
    ----------------------
     64
    (1 row)
System-параметр (master и reload)

 

Ниже приведен пример изменения параметра gp_connection_send_timeout. Этот параметр имеет следующую классификацию: master, system, reload. Для изменения значения параметра выполните следующее:

  1. Подключитесь к мастер-хосту ADB (например, через SSH) под пользователем gpadmin, который создается по умолчанию:

    $ sudo su - gpadmin
  2. Выведите текущие значения параметра на сегментах:

    $ gpconfig -s gp_connection_send_timeout

    Результат:

    Values on all segments are consistent
    GUC          : gp_connection_send_timeout
    Master  value: 3600
    Segment value: 3600
  3. Измените значение параметра на 1800 на мастер-хосте:

    $ 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'
  4. Повторно выведите значения параметра на сегментах:

    $ gpconfig -s gp_connection_send_timeout

    Они не изменились:

    Values on all segments are consistent
    GUC          : gp_connection_send_timeout
    Master  value: 3600
    Segment value: 3600
  5. Перезагрузите конфигурационный файл:

    $ gpstop -u -a
  6. Проверьте значения параметра еще раз:

    $ gpconfig -s gp_connection_send_timeout

    Убедитесь, что значение обновлено на мастере:

    Values on all segments are consistent
    GUC          : gp_connection_send_timeout
    Master  value: 1800
    Segment value: 3600

    Поскольку параметр gp_connection_send_timeout относится к категории master, изменять значение параметра на других сегментах не требуется.

System-параметр (local и restart)

 

Ниже приведен пример изменения параметра max_connections. Этот параметр имеет следующую классификацию: local, system, restart. Для изменения значения параметра выполните следующее:

  1. Подключитесь к мастер-хосту ADB (например, через SSH) под пользователем gpadmin, который создается по умолчанию:

    $ sudo su - gpadmin
  2. Выведите текущие значения параметра на сегментах:

    $ gpconfig -s max_connections

    Результат:

    Values on all segments are consistent
    GUC          : max_connections
    Master  value: 250
    Segment value: 750
  3. Увеличьте значение параметра на мастер-хосте до 300 и на сегмент-хостах — до 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'
  4. Повторно выведите значения параметра на сегментах:

    $ gpconfig -s max_connections

    Они не изменились:

    Values on all segments are consistent
    GUC          : max_connections
    Master  value: 250
    Segment value: 750
  5. Перезапустите СУБД:

    $ gpstop -r -a
  6. Проверьте значения параметра еще раз:

    $ gpconfig -s max_connections

    Убедитесь, что значения обновлены и на мастере, и на сегмент-хостах в соответствии с цифрами, указанными на шаге 3:

    Values on all segments are consistent
    GUC          : max_connections
    Master  value: 300
    Segment value: 800
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней