ERPソフトウェアはSQLServer 2000データベースを使用します。以前は数秒かかっていたソフトウェアで特定のタスクを実行すると、300秒の遅延が発生し、SQLServerはエラー「ロックタイムアウト」を返します。 SQLServer接続タイムアウト」。
SQL Server Profilerを使用して問題を特定しようとしましたが、そこにいくつかのROLLBACKが表示されましたが、結論は出ませんでした。
どのクエリがどのリソースをロックしていて、どのクエリがタイムアウトしたかを特定するためのより良い方法はありますか?
Master.dbo.sysprocessesテーブルとmaster.dbo.syslocksテーブルにクエリを実行して、システムで実際に実行されているものと、それらが取得しているロックを確認できます。これとsp_who2は、レコードをロックしているもの、または発生しているブロックを把握するのに役立ちます。
SQLデータベースで定期的なデータベースメンテナンスを実行していますか?そうでない場合、このメンテナンスの欠如は、あらゆる種類のパフォーマンスの問題につながる可能性があります。
NickとDennyが書いたことに基づいて構築するには、状況に最適な間隔で実行されているSQLAgentジョブにこれらのクエリを配置します。フォローアップのために出力を.txtファイルにキャプチャします。問題の原因を見つけるために、それほど長く実行する必要はないようです。
クエリアナライザで実行:
sp_who2
スパイドが何によってブロックされているかを示すBlkBy列を見てください
次に実行します:
DBCC INPUTBUFFER(spid)
ここで、spidは51のような実際の数値であり、ブロッキングspidの最後のステートメントが何であったかを確認します。