SET DEADLOCK_PRIORITY (Transact-SQL)

4238 ワード




SQL Server 2014
その他のバージョン
このトピックは評価されていません-このトピックを評価します
現在のセッションと他のセッションでデッドロックが発生した場合に処理を継続する相対的な重要性を指定します.
適用範囲:SQL Server(SQL Server 2008~現在のバージョン)、Windows Azure SQL Database(初期バージョン~現在のバージョン).
Transact-SQL構文規則


構文
SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH |  | @deadlock_var | @deadlock_intvar }

 ::= { -10 | -9 | -8 | … | 0 | … | 8 | 9 | 10 }


パラメータ
LOW
現在のセッションでデッドロックが発生し、デッドロックチェーンに含まれる他のセッションのデッドロック優先度がNORMALまたはHIGH以上の整数値に設定されている場合、現在のセッションがデッドロックの犠牲になることを指定します.他のセッションのデッドロック優先度が-5未満の整数値に設定されている場合、現在のセッションはデッドロックの犠牲にはなりません.このパラメータは、他のセッションのデッドロック優先度がLOWまたは-5に設定されている場合、現在のセッションがデッドロックの犠牲になる可能性があることも指定します.
NORMAL
デッドロックチェーンに含まれる他のセッションのデッドロック優先度がHIGHまたは0より大きい整数値に設定されている場合、現在のセッションはデッドロックの犠牲になりますが、他のセッションのデッドロック優先度がLOWまたは0より小さい整数値に設定されている場合、現在のセッションはデッドロックの犠牲になりません.このパラメータは、他のセッションのデッドロック優先度がNORMALまたは0に設定されている場合、現在のセッションがデッドロックの犠牲になる可能性があることも指定します.NORMALはデフォルトの優先度です.
HIGH
デッドロックチェーンに関連する他のセッションのデッドロック優先度が5より大きい整数値に設定されている場合、現在のセッションがデッドロックの犠牲になるか、他のセッションのデッドロック優先度がHIGHまたは5に設定されている場合、現在のセッションがデッドロックの犠牲になる可能性があることを指定します.
21個のデッドロック優先度の整数値範囲(-10~10)を指定します.デッドロックチェーンに関連する他のセッションがより高いデッドロック優先度値で実行される場合、現在のセッションはデッドロックの犠牲になりますが、他のセッションが現在のセッションよりも低いデッドロック優先度値で実行される場合、現在のセッションはデッドロックの犠牲になりません.また、他のセッションが現在のセッションと同じデッドロック優先度値で実行される場合、現在のセッションがデッドロックの犠牲になる可能性があることも指定します.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