gpt4 book ai didi

java - ExecuteQuery 因未知原因挂起。用尽通用解决方案

转载 作者:行者123 更新时间:2023-11-28 23:23:58 26 4
gpt4 key购买 nike

日志停止在 logger.warn("Start: preparedStatement.executeQuery()");并无限期挂起。日志中没有抛出异常。该查询未显示在信息列下的 SHOW FULL PROCESSLIST 中,这意味着该查询甚至未执行。我能够在命令行中执行查询,只需不到一秒钟的时间即可恢复所有行。 SHOW OPEN TABLES WHERE IN_USE <> 0 返回一个空集,因此没有表被锁定。使用 JDK 1.8、MySQL 1.6、InnoDB。*编辑:这是在 AWS 上运行的,我注意到在挂起之前 CPU 使用率大幅上升。

public void setup(StringBuilder sql, String[] args, RowMapper<I> rowMapper) throws SQLException{
this.rowMapper = rowMapper;
//Create prepared statement
connection.setAutoCommit(false);
logger.warn("Start: Connection.preparedStatement");
preparedStatement = connection.prepareStatement(sql.toString(),ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
logger.warn("End: Connection.preparedStatement");
preparedStatement.setFetchSize(fetchSize);
//Setting SQL arguments
int i = 1;
for(String var: args){
preparedStatement.setString(i++, var);
}
logger.warn("Start: preparedStatement.executeQuery()");
resultSet = preparedStatement.executeQuery();
logger.warn("End: preparedStatement.executeQuery()");
}

最佳答案

解决了。在 StatementImpl.class 版本 1.5 中第 1373 行附近有一个同步锁正在等待锁关闭,这就是线程挂起的原因。我同时打开了多个结果集,所以我最终为每个结果集提供了自己的连接并将获取大小设置为 Integer.MIN_VALUE,应用程序现在没有卡住。

关于java - ExecuteQuery 因未知原因挂起。用尽通用解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com