18.12. Управление блокировками#
18.12. Управление блокировками #
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, которое сохраняет поведение из предыдущих версий Tantor BE. Этот параметр может быть установлен только в файле
postgresql.conf
или в командной строке сервера.max_pred_locks_per_page
(integer
) #Это управляет тем, сколько строк на одной странице может быть предикатно заблокировано, прежде чем блокировка будет распространена на всю страницу. По умолчанию значение равно 2. Этот параметр может быть установлен только в файле
postgresql.conf
или в командной строке сервера.