java – SQL服务器“超出锁定请求超时时间”..再次

我在尝试扩展sql server SP中的锁定超时时遇到问题.无论我尝试什么,它都会继续投掷“锁定请求超时时间超出”.

我正在使用
java jtds 1.2.2,c3p0 0.9.1和sql server 2008.

我试过的设置:

在SP内部设置LOCK_TIMEOUT 10000并使用con.createStatement().执行(“SET LOCK_TIMEOUT 10000”),然后再调用SP.
并在SP语句中:statement.setQueryTimeout(10);

SP由以下语句调用:statement = con.prepareCall(“dbo.store_procedure?,?,?”,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
并在里面设置“SET TRANSACTION ISOLATION LEVEL REPEATABLE READ”

任何sugestions?有类似问题的人?
提前致谢

最佳答案 如果您没有使用SQL Server 2008及其以后,并指定LOCK_ESCALATION = Disabled,则可以忘记ROWLOCK提示.根据我自己的经验,SQL Server可能会忽略它并采取它填充的任何锁(页面或表).在SQL Server 2008之前没有强制锁定提示.

清除后,您可以使用SET LOCK_TIMEOUT -1指定无限超时.

我强烈反对你这样做,而是尝试排除故障并优化(假设你对此负责)真正需要锁定该表的查询,尽可能加快它们以减少时间锁定.

使用EXEC sp_lock TargetSPID监视锁定的资源,以检查实际采用的锁类型

另一个注释:SET LOCK_TIMEOUT设置当前连接的超时,如果使用连接池,则为重用该连接的所有内容设置锁定超时可能会导致应用程序出现意外行为

点赞