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