Глава 06. Конфигурация сервера
В этой главе:
- Настройка сервера
- Параметры
- Контекст параметров
- Файлы конфигурации
- Представления
- Управление параметрами настроек
- Другие парамет ры
Настройка сервера
-
Настройка осуществляется изменением значений параметров.
-
Можно установить значения параметров для:
- экземпляра;
- базы данных;
- роли;
- сессии;
- транзакции.
-
Способы установки параметров на уровне экземпляра:
- опция -c командной строки;
- конфигурационные файлы.
Повлиять на работу экземпляра PostgreSQL можно следующими путями:
- используя опции командной строки процесса postgres; ●используя настройки параметров времени исполнения;
- с помощью переменных окружения.
Большинство опций командной строки имеют аналоги в виде параметров в конфигурационных файлах, хотя в некоторых случаях удобно указывать некоторые параметры в виде опций командной строки. Например, опция -D задает расположение каталога данных, а используя опцию -c (установить значение параметра) с параметром config_file=... можно указать имя конфигурационного файла.
О сновной путь настройки сервера - параметры конфигурации времени исполнения. Параметры можно устанавливать не только в конфигурационных файлах, но и для конкретной базы данных или роли, сессии и даже транзакции. Однако, это зависит от конкретного параметра.
Еще один способ повлиять на работу сервера - переменные окружения. Так, например, переменная окружения PGDATA задает имя каталога данных кластера. По соглашению, имена переменных окружения для PostgreSQL начинаются с префикса PG. Установка переменной окружения PGOPTIONS позволяет клиентам, базирующимся на libpq передать строку с настройками параметров непосредственно серверу. https://www.postgresql.org/docs/15/runtime-config.html.
Параметры
-
Имена параметров не чувствительны к регистру.
-
Типы параметров:
- логический;
- строчный;
- числовой;
- числовой с единицей измерения;
- перечисление.
-
Параметры, их установленные значения, и прочие данн ые о них можно получить с помощью представления pg_catalog.pg_settings.
Имена параметров можно указывать как в верхнем регистре, так и в нижнем:
postgres=# show work_mem;
work_mem
----------
4MB
(1 строка)
postgres=# SHOW WORK_MEM;
work_mem
----------
4MB
(1 строка)
Параметры могут быть логического типа, строчными, числовыми с единицей измерения или без нее, а также могут быть перечислениями:
postgres=# \dconfig+ wal_level
Список параметров конфигурации
Параметр | Значение | Тип | Контекст | Права доступа
-----------+----------+------+------------+---------------
wal_level | replica | enum | postmaster |
(1 строка)
Получить значения параметров можно встроенной командой psql show, метакомандой \dconfig, или обратившись к представлению pg_catalog.pg_settings .
https://www.postgresql.org/docs/15/config-setting.html#CONFIG-SETTING-NAMES-VALUES.
Контекст параметров
# SELECT context, count(*) FROM pg_settings GROUP BY context;
context | count
-------------------+-------
postmaster | 135
superuser-backend | 4
user | 140
internal | 22
backend | 2
sighup | 133
superuser | 60
(7 rows)
Способ изменения:
– internal - параметр нельзя менять непосредственно; – postmaster - параметр устанавливается при старте сервера; – sighup - достаточно перечитать конфигурацию, получив сигнал SIGHUP; – superuser-backend - сессионный параметр суперпользователя, устанавливаемый одноразово; – backend - одноразово устанавливаемый сессионный параметр; – superuser - сессионный параметр суперпользователя; – user - сессионный параметр.
У каждого параметра имеется контекст его применения, определяющий способ его изменения. Например:
postgres=# \dconfig+ listen_addresses|work_mem
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
------------------+----------+---------+------------+---------------
listen_addresses | * | string | postmaster |
work_mem | 4MB | integer | user |
(2 rows)
Контекст параметра указан в представлении pg_settings в поле context. https://www.postgresql.org/docs/15/view-pg-settings.html.
Файлы конфигурации
Файл конфигурации postgresql.conf
$ sudo -E -u postgres postgres -C config_file 2> /dev/null
/pgdata/06/data/postgresql.conf
- Настраивает параметры для всего экземпляра.
- По умолчанию находится в каталоге данных PGDATA.
- Изменить местонахождение можно, указав при запуске postgres опцию -c config_file.
- Порядок изменения параметра зависит от его контекста, требуется либо рестарт, либо перечитывание конфигурации.
- В примере опция -C вывела значение параметра config_file.
При загрузке экземпляра первым считываются настройки параметров конфигурации из файла postgresql.conf. Это текстовый файл со строками вида параметр=значение. Комментарии после #. Файл считывается строка за строкой с первой до последней незакомментированной строки и если в более ранней строке назначено одно значение некоторого параметра, а далее этому же параметру в другой строке назначено другое значение, то в итоге параметру будет назначено последнее значение.
По умолчанию конфигурационный файл находится непосредственно в каталоге данных кластера PGDATA. Однако, это именно тот случай, когда удобно задать значение параметра настройки опцией командной строки при запуске головного процесса postgres. Например, так:
postgres -c config_file=/etc/pangolin/6.2.0/postgresql.conf -D
/pgdata/06/data
Здесь посредством опции -c установлено значение параметра конфигурации, указывающего местоположение конфигурационного файла. Наоборот, обратиться к экземпляру PostgreSQL и узнать значение какого-либо параметра в командной строке можно с помощью опции -C, как это показано на слайде.
Достаточно ли простого перечитывания файла конфигурации после изменения параметра или же необходима перезагрузка определяет контекст этого параметра.
https://www.postgresql.org/docs/15/config-setting.html.
Подключаемые файлы
$ grep -i include $PGDATA/postgresql.conf
# CONFIG FILE INCLUDES
#include_dir = '...' # include files ending in '.conf' from #include_if_exists = '...' # include file only if it exists #include = '...' # include file
Если параметру задается значение в нескольких строках, то параметр принимает последнее назначенное значение.
В конце файла postgresql.conf находятся директивы подключения дополнительных файлов конфигурации, в которые удобно помещать настройки параметров, переписывающие более ранние установки.
Вместо прямого редактирования файла конфигурации postgresql.conf можно использовать возможность подключения дополнительных файлов конфигурации, заключающаяся в том, что в конце файла postgresql.conf устанавливают одну из директив:
- include - подключение заданного файла конфигурации;
- include_if_exists - подключение файла при его наличии;
- include_dir - подключить все файла с расширением .conf в заданном каталоге.
https://www.postgresql.org/docs/15/config-setting.html.
Представления
Представление pg_file_settings
# select seqno, sourcefile, sourceline, name, setting from pg_file_settings where seqno < 6;
seqno | sourcefile | sourceline | name | setting
-------+---------------------------------+------------+----------------------------+---------
1 | /pgdata/06/data/postgresql.conf | 65 | max_connections | 100
2 | /pgdata/06/data/postgresql.conf | 127 | shared_buffers | 128MB
3 | /pgdata/06/data/postgresql.conf | 150 | dynamic_shared_memory_type | posix
4 | /pgdata/06/data/postgresql.conf | 244 | max_wal_size | 1GB
5 | /pgdata/06/data/postgresql.conf | 245 | min_wal_size | 80MB
- Показывает источник настройки параметра в файлах конфигурации.
- Удобен для поиска ошибок конфигурации.
- Текущие значения многих параметров могут быть настроены на уровне сессии или транзакции, то есть, отличаться от настроек в файлах.
Системное представление pg_file_settings суммарное содержимое всех файлов конфигурации, показывая все незакомментированные строки настроки с указанием файла конфигурации, в котором встретилась данная настройка, номера строки, параметра и назначенного ему значения, информации о том, может ли быть данное назначение вообще применено, а если нет, то выводится сообщение об ошибке.
Например:
postgres=# SELECT * FROM pg_file_settings WHERE name = 'max_connections' \gx
-[ RECORD 1 ]-------------------------------
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 65
seqno | 1
name | max_connections
setting | 100
applied | f
error |
-[ RECORD 2 ]-------------------------------
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 1027
seqno | 20
name | max_connections
setting | 100
applied | t
error |
Параметру max_connections назначены значения в 65 и 1027 строках. https://www.postgresql.org/docs/15/view-pg-file-settings.html.
Столбцы pg_file_settings
- sourcefile - имя файла конфигурации;
- sourceline - номер строки в файле конфигурации, из которой получена эта запись;
- seqno - порядковый номер записи;
- name - параметр конфигурации;
- setting - значение параметра;
- applied - True, если значение может быть применено успешно;
- error - сообщение об ошибке, либо NULL.
Все строки представления pg_file_settings связаны с соответствующими парами параметр=значение в конфигурационных файлах. Это позволяет легко отыскивать ошибки, например, связанные с назначением неправильных значений параметрам. Структура полей строк этого представления приведена на слайде.
Если ошибка связана с невозможностью прочитать файл или в файле имеется незакомментированная строка, не соответствующая положенной структуре параметр=значение. В представлении будут отсутствовать строки, показывающие на другие параметры. Например, если в первой строке файла postgresql.conf строка с неправильной структурой, в выводе представления будет следующее:
postgres=# SELECT * FROM pg_file_settings \gx
-[ RECORD 1 ]-------------------------------
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 1
seqno | 1
name |
setting |
applied | f
error | syntax error
Представление pg_settings
Показывает текущие настройки:
# SELECT * FROM pg_settings WHERE name = 'max_connections' \gx
-[ RECORD 1 ]------------------+-------------------------------------
name | max_connections
setting | 100
unit |
category | Connections and Authentication / Connection Settings
short_desc | Sets the maximum number of concurrent connections.
extra_desc |
context | postmaster
vartype | integer
source | configuration file
min_val | 1
max_val | 262143
enumvals |
boot_val | 100
reset_val | 100
sourcefile | /pgdata/06/data/postgresql.conf
sourceline | 1027
pending_restart | f
Представление pg_settings выводит текущие значения параметров сервера. Они совсем не обязательно имеют те значения, которые были назначены в конфигурационных файлах. Например, многие параметры могут получить значение, которое будет назначено до конца сессии или даже транзакции. Проверим:
'max_parallel_workers' \gx
-[ RECORD 1 ]-----------------
name | max_parallel_workers
setting | 8
postgres=# SET max_parallel_workers TO 10;
SET
postgres=# SELECT name, setting FROM pg_settings WHERE name = 'max_parallel_workers' \gx
-[ RECORD 1 ]-----------------
name | max_parallel_workers
setting | 10
postgres=# \c
Вы подключены к базе данных "postgres" как пользователь "postgres". postgres=# SELECT name, setting FROM pg_settings WHERE name = 'max_parallel_workers' \gx
-[ RECORD 1 ]-----------------
name | max_parallel_workers
setting | 8
В сессии было установлено значение параметра max_parallel_workers = 10. После переподключения параметр вернулся к значению 8.
Некоторые столбцы pg_settings:
- name - параметр конфигурации;
- setting - значение параметра;
- unit - единица измерения;
- boot_val - значение параметра при запуске сервера;
- reset_val - значение параметра после RESET в сеансе;
- sourcefile - файл конфигурации, в котором было задано текущее значение, или NULL;
- sourceline - номер строки в файле конфигурации, в котором было задано текущее значение, или NULL;
- pending_restart - true, если значение изменено в файле конфигурации, но требуется перезапуск; в противном случае — false.
Полное описание столбцов pg_settings в документации: https://www.postgresql.org/docs/15/view-pg-settings.html.
Для числовых параметров бывают важны поля представления min_val и max_val. Для перечислимых - enumvals, показывающее все возможные значения параметра.
Поле boot_val показывает назначаемое при старте сервера значение параметра, если оно не назначается где-либо иным способом.
Поле reset_val показывает к какому значению будет сброшен параметр в текущей сессии при выполнении команды RESET.
Поле pending_restart содержит true, если значение параметра было изменено в конфигурационном файле, и требуется рестартовать. Во всех остальных случаях в этом поле false.
Управление параметрами настроек
- Команда ALTER SYSTEM
- Порядок применения настроек
- Проверка применимости настроек
- Сброс настройки
- Привилегия изменять параметры
Команда ALTER SYSTEM
postgres=# ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM
postgres=# \! cat $PGDATA/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
max_connections = '200'
- Команда ALTER SYSTEM изменяет настройки на уровне экземпляра, записывая строки конфигурации в файл postgresql.auto.conf в каталоге данных PGDATA.
- В зависимости от контекста параметра требуется рестарт или перечитывание конфигурации.
Изменение параметра на уровне всего экземпляра можно осуществить посредством команды ALTER SYSTEM.
Эта команда сама по себе не меняет реальное значение параметра непосредственно в период исполнения. Результатом этой команды является запись в специальный файл конфигурации postgresql.auto.conf настройки значения параметра в стандартном виде параметр=значение. Этот файл не следует редактировать вручную, так как он предназначен для автоматизированного изменения параметров с помощью ALTER SYSTEM.
Для применения измененного значения параметра конфигурации необходимо либо перегрузить сервер для параметров с контекстом postmaster, либо перечитать файл конфигурации.
Перечитывание происходит при получении головным процессом экземпляра сигнала SIGHUP (Hang Up, его номер - 1, см. kill -l). Удобно либо передать сигнал командой killall -SIGHIP postgres, либо выполнить pg_ctl reload, либо от имени суперпользователя кластера выполнить SELECT pg_reload_conf();. https://www.postgresql.org/docs/15/sql-altersystem.html.
Порядок применения настроек
postgres=# ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM
postgres=# ALTER SYSTEM SET shared_buffers = '512MB';
ALTER SYSTEM
postgres=# \! cat $PGDATA/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
max_connections = '200'
shared_buffers = '512MB'