我们在我们的一个项目中使用Spring程序化事务管理 . 如果我们的应用程序被多个用户访问,即并发访问,我们观察到一些查询处于睡眠模式,即使查询不是事务的一部分 .

以下配置我们启用了并发访问,

ALTER DATABASE <> SET ALLOW_SNAPSHOT_ISOLATION ON; ALTER DATABASE <> SET READ_COMMITTED_SNAPSHOT ON;

在查询处于睡眠模式的情况下,我们正确地使用了事务管理 . 我们在完成交易后立即提交或回滚交易 .

我们还在事务上添加了超时 . 我们观察到创建了一些事务,但是提交或回滚需要很长时间(> 10分钟) . 我们通过捕获交易事件来验证这一点

只是添加我们正在使用DBCP连接池,我们正在使用jdbctemplate自动关闭连接(意味着连接将返回到池,不确定它是否因为连接池没有关闭连接而在关闭调用时关闭连接) . 我不确定连接池是阻塞查询的根本原因吗?

以下是我的连接池配置,

资源名称=“jdbc / myDataSource”auth =“容器”type =“javax.sql.DataSource”initialSize =“45”maxTotal =“ - 2”maxIdle =“45”maxWaitMillis =“10000”validationQuery =“SELECT 1”testOnBorrow =“true”testWhileIdle =“true”timeBetweenEvictionRunsMillis =“1800000”minEvictableIdleTimeMillis =“25”username =“XXXX”password =“XXXX”driverClassName =“net.sourceforge.jtds.jdbc.Driver”url =“jdbc:jtds:sqlserver ://XX.XXX.XXX.XX:XXXX / XX; maxStatements = 0; sendStringParametersAsUnicode = false; prepareSQL = 2“removeAbandonedOnMaintenance =”true“removeAbandonedTimeout =”120“

任何帮助赞赏 .

谢谢 .