レプリケーションとデッドロック [SQL Server]
SQL Serverのデッドロックはトレースフラグ1222や1204で詳細情報をエラーログに出力できます。
デッドロックの一般的なアプローチは
・ロックの順序を見直す
・ロック粒度を小さくする
・トランザクション分離レベルを下げる
・スナップショット分離レベルを使う
といった方法があります。
デッドロックが発生すると、SQL Serverはデッドロックに関わったプロセスのうち、
仕掛かり中のコストが低いものをVictimとしてキャンセルします。
一方でレプリケーション実行中にスナップショットエージェントとユーザトランザクションがデッドロックを起こすことがあります。
この場合、スナップショットエージェントにデッドロック優先度を設定することができ、スナップショット動作と
ユーザトランザクションのどちらを生かすのかを選択できます。
どちらを優先するかは業務要件次第ですが、スナップショットがらみのデッドロックが出ている場合には検討の余地があります。
設定は
-DistributorDeadlockPriority
で行い、
-1 はユーザトランザクション優先
0(規定値)はロックモニター任せ
1はスナップショット優先
となります。
参考
http://msdn.microsoft.com/ja-jp/library/ms146939.aspx
スポンサードリンク
デッドロックの一般的なアプローチは
・ロックの順序を見直す
・ロック粒度を小さくする
・トランザクション分離レベルを下げる
・スナップショット分離レベルを使う
といった方法があります。
デッドロックが発生すると、SQL Serverはデッドロックに関わったプロセスのうち、
仕掛かり中のコストが低いものをVictimとしてキャンセルします。
一方でレプリケーション実行中にスナップショットエージェントとユーザトランザクションがデッドロックを起こすことがあります。
この場合、スナップショットエージェントにデッドロック優先度を設定することができ、スナップショット動作と
ユーザトランザクションのどちらを生かすのかを選択できます。
どちらを優先するかは業務要件次第ですが、スナップショットがらみのデッドロックが出ている場合には検討の余地があります。
設定は
-DistributorDeadlockPriority
で行い、
-1 はユーザトランザクション優先
0(規定値)はロックモニター任せ
1はスナップショット優先
となります。
参考
http://msdn.microsoft.com/ja-jp/library/ms146939.aspx
スポンサードリンク
コメント 0