Параметры для разработчиков
Эта страница переведена при помощи нейросети GigaChat.
Следующие параметры предназначены для тестирования разработчиками и никогда не должны использоваться в производственной базе данных. Однако некоторые из них могут быть использованы для помощи при восстановлении сильно поврежденных баз данных. В связи с этим они были исключены из файла-образца postgresql.conf
. Обратите внимание, что многие из этих параметров требуют специальных флагов компиляции исходного кода, чтобы вообще работать.
allow_in_place_tablespaces
(boolean
)
Позволяет создавать табличные пространства внутри каталогов pg_tblspc
при предоставлении пустой строки местоположения команде CREATE TABLESPACE
. Это предназначено для того, чтобы разрешить тестирование сценариев репликации, когда основной и резервный серверы работают на одной машине. Такие каталоги, вероятно, будут сбивать с толку инструменты резервного копирования, которые ожидают найти только символические ссылки в этом месте. Только суперпользователи и пользователи с соответствующим привилегией SET
могут изменить этот параметр.
allow_system_table_mods
(boolean
)
Позволяет изменять структуру системных таблиц, а также выполнять определенные другие рискованные действия с системными таблицами. В противном случае это не разрешено даже для суперпользователей. Неправильное использование этого параметра может привести к необратимой потере данных или серьезному повреждению системы баз данных. Только суперпользователи и пользователи с соответствующим SET
привилегией могут изменить этот параметр.
backtrace_functions
(string
)
Этот параметр содержит список имен функций на языке C, разделенных запятыми. Если возникает ошибка, и имя внутренней функции на языке C, где произошла ошибка, совпадает со значением в списке, то трассировка стека записывается в журнал сервера вместе с сообщением об ошибке. Это можно использовать для отладки определенных областей исходного кода.
Поддержка трассировки стека недоступна на всех платформах, а качество трассировок зависит от параметров компиляции.
Только суперпользователи и пользователи с соответствующей SET
привилегией могут изменить этот параметр.
debug_discard_caches
(integer
)
Когда установлено значение 1
, каждая запись кеша системного каталога становится недействительной при первой же возможности, независимо от того, произошло ли что-то, что могло бы сделать ее недействительной. В результате кеширование системных каталогов фактически отключается, поэтому сервер будет работать крайне медленно. Более высокие значения запускают рекурсивную проверку недействительности кеша, что еще медленнее и полезно только для тестирования самой логики кеширования. Значение по умолчанию 0
выбирает нормальное поведение кеширования каталога.
Этот параметр может быть очень полезен при попытке вызвать трудно воспроизводимые ошибки, связанные с одновременными изменениями каталога, но в противном случае он редко нужен. См. файлы исходного кода inval.c
и pg_config_manual.h
для получения подробной информации.
Этот параметр поддерживается, когда DISCARD_CACHES_ENABLED
был определен во время компиляции (что происходит автоматически при использовании опции configure --enable-cassert
). В производственных сборках его значение всегда будет равно 0
, а попытки установить его на другое значение приведут к ошибке.
debug_io_direct
(string
)
Обращается к ядру для минимизации кеширования данных отношений и файлов WAL, используя O_DIRECT
(большинство Unix-подобных систем), F_NOCACHE
(macOS) или FILE_FLAG_NO_BUFFERING
(Windows).
Значение может представлять собой пустую строку (по умолчанию), чтобы отключить использование прямого ввода/вывода, или список операций, разделенных запятыми, в которых может использоваться прямой ввод/вывод. Варианты операций: data
для основных файлов данных, wal
для файлов WAL и wal_init
для файлов WAL при первоначальном размещении.
Некоторые операционные и файловые системы не поддерживают прямой ввод/вывод, так что нестандартные значения параметра могут не приниматься при запуске или вызывать ошибки.
В настоящее время эта функциональность снижает производительность и предназначена только для тестирования.
debug_parallel_query
(enum
)
Позволяет распараллеливать запрос в целях тестирования, даже когда от этого не ожидается никакого выигрыша в скорости. Допустимые значения параметра debug_parallel_query
— 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
)
Количество времени для задержки сразу после того, как новый серверный процесс был создан, перед тем как он проведет процедуру аутентификации. Это предназначено для того, чтобы дать разработчикам возможность подключиться к серверному процессу с помощью отладчика для отслеживания неправильного поведения при аутентификации. Если это значение указано без единиц измерения, оно принимается за секунды. Значение нуля (по умолчанию) отключает задержку. Этот параметр может быть установлен только в файле postgresql.conf
или в командной строке сервера.
trace_notify
(boolean
)
Генерирует большое количество выходных данных отладки для команд LISTEN
и NOTIFY
. Параметры client_min_messages или log_min_messages должны быть установлены на DEBUG1
или ниже, чтобы отправить этот вывод клиенту или журналу сервера соответственно.
trace_sort
(boolean
)
Если включено, отображается информация об использовании ресурсов во время сортировки. Этот параметр доступен только в том случае, если макрос TRACE_SORT
был определен при компиляции PostgreSQL. (Однако 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)
Подробности о структуре, которая будет сброшена, можно найти в src/include/storage/lock.h
.
Этот параметр доступен только в том случае, если макрос LOCK_DEBUG
был определен при компиляции PostgreSQL.
trace_lwlocks
(boolean
)
Если включено, выводится информация об использовании легких блокировок. Легкие блокировки предназначены главным образом для обеспечения взаимного исключения доступа к структурам данных общей памяти.
Этот параметр доступен только в том случае, если макрос LOCK_DEBUG
был определен при компиляции PostgreSQL.
trace_userlocks
(boolean
)
Если включено, выводится информация об использовании блокировки пользователя. Вывод такой же, как для trace_locks
, но только для консультативных блокировок.
Этот параметр доступен только в том случае, если макрос LOCK_DEBUG
был определен при компиляции PostgreSQL.
trace_lock_oidmin
(integer
)
Если установлено, не отслеживайте блокировки для таблиц ниже этого OID (используется для предотвращения вывода на системных таблицах).
Этот параметр доступен только в том случае, если макрос LOCK_DEBUG
был определен при компиляции PostgreSQL.
trace_lock_table
(integer
)
Безусловно отслеживает блокировки этой таблицы (OID).
Этот параметр доступен только в том случае, если макрос LOCK_DEBUG
был определен при компиляции PostgreSQL.
debug_deadlocks
(boolean
)
Если установлено, сбрасывает информацию обо всех текущих блокировках при возникновении тайм-аута взаимоблокировки.
Этот параметр доступен только в том случае, если макрос LOCK_DEBUG
был определен при компиляции PostgreSQL.
log_btree_build_stats
(boolean
)
Если установлено, регистрируются статистики использования системных ресурсов (памяти и ЦП) для различных операций с деревьями В.
Этот параметр доступен только в том случае, если макрос BTREE_BUILD_STATS
был определен при компиляции PostgreSQL.
wal_consistency_checking
(string
)
Этот параметр предназначен для проверки наличия ошибок в процедурах повторного выполнения WAL. При включении полностраничные изображения любых буферов, измененных в сочетании с записью WAL, добавляются к записи. Если запись впоследствии воспроизводится повторно, система сначала применяет каждую запись, а затем проверяет, совпадают ли модифицированные записью буферы с сохраненными изображениями. В некоторых случаях (например, битовые подсказки) допустимы незначительные отклонения, которые будут проигнорированы. Любые непредвиденные различия приведут к фатальной ошибке, прекращающей восстановление.
Значение по умолчанию для этого параметра - пустая строка, которая отключает эту функцию. Его можно установить на all
для проверки всех записей или на список разделенных запятыми диспетчеров ресурсов для проверки только записей, исходящих от этих диспетчеров ресурсов. В настоящее время поддерживаемые диспетчеры ресурсов включают heap
, heap2
, btree
, hash
, gin
, gist
, sequence
, spgist
, brin
и generic
. Расширения могут определять дополнительные диспетчеры ресурсов. Только суперпользователи и пользователи с соответствующим привилегией SET
могут изменить этот параметр.
wal_debug
(boolean
)
Если включено, выводить отладочную информацию, связанную с WAL. Этот параметр доступен только в том случае, если макрос WAL_DEBUG
был определен при компиляции PostgreSQL.
ignore_checksum_failure
(boolean
)
Действует только в том случае, если включены контрольные суммы данных.
Обнаружение сбоя контрольной суммы во время чтения обычно приводит к тому, что PostgreSQL сообщает об ошибке и прерывает текущую транзакцию. Установка ignore_checksum_failure
на значение "включено" заставляет систему игнорировать сбой (но все равно сообщать предупреждение) и продолжать обработку. Такое поведение может привести к сбоям, распространению или скрытию повреждений, или другим серьезным проблемам. Однако это может позволить обойти ошибку и получить неповрежденные кортежи, которые все еще могут присутствовать в таблице, если заголовок блока все еще исправен. Если заголовок поврежден, будет сообщена ошибка даже при включении этой опции. Значение по умолчанию - off
. Только суперпользователи и пользователи с соответствующей привилегией SET
могут изменить этот параметр.
zero_damaged_pages
(boolean
)
Обнаружение поврежденного заголовка страницы обычно приводит к тому, что PostgreSQL сообщает об ошибке и прерывает текущую транзакцию. Установка zero_damaged_pages
на включено заставляет систему вместо этого сообщать предупреждение, сбрасывать поврежденную страницу в памяти и продолжать обработку. Такое поведение приведет к потере данных, а именно всех строк на поврежденной странице. Однако это позволяет обойти ошибку и получить строки из любых неповрежденных страниц, которые могут присутствовать в таблице. Это полезно для восстановления данных, если повреждение произошло из-за аппаратной или программной ошибки. Этот параметр не следует устанавливать до тех пор, пока не будет утрачена возможность восстановить данные с поврежденных страниц таблицы. Обнуленные страницы не записываются на диск, поэтому рекомендуется воссоздать таблицу или индекс перед повторным отключением этого параметра. Значение по умолчанию - off
. Только суперпользователи и пользователи с соответствующим привилегией SET
могут изменить эту настройку.
ignore_invalid_pages
(boolean
)
Если установлено значение off
(по умолчанию), обнаружение записей WAL со ссылками на недопустимые страницы во время восстановления вызывает у PostgreSQL ошибку уровня PANIC, прерывающую восстановление. Установка ignore_invalid_pages
на on
заставляет систему игнорировать недопустимые ссылки на страницы в записях WAL (но все равно сообщать предупреждение) и продолжить восстановление. Такое поведение может вызвать сбои, потерю данных, распространение или сокрытие повреждений, или другие серьезные проблемы. Однако это может позволить обойти ошибку уровня PANIC, завершить восстановление и заставить сервер запуститься. Параметр можно установить только при запуске сервера. Он действует только во время восстановления или в режиме ожидания.
jit_debugging_support
(boolean
)
Если LLVM имеет необходимую функциональность, зарегистрируйте сгенерированные функции с помощью GDB. Это упрощает отладку. Значение по умолчанию - off
. Этот параметр можно задать только при запуске сервера.
jit_dump_bitcode
(boolean
)
Записывает сгенерированный LLVM IR в файловую систему внутри data_directory. Это полезно только для работы над внутренними аспектами реализации JIT. Значение по умолчанию - off
. Только суперпользователи и пользователи с соответствующей привилегией SET
могут изменять эту настройку.
jit_expressions
(boolean
)
Определяет, компилируются ли выражения с использованием JIT-компиляции при активации JIT-компиляции (см. Раздел Когда использовать JIT?). По умолчанию используется on
.
jit_profiling_support
(boolean
)
Если у LLVM есть необходимая функциональность, сгенерируйте данные, необходимые для того, чтобы perf мог профилировать функции, созданные JIT. Это записывает файлы в ~/.debug/jit/
; пользователь несет ответственность за выполнение очистки при необходимости. Значение по умолчанию - off
. Этот параметр может быть установлен только при запуске сервера.
jit_tuple_deforming
(boolean
)
Определяет, компилируется ли деформация кортежа с использованием JIT-компиляции при активации JIT-компиляции (см. Раздел Когда использовать JIT?). По умолчанию установлено значение on
.
remove_temp_files_after_crash
(boolean
)
Когда установлено значение on
, которое является значением по умолчанию, PostgreSQL автоматически удаляет временные файлы после сбоя бэкенда. Если отключено, файлы будут сохранены и могут быть использованы для отладки, например. Повторные сбои могут привести к накоплению ненужных файлов. Этот параметр можно установить только в файле postgresql.conf
или в командной строке сервера.
send_abort_for_crash
(boolean
)
По умолчанию после сбоя сервера управляющий процесс postmaster останавливает оставшиеся дочерние процессы, отправляя им сигналы SIGQUIT, что позволяет им завершить работу более или менее корректно. Если для этого параметра установлено значение on, вместо SIGQUIT отправляется SIGABRT. Обычно это приводит к созданию файла дампа памяти для каждого такого дочернего процесса. Это может быть удобно для исследования состояний других процессов после сбоя. Но такие файлы также могут занимать много места на диске в случае повторяющихся сбоев, поэтому не включайте параметр в системах без тщательного мониторинга. Имейте в виду, что автоматическое удаление дампов памяти не поддерживается. Этот параметр можно задать только в файле postgresql.conf
или в командной строке при запуске сервера.
send_abort_for_kill
(boolean
)
По умолчанию после попытки остановить дочерний процесс, используя сигнал SIGQUIT, управляющий процесс postmaster ждет пять секунд, а затем отправляет SIGKILL для немедленного завершения. Если для этого параметра установлено значение on, вместо SIGKILL отправляется SIGABRT. Обычно это приводит к созданию файла дампа памяти для каждого такого дочернего процесса. Это может быть удобно для исследования состояний «зависших» дочерних процессов. Но такие файлы также могут занимать много места на диске в случае повторяющихся сбоев, поэтому не включайте параметр в системах без тщательного мониторинга. Имейте в виду, что автоматическая очистка файлов дампа не поддерживается. Этот параметр можно задать только в файле postgresql.conf или в командной строке при запуске сервера.
debug_logical_replication_streaming
(enum
)
Допустимые значения: buffered
и immediate
. По умолчанию используется buffered
. Этот параметр предназначен для тестирования логического декодирования и репликации больших транзакций. Параметр debug_logical_replication_streaming
на публикующем сервере и на подписчике работает по-разному:
На стороне публикующего сервера debug_logical_replication_streaming
позволяет выполнять потоковую передачу или сериализацию изменений сразу же при логическом декодировании. Если установлено значение immediate, каждое изменение передается в потоковом режиме, если подписка была создана с параметром streaming, в противном случае изменения сериализуются. Если установлено значение buffered
, при декодировании изменения передаются в потоке или сериализуются при достижении значения logical_decoding_work_mem
.
На стороне подписчика, если для параметра streaming задано значение parallel
, можно использовать debug_logical_replication_streaming
, чтобы указать ведущему процессу применения изменений отправлять изменения в очередь общей памяти или для сериализации всех изменений в файле. Если задано значение buffered
, ведущий процесс отправляет изменения параллельным рабочим процессам применения изменений через очередь общей памяти. Если установлено значение immediate, ведущий процесс сериализует все изменения в файлы и уведомляет параллельные рабочие процессы применения изменений о необходимости их чтения и применения в конце транзакции.