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

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

примечание

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

deadlock_timeout (integer)

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

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

max_locks_per_transaction (integer)

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

При работе с резервным сервером необходимо установить этот параметр на то же или более высокое значение, что и на основном сервере. В противном случае запросы не будут разрешены на резервном сервере.

max_pred_locks_per_transaction (integer)

Общая таблица предикатных блокировок отслеживает блокировки для max_pred_locks_per_transaction * (max_connections + max_prepared_transactions) объектов (например, таблиц); следовательно, одновременно может быть заблокировано не более этого количества различных объектов. Этот параметр контролирует среднее количество объектных блокировок, выделяемых для каждой транзакции; отдельные транзакции могут блокировать больше объектов до тех пор, пока блокировки всех транзакций помещаются в таблицу блокировок. Это не количество строк, которые можно заблокировать; это значение неограниченно. По умолчанию используется значение 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 или в командной строке сервера.