2012-04-16 4 views
0

この問題を提案してください。巨大な日付操作のためのSpringトランザクションのヘルプが必要

サービスのトランザクションマネージャとしてorg.springframework.orm.hibernate3.HibernateTransactionManagerを使用しています。そして、この

TransactionStatus transactionDefinition = new DefaultTransactionDefinition(); 
DefaultTransactionDefinition transactionStatus = transactionManager.getTransaction(transactionDefinition); 

//DaoCalls 

transactionManager.commit(transactionStatus); 

のように、このトランザクション内のコードをラップダオ・コールは、DBテーブルのCRUD(欠失は、Updations、挿入)操作の多くを操作しています。

問題は、このテーブルが長い時間ロックされていることです。 これらのDaoコールはすべて単一トランザクションで実行する必要があります。

この問題をお聞かせください。

私はいくつかのオプションを参照
+1

時間のかかる呼び出しを特定するためにプロファイリングしましたか?あなたが場所を見つけたら、あなたは解決策を考えることができます。さもなければ、これらのタイプの問題の標準的な解決策はありません。 – Phani

答えて

1

:最適化はあなたに依存

  • できれば
  • は、パラレル(java.utils.concurrentから使用エグゼキュータ)でいくつかのクエリを実行する照会

    • 必要な操作を行うロックがかからない(例:の読み取りまたは書き込み修復を使用)
  • +0

    複数のスレッドを使用すると、プロセスをトランザクションにすることはできません。また、私はここでCPUがボトルベックだとは思わない。 –

    +0

    並列処理ではCPU使用率が低下することはありませんが、それは逆になります。目標はここで時間を節約することです。私は、この場合のトランザクションの並列処理の相互排除についてはわかりません。このステートメントをサポートする議論がありますか? –

    1

    複雑な操作を実行するために、ストアドプロシージャをデータベースに書き込むことを検討します。そうすれば、実行されているロックとクエリをはるかに制御することができます。また、データベース自体で操作が行われているため、ハイバネートとの間でデータを移動するオーバーヘッドはありません。

    +0

    また、トランザクションがテーブルをロックしていても、SELECTクエリで使用できるテーブルを設定する方法はありますか? –

    関連する問題