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

时间:2011-06-24 13:14:23

标签: java sql-server jdbc c3p0 jtds

我在尝试扩展sql server SP中的锁定超时时遇到问题。无论我尝试什么,它都会继续投掷“锁定请求超时时间超出”。 我正在使用java + jtds 1.2.2,c3p0 0.9.1和sql server 2008。 我试过的设置:

在呼叫SP之前

SET LOCK_TIMEOUT 10000 inside the SP and with con.createStatement().execute("SET LOCK_TIMEOUT 10000 ")。 并在SP语句中:statement.setQueryTimeout(10);

SP由以下人员调用:tatement = con.prepareCall("dbo.store_procedure ?,?,?", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 并在

中设置“SET TRANSACTION ISOLATION LEVEL REPEATABLE READ”

任何吸烟?有类似问题的人? 提前谢谢

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

检查某些交易是否仍在进行中。此问题的一个原因是具有未提交或非回滚事务。

SELECT @@ TRANCOUNT

使用以上命令检查任何现有交易;提交或回滚相同的内容。

答案 2 :(得分:0)

检查某些交易是否仍在进行中。此问题的一个原因是具有未提交或非回滚事务。

SELECT @@ TRANCOUNT

使用以上命令检查任何现有交易;提交或回滚相同的内容。