03 Занятие 03: Базовый инструментарий / Конфигурирование сервера
Эта страница извлечена из официального PDF в нативный Markdown. Текст слайдов, код и комментарии сохранены в порядке чтения; исходные PDF и HTML остаются эталоном макета. HTML source: dba1_03_tools_configuration.html Archive: DBA1-handouts-16.zip Страниц PDF: 22
Page 1: Базовый инструментарий / Конфигурирование сервера
Авторские права
© Postgres Professional, 2017–2024 Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации, демонстрации) разрешается без ограничений. Коммерческое использование возможно только с письменного разрешения компании Postgres Professional. Запрещается внесение изменений в материалы курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу: edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за любые повреждения и убытки, включая потерю дохода, нанесенные прямым или непрямым, специальным или случайным использованием материалов курса. Компания Postgres Professional не предоставляет каких-либо гарантий на материалы курса. Материалы курса предоставляются на основе принципа «как есть» и компания Postgres Professional не обязана предоставлять сопровождение, поддержку, обновления, расширения и изменения.
Page 2: Темы
- Параметры конфигурации
- Файлы конфигурации
- Управление параметрами на уровнях экземпляра и сеанса
Page 3: Параметры
Задача
- управление работой и поведением СУБД
- Установка
- для экземпляра — файлы конфигурации
- для отдельной базы или пользователя
- для текущего сеанса
Комментарии преподавателя
В PostgreSQL существует большое количество параметров, влияющих на работу СУБД. Параметры позволяют управлять потреблением ресурсов, настраивать работу серверных процессов и многое другое.
Например, при помощи параметра max_connections можно ограничить количество одновременных подключений к серверу.
Полный список и описание параметров конфигурации: https://postgrespro.ru/docs/postgresql/16/runtime-config
В этой теме мы не изучаем назначение отдельных параметров конфигурации, а лишь рассматриваем, какими способами им можно устанавливать значения.
Для установки параметров, в первую очередь, используются файлы конфигурации. Если не определено иное, значения, установленные в этих файлах, действуют для всего экземпляра СУБД.
Ряд параметров можно установить для сеансов в отдельной базе данных или для сеансов отдельного пользователя. Такие установки будут иметь предпочтение перед файлами конфигурации. Мы подробнее коснемся этого варианта в следующих темах курса.
Наконец, многими параметрами можно управлять на уровне отдельного сеанса, прямо во время работы.
Page 4: postgresql.conf
Основной файл конфигурации
- считывается при старте сервера
- возможность подключения дополнительных файлов
- по умолчанию находится в каталоге с данными (PGDATA)
- При изменении параметров необходимо перечитать файл
- => SELECT pg_reload_conf();
- изменение ряда параметров требует перезапуска сервера
Комментарии преподавателя
Основной конфигурационный файл — postgresql.conf.
Расположение файла по умолчанию задается при сборке PostgreSQL. При запуске исполняемого файла сервера с помощью аргумента командной строки -c config_file можно задать требуемое местонахождение файла конфигурации.
По умолчанию файл располагается в каталоге с данными (PGDATA), но пакетные дистрибутивы обычно размещают этот файл в другом месте, в соответствии с правилами, принятыми в конкретной ОС.
Это текстовый, хорошо документированный файл, хранящий параметры в формате «ключ=значение».
Есть возможность подключать дополнительные файлы. По умолчанию в Ubuntu подключаются все файлы из каталога /etc/postgresql/16/main/conf.d.
Если один и тот же параметр указан в конфигурационных файлах несколько раз, будет использоваться значение, считанное последним.
Для вступления в силу внесенных в файл изменений необходимо, чтобы сервер перечитал файл. Для некоторых параметров требуется перезагрузка сервера.
Page 5: Файл postgresql.conf и представление pg_file_settings
Имя конфигурационного файла содержится в доступном для чтения параметре config_file. Имя конфигурационного файла можно указать с помощью ключа командной строки при запуске postgres.
Посмотрим небольшой фрагмент конфигурационного файла.
К основному конфигурационному файлу postgresql.conf можно подключать дополнительные файлы конфигурации. Директивы подключения: include_dir — каталог с дополнительными файлами конфигурации; include — включает дополнительный файл конфигурации; include_if_exists — включает дополнительный файл конфигурации, если он существует. Обычно эти директивы располагаются в завершающей части файла postgresql.conf:
Чтобы увидеть настройки в конфигурационных файлах, можно обратиться к представлению pg_file_settings:
Page 6: Page 6
Представление выводит незакомментированные строки конфигурационных файлов. Столбец applied показывает, будет ли заданное значение применено при перечитывании. В частности, в столбце будет false, если: изменение требует рестарта сервера; существует строка с тем же параметром, которая будет прочитана позже; в одной из строк, где задается параметр, есть ошибка. Представление также показывает имя файла конфигурации и номер строки, что удобно для поиска ошибок.
Представление pg\_settings
Возьмем для примера параметр work_mem. Он определяет объем памяти, выделяемый для таких операций, как сортировка или хеш-соединение. Не для всех запросов значения по умолчанию может быть достаточно. Подробнее о параметре work_mem можно узнать в курсе QPT «Оптимизация запросов». Действующие значения всех параметров доступны в представлении pg_settings. Вот что в нем содержится для параметра work_mem:
Page 7: Page 7
{#source-figure-007 caption=“Source slide page 7: Page 7”}
Рассмотрим ключевые столбцы представления pg_settings: name, unit — название и единица измерения параметра; setting — текущее значение; boot_val — значение по умолчанию; reset_val — начальное значение для сеансов; source — источник текущего значения параметра; sourcefile, sourceline — файл конфигурации и номер строки, если текущее значение было задано в файле; pending_restart — true, если значение изменено в файле конфигурации, но для применения требуется перезапуск сервера. Столбец context определяет действия, необходимые для применения параметра. Среди возможных значений: internal — изменить нельзя, значение задано при установке; postmaster — требуется перезапуск сервера; sighup — требуется перечитать файлы конфигурации, superuser — суперпользователь может изменить для своего сеанса; user — любой пользователь может изменить для своего сеанса.
Порядок применения строк
При перечитывании конфигурации сначала читается основной файл, а затем дополнительные. Если один и тот же параметр встречается несколько раз, то устанавливается значение из последней считанной строки. Например, укажем дважды параметр work_mem в дополнительном файле конфигурации:
Содержимое файла /etc/postgresql/16/main/conf.d/work_mem.conf:
Значение applied = f для первой строки показывает, что она не будет применена. Для параметра work_mem поле context имеет значение user. Значит, параметр можно менять прямо во время сеанса, и позже мы увидим, как это сделать. А чтобы изменить значение во всех сеансах, достаточно перечитать файлы конфигурации:
Убедимся, что параметр work_mem получил значение из второй строки:
Page 8: Page 8
Page 9: postgresql.auto.conf
Файл конфигурации, управляемый командами SQL
- ALTER SYSTEM
- добавляет или изменяет строку
- SET параметр TO значение;
- ALTER SYSTEM RESET параметр;
- удаляет строку
- ALTER SYSTEM RESET ALL;
- удаляет все строки
- Расположение
- всегда в каталоге с данными (PGDATA)
- Действия при изменении
Комментарии преподавателя
Последним считывается файл postgresql.auto.conf. Он всегда располагается в каталоге данных (PGDATA).
Этот файл не следует изменять вручную, для его редактирования предназначена команда ALTER SYSTEM. По сути, ALTER SYSTEM представляет собой SQL-интерфейс для управления параметрами конфигурации.
Для применения изменений, сделанных командой ALTER SYSTEM, сервер должен перечитать конфигурационные файлы, как и в случае с изменением файла postgresql.conf.
Содержимое файлов конфигурации можно увидеть в представлении pg_file_settings. А действующие значения параметров — в представлении pg_settings.
Более подробная информация о команде ALTER SYSTEM:
https://postgrespro.ru/docs/postgresql/16/sql-altersystem
Page 10: Команда ALTER SYSTEM и файл postgresql.auto.conf
Для примера установим параметр work_mem:
Что случилось? ALTER SYSTEM выполняет проверку на допустимые значения.
Вот теперь все правильно. В результате выполнения команды значение 16MB записано в файл postgresql.auto.conf:
Но это значение не применено:
Чтобы применить изменение work_mem, перечитаем файлы конфигурации:
Для удаления строк из postgresql.auto.conf используется команда ALTER SYSTEM RESET:
Page 11: Page 11
Еще раз перечитаем конфигурацию. Теперь восстановится значение из work_mem.conf:
Page 12: В текущем сеансе
{#source-figure-012 caption=“Source slide page 12: В текущем сеансе”}
установка до конца сеанса или транзакции
- установка параметров транзакционна
- допускаются пользовательские параметры
Комментарии преподавателя
Значения параметров можно изменить прямо во время сеанса командой SET или функцией set_config. А для получения текущего значения служит команда SHOW или функция current_setting.
Устанавливая новое значение, можно указать срок его действия: до конца сеанса (по умолчанию) или до конца транзакции (SET LOCAL).
В любом случае установка параметров транзакционна: в случае отмены текущей транзакции, значения измененных в ней параметров вернутся к состоянию на начало транзакции.
Помимо системных параметров PostgreSQL, этими же командами и функциями можно пользоваться для создания и получения значений пользовательских параметров.
Page 13: Установка параметров для текущего сеанса
Для изменения параметров во время сеанса можно использовать команду SET:
Или функцию set_config:
Третий параметр функции говорит о том, нужно ли устанавливать значение только для текущей транзакции (true) или до конца работы сеанса (false). Это важно при работе приложения через пул соединений, когда в одном сеансе могут выполняться транзакции разных пользователей.
Чтение значений параметров во время выполнения
Получить значение параметра можно разными способами:
Сбросим значение к тому, которое действовало в начале сеанса:
Установка параметров внутри транзакции
Откроем транзакцию и установим новое значение work_mem:
Page 14: Page 14
Если транзакция откатывается, установка параметра отменяется, хотя при успешной фиксации новое значение продолжало бы действовать.
Можно установить значение только до конца текущей транзакции:
По завершении транзакции значение восстанавливается:
Пользовательские параметры
Параметры можно создавать прямо во время сеанса, в том числе с предварительной проверкой на существование. В имени пользовательских параметров обязательно должна быть точка, чтобы отличать их от стандартных параметров.
Теперь myapp.currency_code можно использовать как глобальную переменную сеанса:
Page 15: Page 15
Пользовательские параметры можно указывать и в конфигурационных файлах, тогда они автоматически будут инициализироваться во всех сеансах.
Page 16: Итоги
Основной файл конфигурации — postgresql.conf
- ALTER SYSTEM — SQL-интерфейс для управления параметрами конфигурации в postgresql.auto.conf
- При изменениях в файлах нужно перечитать конфигурацию
- Многие параметры можно изменять для текущего сеанса
- Изменение части параметров требует перезапуска сервера
Page 17: Практика
- Получите список параметров, для изменения которых требуется перезапуск сервера.
- В дополнительном подключаемом файле конфигурации сделайте ошибку при изменении параметра max_connections.
- Перезапустите сервер. Убедитесь, что сервер не стартует,
- и проверьте журнал сообщений.
- Исправьте ошибку и запустите сервер.
Комментарии преподавателя
- Расположение файла postgresql.conf можно найти, посмотрев значение параметра config_file, как это сделано в демонстрации.
В завершающей части этого файла имеется директива include_dir, подключающая дополнительные файлы конфигурации.
Создайте в указанном этой директивой каталоге файл max_connections.conf, отредактировав его либо от имени пользователя postgres, либо от имени суперпользователя операционной системы.
Для получения соответствующих прав используйте команду операционной системы sudo.
Используйте знакомый вам текстовый редактор. Например, так: sudo nano /etc/postgresql/16/main/conf.d/max_connections.conf
Для выхода из nano используйте сочетание клавиш Ctrl+X.
Page 18: 1. Параметры, изменение которых требует перезапуска сервера
2. Установка параметра max\_connections
Текущее значение параметра max_connections:
Page 19: Page 19
Допустим, мы решили уменьшить это значение до 50, но ошиблись и вместо нуля написали букву O:
Обнаружить ошибку можно, посмотрев в представление pg_file_settings:
Предположим, мы не посмотрели в pg_file_settings и все-таки решили перезапустить сервер:
Сервер не запускается. Причина записана в журнал сообщений сервера. Вот последние строки журнала:
Исправим ошибку в файле конфигурации:
Сервер не работает, поэтому для проверки воспользуемся командой операционной системы.
Пробуем запустить сервер:
Сервер успешно стартовал, проверяем значение max_connections:
Page 20: Page 20
Page 21: Практика+
- Установите параметр work_mem = 32MB в командной строке запуска утилиты psql. 2. В пакетном дистрибутиве для Ubuntu файл postgresql.conf находится не в каталоге PGDATA. Каким образом сервер находит этот файл конфигурации при запуске?
Комментарии преподавателя
- Используйте один из двух способов: ключ options в строке подключения или переменная среды PGOPTIONS.
Информация о формировании строки подключения:
https://postgrespro.ru/docs/postgresql/16/libpq-connect#LIBPQ-CONNSTRING
- Расположение файла postgresql.conf можно посмотреть в параметре config_file.
Чтобы узнать, где задается этот параметр, посмотрите вывод команды ps для основного процесса postgres. Идентификатор процесса (PID) записан в первой строке файла postmaster.pid, который находится в каталоге с данными (PGDATA).
Page 22: 1. Установка параметров при запуске приложения
Если приложение использует библиотеку libpq для подключения к серверу, установить параметры при запуске можно двумя способами. Первый способ — указать ключ options в строке параметров подключения:
Второй способ — установить переменную окружения PGOPTIONS:
2. Где определяется config\_file
Файл postgresql.conf расположен не в каталоге с данными:
Каким же образом сервер находит postgresql.conf? В пакетном дистрибутиве для Ubuntu значение параметра config_file указано в командной строке запуска сервера. Это позволяет разместить postgresql.conf в каталоге, отличном от PGDATA. Командную строку запуска сервера можно посмотреть с помощью команды ps. Сначала найдем идентификатор (PID) основного процесса сервера, он находится в первой строке файла postmaster.pid, расположенного в каталоге PGDATA:
Теперь мы можем получить командную строку запуска процесса postmaster: