Перейти к основному содержимому

Управление блокировкой

примечание

Эта страница переведена при помощи нейросети GigaChat.

deadlock_timeout (integer)

Это время ожидания блокировки перед проверкой наличия условия взаимоблокировки. Проверка на взаимоблокировку относительно дорога, поэтому сервер не выполняет ее каждый раз при ожидании блокировки. Оптимистично предполагаем, что взаимоблокировка не является распространенной в производственных приложениях и просто ждем некоторое время для блокировки, прежде чем проверять наличие взаимоблокировки. Увеличение этого значения уменьшает количество времени, затрачиваемого впустую на ненужные проверки взаимоблокировок, но замедляет отчетность о реальных ошибках взаимоблокировки. Если это значение указано без единиц измерения, оно принимается за миллисекунды. По умолчанию одна секунда (1s), которая является наименьшим значением, используемым на практике. На сильно загруженном сервере может потребоваться увеличить его. Идеально настройка должна превышать типичное время транзакции, чтобы повысить вероятность того, что блокировка будет освобождена до того, как ожидающий решит проверить наличие взаимоблокировки. Только суперпользователи и пользователи с соответствующим привилегией SET могут изменить эту настройку.

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

max_locks_per_transaction (integer)

В общей таблице блокировок может храниться max_locks_per_transaction объектов (например, таблиц) для каждого серверного процесса или подготовленной транзакции, таким образом, в любой момент времени может быть заблокировано не больше этого числа различных объектов. Этот параметр ограничивает среднее число блокировок объектов, используемых каждой транзакцией, отдельные транзакции могут заблокировать и больше объектов, если все они умещаются в таблице блокировок. Заметьте, что это не число строк, которое может быть заблокировано; их количество не ограничено. Значение по умолчанию, 64, как показала практика, вполне приемлемо, но может возникнуть потребность его увеличить, если запросы обращаются ко множеству различных таблиц в одной транзакции, как например, запрос к родительской таблице со многими потомками. Этот параметр можно задать только при запуске сервера.

Для ведомого сервера значение этого параметра должно быть больше или равно значению на ведущем. В противном случае на ведомом сервере не будут разрешены запросы.

max_pred_locks_per_transaction (integer)

В общей таблице предикатных блокировок хранится max_pred_locks_per_transaction объектов (например, таблиц) для каждого серверного процесса или подготовленной транзакции, таким образом, в один момент времени может быть заблокировано не больше этого числа различных объектов. Этот параметр ограничивает среднее число блокировок объектов, используемых каждой транзакцией; отдельные транзакции могут заблокировать и больше объектов, если все они умещаются в таблице блокировок. Заметьте, что это не число строк, которое может быть заблокировано; их количество не ограничено. Значение по умолчанию, 64, как показала практика, вполне приемлемо, но может возникнуть потребность его увеличить, если запросы обращаются ко множеству различных таблиц в одной сериализуемой транзакции, как например, запрос к родительской таблице со многими потомками. Этот параметр можно задать только при запуске сервера.

max_pred_locks_per_relation (integer)

Контролирует, сколько страниц или кортежей одного отношения могут быть заблокированы предикатом перед тем, как блокировка будет повышена до охвата всего отношения. Значения больше или равные нулю означают абсолютное ограничение, тогда как отрицательные значения означают max_pred_locks_per_transaction, деленное на абсолютное значение этой настройки. По умолчанию установлено значение -2, что сохраняет поведение предыдущих версий PostgreSQL. Этот параметр можно настроить только в файле postgresql.conf или в командной строке сервера.

max_pred_locks_per_page (integer)

Контролирует, сколько строк на одной странице может быть заблокировано предикатом, прежде чем блокировка будет повышена до покрытия всей страницы. По умолчанию это 2. Этот параметр можно установить только в файле postgresql.conf или в командной строке сервера.