如何解决休眠弹簧挂起
| 我正在使用休眠的Spring Mysql应用程序,有时当我创建gethibernateTemplate()get(class,id)时,我会在日志中看到一堆HQL,并且应用程序挂起,必须杀死tomcat。这种方法通过一个3000行的文件读取,并且应该有18个文件,我一直在想我可能一直在看这个错误。我需要您帮助我在数据库级别进行检查,但是我不知道该怎么做。也许我的数据库不能这么快地命中那么多。 我在信息回合执行时间部分中查看了phpMyAdmin,在以下位置看到一个红色值: Innodb_buffer_pool_reads 165 Handler_read_rnd 40 Handler_read_rnd_next 713千 Created_tmp_disk_tables 8 Opened_tables 30 我可以为应用程序设置一些如何更轻柔地威胁数据库的方法吗? 我如何检查这是否是问题所在? 更新资料 我把Thread.sleep(2000);
在每个周期结束时,它发出了相同数量的呼叫(18),所以我想这不是原因吗?我可以放弃这种方法吗?
这是对这个问题的不同看法
Hibernate挂起或引发延迟初始化,没有会话或会话被关闭
尝试一些不同
更新2
认为可能是缓冲区读取器正在读取文件吗?文件为44KB,请尝试以下方法:
http://code.hammerpig.com/how-to-read-really-large-files-in-java.html
类,但没有用。
解决方法
更新1-切勿在事务中使用睡眠或慢速动作。事务必须尽快关闭,因为它会阻止其他数据库操作(究竟将阻止什么取决于隔离级别)
我不太了解数据库与用例中的文件之间的关系。但是,如果这些东西适用于第一个文件,但稍后又变慢,则问题可能出在Hibernate Session(对于许多对象),在这种情况下,为每个文件启动一个新的Transaction / Hibernate Session。
, 我重写了程序,所以我使用mysql查询LOAD DATA INFILE将信息直接加载到数据库中。它运作非常快。然后我更新了行,更改了一些我也需要使用sql查询的字段。我认为同时有太多信息无法管理通过内存和抽象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。