2011-10-25 17 views

答えて

2

読み取りには共有ロックが必要です。書き込み(更新)には排他ロックが必要です。排他ロックを取得するには、トランザクションが共有ロックを解放するのを待つ必要があります。だからa reader can block a writer。同じデータを読み取ろうとする

別のトランザクションが 読み取りを許可されていますが、データを更新しようとするトランザクションは は、共有ロックが解除されるまで、そうすることが防止されます。

また、ダービーのType and Scope of Locksも参照してください。

1つ以上のトランザクションのisolation levelを変更することで、影響を減らすことができます。 DerbyのデフォルトはREAD COMMITTEDです。つまり、並行性を向上させるには、1つ以上のリーダーをREAD UNCOMMITTEDに設定する必要があります。しかし、READ UNCOMMITTEDは、ダーティー読み取り、反復不可能な読み取り、およびファントム読み取りを許可します。 (READ COMMITTEDは反復可能な読み取りとファントム読み取りを許可しますが、ダーティー読み取りは許可しません)。

リーダーを減らしてライターをブロックする別の方法は、リーダーをより高速に実行することです。クエリーの実行計画を読み、賢明に単一列および複数列の両方のインデックスを使用し、インデックスを定期的に再構築して断片化を減らして、クエリを調整します。

関連する問題