-1

問題: それぞれ約 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 設計を手伝っていただければ幸いです。

4

1 に答える 1

0

(START_DATE, END_DATE, ID)3 つのテーブルすべてにインデックスがありますか?

これにより、そのクエリが高速化され、読み取り専用ロックがインデックス上にあるはずです。

于 2016-11-21T00:44:23.070 に答える