我的Grails应用程序中有一张桌子正在变得相当大 - 大约100,000行,而且它每天增长大约10,000行。我注意到随着表的增长,插入越来越慢。我认为这与我的索引有关。解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
是的可能是索引,但通常最大的打击是因为hibernate会话膨胀,Ted Naleid描述得很好。如果这对您不起作用,请告诉我们您的情况,您是在进行批量插入,还是您的网站从不同的请求获得10000个插入等?
我通过一个简单的方法来解决这个问题,这个方法经常被Ted建议(例如每插入1000行)调用
def cleanUpGorm() {
def session = sessionFactory.currentSession
session.flush()
session.clear()
propertyInstanceMap.get().clear()
}
答案 1 :(得分:0)
首先应确认是DB问题还是Grails / Hibernate问题;我将首先在Datasource.groovy
中输出由Hibernate生成的SQL,并查看是否发生了异常。您还可以使用数据库供应商提供的各种SQL分析工具来查看其中发生的情况;例如,您可以从SQL生成EXPLAIN PLAN
,以查看由于没有正确的索引,插入是否很慢。
在处理性能问题时,您希望深入了解并找到原因的具体证据,其他一切都只是猜测。