SET TRANSACTION ISOLATION LEVEL REPEATABLE READを使用する場合のリスクまたはパフォーマンスの低下は何ですか?
BizTalkサービスから呼び出されるSPがいくつかあります。時々デッドロックが発生します。分離レベルを変更した場合、どのようなリスクとパフォーマンスの低下の可能性がありますか?
SET TRANSACTION ISOLATION LEVEL REPEATABLE READを使用する場合のリスクまたはパフォーマンスの低下は何ですか?
BizTalkサービスから呼び出されるSPがいくつかあります。時々デッドロックが発生します。分離レベルを変更した場合、どのようなリスクとパフォーマンスの低下の可能性がありますか?
Repeatable Read は、フェッチされたすべての行をロックします。大量のデータをフェッチするカーソルを操作している状況では、カーソルが閉じられるまで反復可能読み取りでカーソルによって読み取られた行を更新するためのロックを取得できないため、他のユーザーとの競合が発生する可能性があります。
パフォーマンス低下のリスクは、トランザクションでタイムアウトやデッドロックの数が増える可能性があることです。このリスクは、2 つのトランザクションが同じ行を同時に読み取り/更新する必要がある確率に比例します。アプリケーションに影響を与える可能性があるもう 1 つの要因は、取得されるロックのサイズです。ロックがページ レベルで取得された場合、異なるトランザクションがアクセスする必要があるデータが同じページ (必ずしも同じ行ではない) にある場合、競合が発生する可能性があります。
一方、低い分離レベル (カーソルの安定性など) を使用すると、トランザクション中に以前にフェッチした行が、作業単位が完了する前に他のトランザクションによって更新される可能性が残されます。
すでに述べたことに付け加えると、デッドロックを完全になくすことはできません。できることは、それらが発生する可能性を最小限に抑えることだけです。
それを試してみてください。単一のデータ ポイント (TRANSACTION ISOLATION LEVEL) で発生する可能性のある潜在的なリスクやパフォーマンスの問題については、私たちが知ることはできません。お客様のデータ、データ ボリューム、TPS、データの依存関係については、他に何も知りません。パフォーマンスが問題になるときはいつでも、試して測定してください。他に答えはありません。
反復可能読み取りは、読み取りが行われた後に共有ロックを解除しません。
これは、トランザクションで を実行した場合SELECT
、RR
同時トランザクションは によってロックされた行を更新できないことを意味しますSELECT
。