6
同一の(?)SQL Server 2005マシン。クエリは一方で2秒、他方で15分かかります
環境: SQL Server 2005を実行している2つの32ビットWindows Server 2003 R2マシンがあります。ハードウェア構成は、Xeon 5160 CPU、4GB RAM、13GB RAID0を備えた同一サーバーです。AWEおよび/ 3GBフラグは有効ではありません。 サーバーは、事前に定義されたインストールチェックリストを使用して並列にセットアップされ、インストールされたすべてのソフトウェアは両方のマシンで同じです。 確認する必要があるSQLサーバーのインストール設定とパッチレベルはすべて同じです。1つの違いは、TEMPDBが高速マシンで400MB、低速マシンで1.2GBであることです。ただし、どちらの場合も、TEMPDBの割り当ては行われていません。 問題: 一方では2秒、もう一方では15分で実行されるストアドプロシージャがあります。追加の15分間、ディスクアクティビティはほとんどないか、メモリ使用量は変化しませんが、1つのCPUコアが常に100%に固定されます。 この動作は、データベースが一方からバックアップされ、他方に復元された場合でも持続します。 これはストアドプロシージャであるため、アクティビティモニタとプロファイラは、ストアドプロシージャのどこでこの高CPUアクティビティが発生しているかについての詳細を表示しません。 質問: 他に何を見るべきでしょうか? ファローアップ: スローは、次のカーソル定義のFETCH NEXTステートメントで発生します。 DECLARE C CURSOR FOR SELECT X, Y FROM dbo.A WHERE X NOT IN (SELECT X FROM dbo.B) AND Z <=0 ... <snip> ... FETCH NEXT FROM C …