Использование pg_options
Замечание: При содействии Massimo Dal Zotto
Необязательный файл data/pg_options содержит опции выполнения, используемые сервером для управления трассировкой сообщений и другие настраиваемые параметры сервера. Файл перечитывается сервером при приеме сигнала SIGHUP, что дает возможность изменять опции выполнения на лету без перезапуска Postgres. Опции, указанные в этом файле, могут быть флагами отладки, используемые пакетом трассировки (backend/utils/misc/trace.c) или числовыми параметрами, которые могут использоваться сервером для управления его работой.
Все опции pg_options при запуске сервера установлены в ноль. Новые или измененные опции будут читаться всеми новыми серверами при их запуске. Чтобы сделать действительными любые изменения для всех запущенных серверов, нужно послать SIGHUP в postmaster. Сигнал будет автоматически послан всем серверам. Также мы можем включить изменения только для определенных серверов, посылая им сигнал SIGHUP напрямую.
pg_options также можно указать в ключе -T Postgres:
postgres options -T "verbose=2,query,hostlookup-"
Функции, используемые для печати ошибок и сообщений отладки теперь могут использовать удобства syslog(2). Сообщения, печатающиеся в stdout или stderr, предваряются временной отметкой и pid сервера:
#timestamp #pid #message
980127.17:52:14.173 [29271] StartTransactionCommand
980127.17:52:14.174 [29271] ProcessUtility: drop table t;
980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full
980127.17:52:14.186 [29286] Async_NotifyHandler
980127.17:52:14.186 [29286] Waking up sleeping backend process
980127.19:52:14.292 [29286] Async_NotifyFrontEnd
980127.19:52:14.413 [29286] Async_NotifyFrontEnd done
980127.19:52:14.466 [29286] Async_NotifyHandler done
Этот формат улучшает читабельность logs и позволяет точно понять какой сервер что делал и в какое время. Это также облегчает написание простых сценариев awk или perl, которые проверяют log для обнаружения ошибок базы данных и проблем, или для вычисления временной статистики по транзакциям.
Сообщения, выводящиеся в syslog, используют log возможность LOG_LOCAL0. Использование syslog можно контролировать с помощью syslog pg_option. К сожалению, многие функции вызывают напрямую printf() для печати своих сообщений в stdout или stderr и этот вывод не может быть перенаправлен в syslog или иметь временных отметок. Рекомендуется, чтобы все вызовы printf замещались макросами PRINTF и вывод в stderr использовал бы EPRINTF, для того чтобы мы могли контролировать весь вывод в стандартном виде.
Формат файла pg_options следующий:
# commentoption=integer_value
# set value for optionoption
# set option = 1 option+
# set option = 1 option-
# set option = 0
Заметьте, что ключевым словом также может быть аббревиатура названия опции, определённой в backend/utils/misc/trace.c.
Пример 7-1. Файл pg_options
Например мой файл pg_options содержит следующие значения:
verbose=2
query
hostlookup
showportnumber
В настоящий момент определены следующие опции:
- all
- Флаг глобальной трассировки. Допустимые значения:
- 0
- Сообщения трассировки разрешаются индивидуально
- 1
- Разрешены все сообщения трассировки>
- -1
- Запрещены все сообщения трассировки
- verbose
- Флаг подробностей. Допустимые значения:
- 0
- Нет сообщений. По умолчанию.
- 1
- Печатать информационные сообщения.
- 2
- Печатать более информативные сообщения.
- query
- Флаг трассировки запроса. Допустимые значения:
- 0
- Не печатать запрос.
- 1
- Печатать сжатый запрос в одну строку.
- 4
- Печатать полный запрос.
- plan
- Печатать план запроса.
- parse
- Печатать после разбора.
- rewritten
- Печатать переписанный запрос.
- parserstats
- Печатать статистику разборщика.
- plannerstats
- Печатать статистику планировщика.
- executorstats
- Печатать статистику исполнителя.
- shortlocks
- В настоящий момент не используется, но необходима для использования в будущем.
- locks
- Трассировка блокировок.
- userlocks
- Трассировка блокировок пользователя.
- spinlocks
- Трассировка spin блокировок.
- notify
- Трассировка уведомляющих функций.
- malloc
- В настоящий момент не используется.
- palloc
- В настоящий момент не используется.
- lock_debug_oidmin
- Минимальный oid для трассировки блокировок.
- lock_debug_relid
- Если oid не равно нулю, то трассировка блокировок.
- lock_read_priority
- В настоящий момент не используется.
- deadlock_timeout
- Таймер проверки взаимных блокировок.
- syslog
- Флаг syslog. Допустимые значения:
- 0
- Сообщения в stdout/stderr.
- 1
- Сообщения в stdout/stderr и syslog.
- 2
- Сообщения только в syslog.
- hostlookup
- Разрешить поиск имени хоста в ps_status.
- showportnumber
- Разрешить отображение номера порта в ps_status.
- notifyunlock
- Разблокировка pg_listener после уведомления.
- notifyhack
- Удалять дубликаты кортежей из pg_listener.
|