问题描述
|
我正在使用休眠的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查询的字段。我认为同时有太多信息无法管理通过内存和抽象。