Hibernate春天挂起

时间:2011-06-01 02:05:44

标签: mysql hibernate spring

我正在开发一个hibernate 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 k Created_tmp_disk_tables 8 Opened_tables 30

我可以为应用程序设置一些如何更温和地威胁数据库吗? 我如何检查这是否是问题?

更新 我放了一个

Thread.sleep(2000);

在每个周期结束时,它拨打了相同数量的电话(18),所以我想这不是理由吗?我可以放弃这种方法吗? 这是对这个问题的不同看法

Hibernate hangs or throws lazy initialization no session or session was closed

尝试一些不同的

更新2

认为它可能是缓冲读取器读取文件?文件是44KB,试过这个方法:

http://code.hammerpig.com/how-to-read-really-large-files-in-java.html

上课但没有工作。

2 个答案:

答案 0 :(得分:0)

更新1 - 永远不要在交易中使用睡眠或缓慢的事情。事务必须尽快关闭,因为它可以阻止其他数据库操作(确切阻塞的内容取决于隔离级别)


我真的不明白数据库是如何与用例中的文件相关的。但是如果这些东西适用于第一个文件并且稍后会变慢,那么问题可能是Hibernate Session(对很多对象),在这种情况下,为每个文件启动一个新的Transaction / Hibernate Session。

答案 1 :(得分:0)

我重写了程序,所以我使用mysql查询LOAD DATA INFILE将信息直接加载到数据库中。它工作得非常快。然后我更新了行,改变了我需要的一些字段与SQL查询。我认为同时管理内存和抽象的信息太多了。