h2数据库查询阻塞连接池

时间:2017-03-16 17:07:21

标签: database performance concurrency h2

我正在尝试从2个连接表中创建一个30000多行的大型SELECT。在我的机器上查询大约需要12秒而不会获取行。但奇怪的是,在查询执行期间,我无法从池中获取任何连接并并行执行另一个查询。在查询执行期间,所有池都被阻止。在堆栈跟踪中,我发现连接正在尝试执行ROLLBACK,然后才会返回阻止执行,直到SELECT查询完成:

"web-thread-6" #110 prio=5 os_prio=0 tid=0x00007fa86c00a000 nid=0x6fd0 waiting for monitor entry [0x00007fa8ba727000]
java.lang.Thread.State: BLOCKED (on object monitor)
  at org.h2.command.Command.executeUpdate(Command.java:251)
- waiting to lock <0x00000005c94ccf18> (a org.h2.engine.Database)
  at org.h2.jdbc.JdbcConnection.rollbackInternal(JdbcConnection.java:1514)
  at org.h2.jdbc.JdbcConnection.rollback(JdbcConnection.java:502)
- locked <0x00000005ca55c870> (a org.h2.jdbc.JdbcConnection)
  at org.h2.jdbcx.JdbcXAConnection.getConnection(JdbcXAConnection.java:107)
  at org.h2.jdbcx.JdbcConnectionPool.getConnectionNow(JdbcConnectionPool.java:229)
  at org.h2.jdbcx.JdbcConnectionPool.getConnection(JdbcConnectionPool.java:199)

我的H2数据库版本是1.4.192。数据库以嵌入模式运行,其URL为jdbc:h2:file:dir / db。该查询是只读的:ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY。

我的问题是,如果H2不支持并行执行查询执行,或者我做错了什么?

感谢名单, 安东

0 个答案:

没有答案