Параметры для разработчиков

Следующие параметры предназначены для использования разработчиками в процессе тестирования и никогда не должны применяться в рабочей базе данных. Тем не менее некоторые из них могут помочь при восстановлении сильно поврежденных баз данных. По этим причинам они были исключены из примера файла qhb.conf. Обратите внимание, что для работы со многими из этих параметров требуются специальные флаги компиляции исходного кода.

allow_in_place_tablespaces (boolean)

Позволяет создавать табличные пространства как каталоги в pg_tblspc, когда в команде CREATE TABLESPACE в качестве строки расположения каталога задана пустая строка. Это предназначено для тестирования сценариев репликации, когда основной и резервный серверы запущены на одном компьютере. Такие каталоги, скорее всего, собьют с толку инструменты резервного копирования, которые ожидают найти в этом месте только символические ссылки. Только суперпользователи могут изменять этот параметр.

allow_system_table_mods (boolean)

Разрешает модификации структуры системных таблиц, а также некоторые другие рискованные действия с системными таблицами. Если этот параметр отключен, эти действия не разрешены даже суперпользователям. Необдуманное применение этого параметра может вызвать неисправимую потерю данных или серьезно повредить СУБД. Только суперпользователи могут изменять этот параметр.

backtrace_functions (string)

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

Поддержка обратной трассировки доступна не на всех платформах, а качество этой трассировки зависит от параметров компиляции.

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

debug_discard_caches (integer)

При значении 1 каждая запись кэша системного каталога становится недействительной при первой же возможности, независимо от того, произошло ли в действительности что-то, что могло бы привести ее в недействительное состояние. В результате кэширование системных каталогов по сути отключается, поэтому сервер будет работать крайне медленно. При более высоких значениях инвалидация кэша выполняется рекурсивно, приводя к еще большему замедлению, что полезно только для тестирования собственно логики кэширования. При значении 0 (по умолчанию) выбирается обычное поведение кэширования каталога.

Этот параметр может быть очень полезен при попытках спровоцировать трудновоспроизводимые ошибки, связанные с параллельными изменениями в каталоге, но в остальном требуется редко. Подробную информацию см. в файлах исходного кода inval.c и pg_config_manual.h.

Этот параметр поддерживается, если во время компиляции был определен макрос DISCARD_CACHES_ENABLED (что происходит автоматически при использовании параметра конфигурации --enable-cassert). В производственных сборках он всегда будет иметь значение 0, и попытки изменить его вызовут ошибку.

force_parallel_mode (enum)

Позволяет использовать параллельные запросы в целях тестирования, даже в случаях, когда не ожидается никакого улучшения производительности. Допустимые значения force_parallel_mode: off (использовать параллельный режим, только когда от этого ожидается улучшение производительности), on (принудительно использовать параллельный режим для всех запросов, для которых это считается безопасным) и regress (похож на on, но с дополнительными изменениями поведения, описанными ниже).

Говоря точнее, при значении on в вершину любого плана, для которого это считается безопасным, добавляется узел Gather (Сбор), так что запрос выполняется внутри параллельного рабочего процесса. Даже когда параллельный рабочий процесс недоступен или его нельзя использовать, такие операции, как запуск субтранзакции, которые были бы запрещены в контексте параллельного запроса, будут запрещены, если только планировщик не решит, что это вызовет ошибку запроса. Если при установке этого параметр возникают ошибки или выдаются неожиданные результаты, возможно, некоторые функции, применяемые в этом запросе, нужно будет пометить как PARALLEL UNSAFE (или, возможно, PARALLEL RESTRICTED).

Значение regress имеет тот же эффект, что и значение on, плюс некоторые дополнительные эффекты, призванные упростить автоматическое регрессионное тестирование. Обычно сообщения от параллельного рабочего процесса включают строку контекста, отмечающую это, но значение regress подавляет эту строку, поэтому вывод будет такой же, как и при не параллельном выполнении. Кроме того, узлы Gather, добавляемые в планы при установке этого значения, скрываются в выводе EXPLAIN, так что этот вывод соответствует тому, который был бы получен при значении off (выключен).

ignore_system_indexes (boolean)

Игнорировать системные индексы при чтении системных таблиц (но при этом индексы все равно будут меняться при изменении этих таблиц). Это полезно для восстановления системы при поврежденных системных индексах. Этот параметр нельзя изменить после запуска сеанса.

post_auth_delay (integer)

Время задержки при запуске нового серверного процесса после проведения им процедуры аутентификации. Этот параметр предназначен для того, чтобы разработчики имели возможность присоединить отладчик к серверному процессу. Если это значение указано без единиц измерения, оно считается заданным в секундах. При нулевом значении (по умолчанию) задержка выключается. Этот параметр нельзя изменить после запуска сеанса.

pre_auth_delay (integer)

Время задержки сразу после ветвления нового серверного процесса, до проведения им процедуры аутентификации. Этот параметр предназначен для того, чтобы разработчики имели возможность присоединить отладчик к серверному процессу в целях выявления нарушений аутентификации. Если это значение указано без единиц измерения, оно считается заданным в секундах. При нулевом значении (по умолчанию) задержка выключается. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

trace_notify (boolean)

Генерирует и выводит очень подробную отладочную информацию при выполнении команд LISTEN и NOTIFY. Чтобы отправлять эти данные клиенту или в журнал сервера, параметр client_min_messages или log_min_messages соответственно должен иметь значение DEBUG1 или ниже.

trace_recovery_messages (enum)

Включает запись в журнал отладочной информации, связанной с восстановлением, которая иначе не протоколируется. Этот параметр позволяет пользователю переопределить обычное значение log_min_messages, но только для конкретных сообщений. Он предназначен для использования при отладке режима горячего резерва. Допустимые значения: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1 и LOG. Значение по умолчанию, LOG, никак не влияет на решения о протоколировании. С другими значениями связанные с восстановлением отладочные сообщения, имеющие заданный приоритет или выше, записываются так, как если бы имели приоритет LOG; при обычных значениях log_min_messages это подразумевает их обязательную передачу в журнал сервера. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

trace_sort (boolean)

Если этот параметр включен, то во время операций сортировки будет выводиться информация об использовании ресурсов. Этот параметр доступен, только если при компиляции QHB был определен макрос TRACE_SORT. (Хотя в настоящее время TRACE_SORT определяется по умолчанию.)

trace_locks (boolean)

Если этот параметр включен, будет выводиться информация об использовании блокировок. Эта информация включает тип операции блокировки, тип самой блокировки и уникальный идентификатор заблокированного или разблокированного объекта. Также включены битовые маски для типов блокировки, уже полученных для этого объекта, а также для типов блокировки, ожидающих его. Кроме того, выводится количество полученных и ожидающих блокировок для каждого типа блокировки, а также их общее число. Пример вывода в файл журнала:

LOG:  LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1
      wait(0) type(AccessShareLock)
LOG:  UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(INVALID)

Этот параметр доступен, только если при компиляции QHB был определен макрос LOCK_DEBUG.

trace_lwlocks (boolean)

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

Этот параметр доступен, только если при компиляции QHB был определен макрос LOCK_DEBUG.

trace_userlocks (boolean)

Если этот параметр включен, будет выводиться информация об использовании пользовательских блокировок. Она выводится в той же форме, что и с trace_locks, но для рекомендательных блокировок.

Этот параметр доступен, только если при компиляции QHB был определен макрос LOCK_DEBUG.

trace_lock_oidmin (integer)

Если этот параметр установлен, блокировки для таблиц ниже заданного OID трассироваться не будут (это используется, чтобы исключить выведение информации по системным таблицам).

Этот параметр доступен, только если при компиляции QHB был определен макрос LOCK_DEBUG.

trace_lock_table (integer)

Обязательно трассировать блокировки для таблицы с заданным OID.

Этот параметр доступен, только если при компиляции QHB был определен макрос LOCK_DEBUG.

debug_deadlocks (boolean)

Если этот параметр установлен, по истечении времени ожидания взаимоблокировки будет выводиться информация обо всех текущих блокировках.

Этот параметр доступен, только если при компиляции QHB был определен макрос LOCK_DEBUG.

log_btree_build_stats (boolean)

Если этот параметр установлен, будет протоколироваться статистика использования системных ресурсов (память и ЦП) при различных операциях с B-деревом.

Этот параметр доступен, только если при компиляции QHB был определен макрос BTREE_BUILD_STATS.

wal_consistency_checking (string)

Этот параметр предназначен для проверки ошибок в процедурах воспроизведения WAL. Когда этот параметр включен, в запись WAL добавляются полностраничные изображения всех изменяемых вместе с ней буферов. Если эта запись впоследствии воспроизводится, система сначала применяет каждую запись, а затем проверяет, соответствуют ли измененные этой записью буферы сохраненным образам. В некоторых случаях (например во вспомогательных битах) незначительные изменения допустимы и будут игнорироваться. Любые неожиданные различия приведут к фатальной ошибке, и восстановление прекратится.

Значение этого параметра по умолчанию, пустая строка, выключает эту функцию. Его значением может быть all для проверки всех записей или список имен менеджеров ресурсов через запятую для проверки только записей, поступающих от этих менеджеров. В настоящее время поддерживаются следующие менеджеры ресурсов: heap, heap2, btree, hash, gin, gist, sequence, spgist, brin и generic. Только суперпользователи могут изменять этот параметр.

wal_debug (boolean)

Если этот параметр включен, будет выводиться отладочная информация, касающаяся WAL. Этот параметр доступен, только если при компиляции QHB был определен макрос WAL_DEBUG.

ignore_checksum_failure (boolean)

Этот параметр действует, только если включен параметр data-checksums.

При обнаружении ошибки контрольной суммы во время чтения QHB обычно сообщает об ошибке, прерывая текущую транзакцию. Если параметр ignore_checksum_failure включен, система игнорирует ошибку (но все равно выдает предупреждение) и продолжает обработку. Такое поведение может привести к сбою, распространению или сокрытию повреждения данных и другим серьезным проблемам. Однако оно же позволяет обойти ошибку и извлечь неповрежденные кортежи, которые все еще могут находиться в таблице, если заголовок блока адекватен. Если заголовок поврежден, будет выдана ошибка, даже если этот параметр включен. Значение по умолчанию — off (выключен), и изменить его может только суперпользователь.

zero_damaged_pages (boolean)

При обнаружении поврежденного заголовка страницы QHB обычно сообщает об ошибке, прерывая текущую транзакцию. Если параметр zero_damaged_pages включен, система вместо этого выдаст предупреждение, обнулит поврежденную страницу в памяти и продолжит обработку. Такое поведение разрушит данные, а именно, все строки на поврежденной странице. Однако оно же позволяет обойти ошибку и извлечь строки из любых неповрежденных страниц, которые могут находиться в таблице. Это полезно для восстановления данных, поврежденных из-за аппаратной или программной ошибки. Обычно его стоит включать, только если не осталось никакой другой надежды восстановить данные с поврежденных страниц таблицы. Обнуленные страницы не сохраняются на диск, поэтому прежде чем снова выключить этот параметр, рекомендуется пересоздать такие таблицы или индексы. Значение по умолчанию — off (выключен), и изменить его может только суперпользователь.

ignore_invalid_pages (boolean)

При значении off (выключен; это значение по умолчанию), обнаружение записей WAL со ссылками на некорректные страницы во время восстановления приведет к возникновению в QHB ошибки уровня PANIC, прерывающей это восстановление. Установка в ignore_invalid_pages значения on (включен) заставляет систему игнорировать ссылки на некорректные страницы в записях WAL (но все равно выдавать предупреждения) и продолжать восстановление. Это поведение может вызвать сбои, потерю данных, распространению или сокрытию поврежденных данных и другим серьезным проблемам. Однако это может позволить обойти ошибку уровня PANIC и закончить восстановление, чтобы сервер запустился. Этот параметр можно установить только при запуске сервера. Он действует только во время восстановления или в резервном режиме.

jit_debugging_support (boolean)

Если LLVM обладает необходимой функциональностью, регистрировать сгенерированные функции в GDB. Это облегчает отладку. Значение по умолчанию — off (выключен). Этот параметр можно задать только при запуске сервера.

jit_dump_bitcode (boolean)

Записывает сгенерированный LLVM IR-код в файловую систему, в каталог, определенный параметром data_directory. Это полезно только для работы с внутренними компонентами реализации JIT. Значение по умолчанию — off (выключен). Этот параметр может изменить только суперпользователь.

jit_expressions (boolean)

Определяет, скомпилированы ли выражения JIT, когда JIT-компиляция активирована (см. раздел Когда применять JIT-компиляцию?). Значение по умолчанию — on (включен).

jit_profiling_support (boolean)

Если LLVM обладает необходимой функциональностью, выдавать данные, необходимые perf для профилирования функций, сгенерированных JIT. Выходные файлы записываются в $HOME/.debug/jit/; удалять их при желании должен сам пользователь. Значение по умолчанию — off (выключен). Этот параметр можно задать только при запуске сервера.

jit_tuple_deforming (boolean)

Определяет, будет ли JIT-компилироваться преобразование кортежей, когда JIT-компиляция активирована (см. раздел Когда применять JIT-компиляцию?). Значение по умолчанию — on (включен).

remove_temp_files_after_crash (boolean)

При значении on (включен; это значение по умолчанию) QHB будет автоматически удалять временные файлы после сбоя сервера. Если этот параметр выключен, файлы будут сохранены и могут использоваться, например, для отладки. Однако повторяющиеся сбои могут привести к накоплению бесполезных файлов. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.