我正在尝试从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不支持并行执行查询执行,或者我做错了什么?
感谢名单, 安东