SET DEADLOCK_PRIORITY (Transact-SQL)
現在のセッションが別のセッションによりデッドロックされている場合、現在のセッションが処理を継続することの相対的な重要度を指定します。
構文
SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH | <numeric-priority> | @deadlock_var | @deadlock_intvar }
<numeric-priority> ::= { -10 | -9 | -8 | … | 0 | … | 8 | 9 | 10 }
引数
LOW
現在のセッションがデッドロックに含まれ、デッドロック チェーンに含まれる他のセッションが、デッドロックの優先度を NORMAL または HIGH に設定しているか、-5 より大きい整数値に設定している場合、現在のセッションがデッドロックの対象になります。他のセッションが、デッドロックの優先度を -5 より小さい整数値に設定している場合は、現在のセッションはデッドロックの対象になりません。また、別のセッションが、デッドロックの優先度を LOW または -5 に等しい整数値に設定している場合、現在のセッションはデッドロック対象の候補になります。
NORMAL
デッドロック チェーンに含まれる他のセッションが、デッドロック優先度を HIGH または 0 より大きい整数値に設定している場合、現在のセッションがデッドロックの対象になります。ただし、他のセッションがデッドロックの優先度を LOW または 0 より小さい整数値に設定している場合は、現在のセッションはデッドロックの対象にはなりません。また、別のセッションが、デッドロックの優先度を NORMAL または 0 に等しい整数値に設定している場合、現在のセッションがデッドロック対象の候補になります。NORMAL が既定の優先度です。
HIGH
デッドロック チェーンに含まれる他のセッションが、デッドロック優先度を 5 より大きい整数値に設定している場合、現在のセッションがデッドロックの対象になります。また、別のセッションがデッドロックの優先度を HIGH または 5 に等しい整数値に設定している場合、現在のセッションはデッドロック対象の候補になります。
<numeric-priority>
-10 ~ 10 の範囲の整数値です。デッドロックの優先度を 21 段階のレベルで示します。デッドロック チェーンに含まれる他のセッションが、高いデッドロック優先度値で実行中の場合、現在のセッションはデッドロックの対象になりますが、他のセッションが現在のセッションの値より低いデッドロック優先度値で実行中の場合は、現在のセッションはデッドロックの対象にはなりません。別のセッションが現在のセッションと同じデッドロック優先度値で実行中の場合は、現在のセッションがデッドロック対象の候補になります。LOW は -5 に、NORMAL は 0 に、HIGH は 5 にマップされます。
**@**deadlock_var
デッドロックの優先度を表す文字変数を指定します。変数は、'LOW'、'NORMAL' または 'HIGH' の値に設定する必要があります。変数は文字列全体を十分格納できるサイズであることが必要です。
**@**deadlock_intvar
デッドロックの優先度を表す整数変数を指定します。変数は -10 ~ 10 の範囲の整数値に設定する必要があります。
解説
デッドロックは、2 つのセッションが両方とも、一方のセッションによりロックされているリソースへのアクセスを待機しているときに発生します。SQL Server のインスタンスにより、2 つのセッションがデッドロックされていることが検出されると、セッションの 1 つをデッドロックの対象として選択することにより、デッドロックが解決します。デッドロック対象セッションの現在のトランザクションがロールバックされて、デッドロック エラー メッセージ 1205 がクライアントに返されます。これによりそのセッションによって保持されたすべてのロックが解除され、もう一方のセッションを進めることができるようになります。
どちらのセッションをデッドロック対象として選択するかは、各セッションのデッドロック優先度によって決まります。
- 両方のセッションが同じデッドロック優先度の場合、SQL Server のインスタンスは、デッドロック対象としてロールバックするのに負担がかからない方のセッションを選択します。たとえば、両方のセッションがデッドロック優先度を HIGH に設定している場合、インスタンスは、ロールバックするのに負担がかからないと思われるセッションをデッドロック対象として選択します。
- セッションの間でデッドロック優先度が異なる場合、一番低いデッドロック優先度のセッションがデッドロック対象として選択されます。
SET DEADLOCK_PRIORITY は、解析時ではなく実行時に設定されます。
権限
ロール public のメンバシップが必要です。
例
次の例では、デッドロック優先度を LOW
に設定する変数を使用します。
DECLARE @deadlock_var NCHAR(3);
SET @deadlock_var = N'LOW';
SET DEADLOCK_PRIORITY @deadlock_var;
GO
次の例では、デッドロック優先度を NORMAL
に設定します。
SET DEADLOCK_PRIORITY NORMAL;
GO
参照
関連項目
@@LOCK_TIMEOUT (Transact-SQL)
SET (Transact-SQL)
SET LOCK_TIMEOUT (Transact-SQL)
その他の技術情報
デッドロックの検出と終了
ロック タイムアウトのカスタマイズ