Java SQL server“;锁定请求超时时间已超过。。再一次
我在尝试延长sql server SP中的锁超时时遇到问题。无论我尝试什么,它都会不断抛出“超过锁请求超时时间”。 我正在使用java+JTDS1.2.2、C3P00.9.1和SQLServer2008。 我尝试的设置:Java SQL server“;锁定请求超时时间已超过。。再一次,java,sql-server,jdbc,c3p0,jtds,Java,Sql Server,Jdbc,C3p0,Jtds,我在尝试延长sql server SP中的锁超时时遇到问题。无论我尝试什么,它都会不断抛出“超过锁请求超时时间”。 我正在使用java+JTDS1.2.2、C3P00.9.1和SQLServer2008。 我尝试的设置: 在SP内部使用con.createStatement()设置锁定超时10000。在调用SP之前执行(“设置锁定超时10000”)。 在SP语句中:statement.setQueryTimeout(10) SP由以下函数调用:sstatement=con.prepareCall
在SP内部使用con.createStatement()设置锁定超时10000。在调用SP之前执行(“设置锁定超时10000”)
。
在SP语句中:statement.setQueryTimeout(10)
SP由以下函数调用:sstatement=con.prepareCall(“dbo.store\u procedure?,?,?”,ResultSet.TYPE\u FORWARD\u ONLY,ResultSet.CONCUR\u READ\u ONLY)代码>
并在内部设置“设置事务隔离级别可重复读取”
有什么建议吗?有人有类似的问题吗?
提前感谢如果您不使用SQL Server 2008及以后版本,并且指定LOCK_ESCALATION=Disabled,则可以忽略ROWLOCK提示。根据我自己的经验,SQL Server可能会忽略它,并接受它所填充的任何锁(页面或表)。SQL Server 2008之前没有强制锁定提示
清除该选项后,可以使用SET LOCK\u TIMEOUT-1
指定无限超时
我强烈建议您不要这样做,而是尝试对确实需要在该表上锁定的查询进行故障排除和优化(假设您对此负责),尽可能加快它们的速度以减少锁定时间
使用EXEC sp_lock TargetSPID
监视锁定的资源,以检查实际使用的锁类型
另一句话:SET LOCK\u TIMEOUT设置当前连接的超时,如果您使用的是连接池,则为重用该连接可能导致应用程序出现意外行为的所有内容设置锁定超时检查某些事务是否仍在进行中。此问题的一个原因是存在未提交或非回滚事务
选择@@TRANCOUNT
使用上述命令检查任何现有事务;提交或回滚相同的事务。检查某些事务是否仍在进行中。此问题的一个原因是存在未提交或非回滚事务
选择@@TRANCOUNT
使用上述命令检查任何现有事务;提交或回滚相同的操作。您使用的是可重复读取
,是否存在锁定问题?这两者可能有关联。为什么要使用REPEATABLE READ
?我们有一个集群应用程序访问sql server实例,而使用REPEATABLE READ(甚至是SERIALIZABLE)是保证对关键表的顺序访问的唯一方法。我们还使用“使用(ROWLOCK,UPDLOCK,NOWAIT)从criticalTable中选择*”和“使用(ROWLOCK,NOWAIT)插入criticalTable”。谢谢你的回答