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

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

superuser

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

read only

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

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

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

  • При использовании 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

Примеры

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

 

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

  1. Подключиться к Master-серверу 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. Повторно получить текущее значение параметра. Значение параметра изменилось:

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

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

    $ psql adb
  8. Повторно вывести значение параметра. В другой сессии параметр по-прежнему имеет значение по умолчанию:

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

 

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

  1. Подключиться к Master-серверу 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. Повторно получить текущее значение параметра. Значение изменилось:

    adb=#  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. Повторно вывести значение параметра. В другой БД параметр по-прежнему имеет значение по умолчанию:

    books_store=# SHOW gp_external_max_segs;
     gp_external_max_segs
    ----------------------
     64
    (1 row)
System-параметр (master и reload)

 

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

  1. Подключиться к Master-серверу 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 на 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'
  4. Повторно вывести значения параметра на сегментах. Они не изменились:

    [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
  5. Перезагрузить конфигурационный файл:

    $ gpstop -u -a
  6. Проверить значения параметра еще раз. Убедиться, что значение обновлено на 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
System-параметр (local и restart)

 

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

  1. Подключиться к Master-серверу 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. Увеличить значение параметра на 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'
  4. Повторно вывести значения параметра на сегментах. Они не изменились:

    [gpadmin@bds-mdw ~]$ gpconfig -s max_connections
    Values on all segments are consistent
    GUC          : max_connections
    Master  value: 250
    Segment value: 750
  5. Перезапустить СУБД:

    $ gpstop -r -a
  6. Проверить значения параметра еще раз. Убедиться, что значения обновлены и на 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
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней