SQL Server 2000 データベースをリポジトリとして使用している顧客より、並行処理が増加するときに SQL Server の内部で悲観的 (Pessimistic) ロックを使用すること (主にロックエスカレーション) によるデッドロックの問題が SQL Server 2000 に発生するという報告がありました。
これらのデッドロックエラーは、次の形で表示されます。
com.waveset.util.IOException: ==> com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 51) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction. |
このデッドロック問題を回避または解決するには、次の項目を実行します。
SQL Server 2005 データベースを使用します。
次のようにコマンドを初期化して、READ_COMMITTED_SNAPSHOT パラメータを設定します。
ALTER DATABASE waveset SET READ_COMMITTED_SNAPSHOT ON
READ_COMMITTED_SNAPSHOT パラメータを有効にすると、次のようになります。
SELECT 文の実行中にブロックの原因となりうる競合がなくなります。そのため、SQL Server 内部へのデッドロックの危険性が大幅に減少します。
不確実なデータが読まれなくなります。そのため、SELECT 文が確実なデータの一貫したビューを受信できるようになります。
READ_COMMITTED_SNAPSHOT パラメータの詳細は、http://msdn2.microsoft.com/en-us/library/ms188277.aspx を参照してください。