SQL-сервер «Превышено время ожидания запроса блокировки» .. снова - PullRequest
4 голосов
/ 24 июня 2011

У меня проблема при попытке продлить тайм-аут блокировки в SP сервера SQL.Независимо от того, что я пытаюсь, он продолжает выдавать "Превышен период ожидания запроса блокировки".Я использую java + jtds 1.2.2, c3p0 0.9.1 и sql server 2008. Настройки, которые я пробовал:

SET LOCK_TIMEOUT 10000 inside the SP and with con.createStatement().execute("SET LOCK_TIMEOUT 10000 ") перед вызовом SP.и в операторе SP: Statement.setQueryTimeout (10);

SP вызывается с помощью: s tatement = con.prepareCall("dbo.store_procedure ?,?,?", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); и устанавливает «УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ ПОВТОРЯЮЩЕГО ЧТЕНИЕ» внутри

любые предложения?кто-нибудь с похожими проблемами?заранее спасибо

Ответы [ 3 ]

1 голос
/ 15 июля 2015

Проверьте, выполняется ли какая-либо транзакция или нет. Одной из причин этой проблемы является наличие незафиксированных или неоткатных транзакций.

SELECT @@ TRANCOUNT

Используйте приведенную выше команду для проверки любой существующей транзакции; зафиксировать или откатить то же самое.

1 голос
/ 04 августа 2011

Если вы не используете SQL Server 2008 и более поздние версии и задаете LOCK_ESCALATION = Disabled, вы можете забыть о подсказке ROWLOCK.SQL Server может, и по своему опыту, вероятно, проигнорирует его и возьмет любую блокировку (страницу или таблицу), которую он заполняет.До SQL Server 2008 нет подсказок о принудительной блокировке.

Очистив это, вы можете использовать SET LOCK_TIMEOUT -1 для указания бесконечного тайм-аута.

Я настоятельно не рекомендую вам делать это, вместо этого попробуйтеустранять неполадки и оптимизировать (если вы несете за это ответственность) запросы, которые действительно должны блокировать эту таблицу, максимально ускорить их, чтобы сократить время блокировки.

Мониторинг заблокированных ресурсов с помощью EXEC sp_lock TargetSPID дляпроверить, какие блокировки действительно выполняются

Еще одно замечание: SET LOCK_TIMEOUT устанавливает тайм-аут для текущего соединения. Если вы используете пул соединений, вы устанавливаете тайм-аут блокировки для всего, что повторно использует это соединение, возможно, вызываянепреднамеренное поведение в вашем приложении

0 голосов
/ 17 сентября 2014

Проверьте, выполняется ли какая-либо транзакция или нет.Одной из причин этой проблемы является наличие незафиксированных или неоткатанных транзакций.

SELECT @@ TRANCOUNT

Используйте указанную выше команду для проверки любой существующей транзакции;зафиксировать или откатить то же самое.

...