2011-06-01 159 views
1

我正在研究一个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ķ Created_tmp_disk_tables 8个 opened_tables的30

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

更新 我把

Thread.sleep(2000); 

在每个周期结束时,它的呼叫数相同(18),所以我想这不会是TE原因是什么?我可以放弃这种方法吗? 这是这个问题

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

类,但没有奏效。

回答

0

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

0

更新1 - 从不在事务中使用睡眠或某事缓慢。事务必须尽可能快地关闭,因为它可以阻止其他数据库操作(究竟会被阻止取决于隔离级别)


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

+0

即使只有一个文件也不行。如果我使用一个较小的文件,10行,它工作正常。必须是文件大小不同意吗? – Ernest 2011-06-01 22:20:30