問題: それぞれ約 150 万のレコードを持つ 3 つの TRANSACTION テーブルがあり、現時点ではまったく関係がなく、互いに独立しています。Web ポータルでは、[トランザクション] タブをクリックするたびに、SQL クエリがこれら 3 つのテーブルにクエリを実行し、各テーブルの現在の行数をカウントします。
サンプル クエリを次に示します。
クエリ 1:
select Count (ID)
from TRANSACTION_REQUEST
where START_DATE ='2016-21-10' AND END_DATE = '2016-21-11';
クエリ 2:
select Count(ID)
from TRANSACTION_SUCCESS
where START_DATE = '2016-21-10' AND END_DATE = '2016-21-11';
クエリ 3:
select Count(ID)
from TRANSACTION_FAIL
where START_DATE = '2016-21-10' AND END_DATE = '2016-21-11';
上記のクエリが実行されるたびに、メソッドを適用しないためISOLATION
(読み取り専用)、テーブルがロックされていることがわかります。(Spring や Hibernate を介して)適用できることはわかっていますISOLATION
が、問題はコードが非常に大きく、これは一時的な修正にすぎないことです。また、テーブルのロックが原因で、同じテーブルにアクセスするため、一部のアプリが遅くなったり、機能しなくなったりします。システム レベルで "ON" に適用したくないREAD_COMMITTED_SNAPSHOT
のは、膨大な量のディスク領域を消費し、他の種類の問題も引き起こす可能性があるためです。
問題を特定したので、たとえ会社に費用がかかるとしても、長期的な解決策を選択しています. 上記の問題に取り組むための優れた DB 設計を手伝っていただければ幸いです。