Grailsアプリに、かなり大きくなっているテーブルがあります。100,000行程度で、1日あたり約10,000行ずつ増えています。テーブルが大きくなるにつれて、挿入が徐々に遅くなっていることに気づきました。これは私のインデックスに関係していると思います。これに対処するための最良の方法は何ですか?
質問する
472 次
2 に答える
2
はい、インデックスになる可能性がありますが、多くの場合、最大のヒットは、休止状態のセッションが肥大化しているためです。これは、TedNaleidによってよく説明されています。これがうまくいかない場合は、状況について詳しく教えてください。一括挿入を行っているのですか、それともサイトがさまざまなリクエストから10000回の挿入を取得しているのですか。
私は、テッドが提案するように頻繁に呼び出される単純なメソッドを使用することでこれを回避しました(たとえば、1000行が挿入されるごとに)
def cleanUpGorm() {
def session = sessionFactory.currentSession
session.flush()
session.clear()
propertyInstanceMap.get().clear()
}
于 2012-09-25T05:08:03.677 に答える
0
最初に、それがDBの問題なのかGrails/Hibernateの問題なのかを確認する必要があります。まず、Hibernateによって生成されたSQLを出力し、Datasource.groovy
そこで何か異常が発生していないかどうかを確認します。DBベンダーが提供するさまざまなSQLプロファイリングツールを使用して、そこで何が起こっているかを確認することもできます。たとえばEXPLAIN PLAN
、SQLからを生成して、正しいインデックスがないために挿入が遅いかどうかを確認できます。
パフォーマンスの問題に対処する場合は、ドリルダウンして原因の具体的な証拠を見つけたいと考えています。他のすべては推測にすぎません。
于 2012-09-25T20:56:21.077 に答える