18.15. Обработка ошибок

exit_on_error (boolean)

Если этот параметр включён, любая ошибка приведёт к прерыванию текущего сеанса. По умолчанию он отключён, так что сеанс будет прерываться только при критических ошибках.

restart_after_crash (boolean)

Когда этот параметр включён (это состояние по умолчанию), Postgres Pro будет автоматически перезагружаться после сбоя серверного процесса. Такой вариант позволяет обеспечить максимальную степень доступности базы данных. Однако в некоторых обстоятельствах, например, когда Postgres Pro управляется кластерным ПО, такую перезагрузку лучше отключить, чтобы кластерное ПО могло вмешаться и выполнить, возможно, более подходящие действия.

Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

data_sync_retry (boolean)

При выключенном значении этого параметра (по умолчанию) Postgres Pro будет выдавать ошибку уровня PANIC в случае неудачи при попытке сохранить изменённые данные в файловой системе. В результате сервер баз данных остановится аварийно. Задать этот параметр можно только при запуске сервера.

В некоторых операционных системах состояние данных в кеше внутри ядра оказывается неопределённым при ошибке записи. В каких-то случаях эти данные могут быть просто утеряны, и повторять попытку записи небезопасно: вторая попытка может оказаться успешной, тогда как на деле данные не сохранены. В этих обстоятельствах единственный способ избежать потери данных — восстановить их из WAL после такого сбоя, но перед этим желательно выяснить причину проблемы и, возможно, заменить нерабочее оборудование.

Если включить этот параметр, Postgres Pro в случае сбоя при записи выдаст ошибку, но продолжит работу в расчёте повторить операцию сохранения данных при последующей контрольной точке. Включать его следует, только если достоверно известно, как поступает система с данными в буфере при ошибке записи.

recovery_init_sync_method (enum)

Со значением fsync (это значение по умолчанию), Postgres Pro будет рекурсивно открывать и синхронизировать все файлы в каталоге данных до начала восстановления после сбоя. Поиск файлов будет осуществляться по символическим ссылкам для каталога WAL и каждого настроенного табличного пространства (но не другим символическим ссылкам). Это делается для того, чтобы убедиться, что все файлы WAL и данных надёжно сохранены на диске перед воспроизведением изменений, и применяется при запуске кластера базы данных, который не был остановлен штатным образом (это касается и копий созданных программой pg_basebackup).

В Linux возможен вариант syncfs, когда от ОС требуется синхронизировать целиком каждую из файловых систем, содержащих каталог данных, файлы WAL и табличные пространства (но не те файловые системы, которые подключены по символическим ссылкам). При этом не нужно открывать каждый отдельный файл, поэтому данный вариант может работать гораздо быстрее, чем fsync. С другой стороны, он может быть медленнее, если файловую систему совместно используют и другие приложения, изменяющие множество файлов, поскольку эти файлы также будут записываться на диск. Более того, Linux версий до 5.8 может не всегда сообщать Postgres Pro об ошибках ввода-вывода, произошедших при записи данных на диск, так что соответствующие сообщения можно увидеть только в журналах ядра.

Задать этот параметр можно только в postgresql.conf или в командной строке при запуске сервера.

crash_info (boolean)

Если установлено значение по умолчанию on, Postgres Pro записывает диагностическую информацию о сбое сервера в файл.

Этот параметр можно задать только при запуске сервера.

crash_info_dump (text)

Указывает разделённый запятыми список текстовых строк, содержащих источники данных для аварийных дампов. Возможны следующие значения строк:

  • queries — тексты запросов.

  • memory_context — контекст памяти Postgres Pro (за подробностями обратитесь к Разделу 46.3).

  • system — информация об ОС.

  • module — информация о модулях, загруженных в процесс postgres.

  • cpuinfo — информация о процессоре: число ядер, набор инструкций, и т. д.

  • cpu_context:

    • Регистры контекста процессора.

    • Общая информация об ошибке: номер сигнала, информация о коде сигнала, PID, PID родительского процесса, идентификатор пользователя и т. д.

  • virtual_memory — информация о виртуальной памяти

  • instruction_pointer — байты около RIP (return instruction pointer, указатель возврата инструкции, который указывает на адрес памяти, по которому можно судить о прогрессе выполнения программы в памяти).

  • stack — размер стека (байты). Стек выгружается в отдельный файл из каталога, куда записывается диагностическая информация о сбоях сервера (по умолчанию PGDATA/crash_info). Этот файл называется так же, как и журнал сбоев, но имеет расширение .data. Адреса верхней и нижней границ стека записываются в журнал сбоев.

Значение по умолчанию — system,module,queries,cpu_context,instruction_pointer.

Этот параметр можно задать только при запуске сервера.

crash_info_location (string)

Указывает каталог, в котором должна храниться информация о сбое сервера. При значении stderr информация о сбое отправляется в каталог stderr. Если в этом параметре указана пустая строка '' (по умолчанию), используется каталог $PGDATA/crash_info. Если нужно сохранять файлы в другом месте, заранее создайте целевой каталог и выдайте соответствующие права.

Этот параметр можно задать только при запуске сервера.

crash_info_timer (boolean)

Включает или отключает выгрузку состояния длительных запросов по таймеру, что позволяет профилировать такие запросы. Таймер запускается по интервалу, значение которого указывается в crash_info_timer_interval, и измеряет время обработки запроса. Когда время выполнения запроса превышает пороговое значение, указанное в crash_info_query_threshold, состояние запроса выгружается на диск. Значение по умолчанию — off. Чтобы таймер работал, для crash_info_dump должно быть установлено значение по крайней мере queries. Изменить этот параметр могут только суперпользователи командой SET в текущем сеансе или глобально в файле конфигурации.

Этот параметр можно задать только при запуске сервера в файле postgresql.conf. Чтобы перечитать значение параметра, перезапустите сервер или отправьте сигнал SIGHUP главному серверному процессу.

crash_info_timer_interval (integer)

Задаёт временной интервал для запуска таймера (в миллисекундах). Значение по умолчанию — 1000. Изменить этот параметр могут только суперпользователи командой SET в текущем сеансе или глобально в файле конфигурации.

Этот параметр можно задать только при запуске сервера в файле postgresql.conf. Чтобы перечитать значение параметра, перезапустите сервер или отправьте сигнал SIGHUP главному серверному процессу.

crash_info_query_threshold (integer)

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

Этот параметр можно задать только при запуске сервера в файле postgresql.conf. Чтобы перечитать значение параметра, перезапустите сервер или отправьте сигнал SIGHUP главному серверному процессу.