5

我在尝试延长 sql server SP 中的锁定超时时遇到问题。无论我尝试什么,它都会不断抛出“超过锁定请求超时期限”。我正在使用 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); ,它在内部设置“SET TRANSACTION ISOLATION LEVEL REPEATABLE READ”

有什么建议吗?有类似问题的人吗?提前致谢

4

3 回答 3

2

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

选择@@TRANCOUNT

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

于 2014-09-17T08:56:03.700 回答
1

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

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

我非常不鼓励您这样做,而是尝试对真正需要锁定该表的查询进行故障排除和优化(假设您对此负责),尽可能加快它们的速度以减少锁定时间。

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

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

于 2011-08-03T21:28:16.873 回答
0

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

选择@@TRANCOUNT

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

于 2015-07-15T05:29:08.580 回答