1

SQL Server 2005で問題が発生しています。ストアドプロシージャがPowerBuilderアプリケーションで実行され、PowerBuilderアプリケーションが別のストアドプロシージャを実行するC#DLLライブラリを呼び出します。

最初の手順では、基準に基づいてテーブルに対していくつかの削除を実行し、2番目の手順では、別のテーブルに挿入するために、そのテーブルをプライマリデータソースとして使用します。プロシージャは、選択に同じ結合テーブルのいくつかを使用しますが、変更されるのは1つのテーブルのみです。

問題は、このセットアップがデッドロックすることがあることですが、SQLServerはそれについて何もしません。DLLライブラリには、デッドロックが原因で呼び出されたプロシージャが強制終了された場合にエラーをログに記録するtry / catchステートメントがありますが、代わりにライブラリはプロシージャの終了を待機しています。私はそれを10分間放置しましたが、それでも行き詰まっています。

2番目の手順でDEADLOCK_PRIORITYLOWステートメントを使用してみました。これは、削除が完了するのを待ってから選択する必要があるためです。また、テストするためだけに、そのselectステートメントを1つのテーブルだけにペアリングしようとしましたが、それでもデッドロックが発生します。また、両方の手順でデッドロックをキャッチするために、BEGINTRANSACTIONでTRY/ CATCHブロックを使用しようとしましたが、それも役に立ちませんでした。

トランザクションがブロックされている場合にSQLServerにトランザクションを強制終了させる方法はありますか?DLLでエラーを処理することはできますが、SQL Serverがエラーを返さず、そこに座っているだけでは、何もできません。ありがとう!

4

1 に答える 1

2

この記事を見てみましょう: http ://www.sql-server-performance.com/2006/reducing-locks/

ここでは、問題の一部である可能性のあるSQLServerロックの削減について説明しています。テーブル/ページのロック設定(PageLocksのオン/オフ)を試して、それが状況に役立つかどうかを確認することをお勧めします。

問題にパッチを適用する代わりに、根本的な原因を解決してみてください。

于 2012-04-10T16:31:43.937 に答える