いいえ、動作が遅い理由を確認することはできませんが、ヒントをいくつかご紹介します。
1)SQL 2005では、非クラスター化インデックスの管理がストレージエンジン(私のチーム)からクエリプロセッサに変更されました。これには多くの副作用があり、そのうちの1つは、縮小によってヒープデータページを移動できる速度です。すべての非クラスター化インデックスレコードには、インデックスを作成するデータレコードへのバックリンクが含まれています。ヒープの場合、これは特定のデータページのレコード番号への物理リンクです。ヒープデータページが縮小によって移動されると、そのページのレコードにバックリンクするすべての非クラスター化インデックスレコードは、ページの新しい場所で更新される必要があります。2000年に、これはストレージエンジン自体によって非常に効率的に行われました。2005年以降は、クエリプロセッサを呼び出して非クラスター化インデックスレコードを更新することにより、これを行う必要があります。これは、2000年よりも最大で100倍遅くなることがあります。
2)行外LOB値(実際のLOBデータ型または行オーバーフローデータ)には、それらが属するデータまたはインデックスレコードへのバックリンクが含まれていません。LOBレコードのページを移動するときは、それらが含まれるテーブルまたはインデックス全体をスキャンして、どのデータ/インデックスレコードがそれらを指しているかを調べ、新しい場所で更新できるようにする必要があります。これも非常に遅いです。
3)データベースを使用する別のプロセスが原因で、ページを移動するために必要なロックを待機しているシュリンクをブロックしている可能性があります。
4)スナップショット分離が有効になっている可能性があり、古いバージョンを必要とするトランザクションが完了するまで、バージョンストアリンクのあるページを縮小できません。
5)I / Oサブシステムの能力が低下している可能性があります。低い1桁より長いディスクキューの長さは、I / Oサブシステムがボトルネックになっていることを意味します。
これらのいずれかまたはすべてが、実行時間の短縮の原因となっている可能性があります。
ただし、一般的には、縮小を実行する必要はありません。詳細については、このブログ記事を参照してください:あなたは、あなたのデータファイルを縮小してはならないのはなぜ。
お役に立てれば!