休眠弹簧挂起

问题描述

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