SQLテーブルのINSERTは、いくつかの理由で遅くなる可能性があることを知っています。
特定のケースでどちらが原因であるかをどのようにして確認できますかページ分割、非クラスター化インデックスの更新、その他すべての影響をどのように測定できますか?
(一時テーブルから)一度に約10,000行を挿入するストアドプロシージャがあり、1万行あたり約90秒かかります。他のspidがタイムアウトするため、これは許容できないほど低速です。
実行プランを確認したところ、FLUルックアップのINSERT CLUSTERED INDEXタスクとすべてのINDEX SEEKSが表示されましたが、それでも、なぜこれほど時間がかかるのかはわかりません。トリガーはありませんが、テーブルには少数のFKey(適切にインデックスが付けられているように見える)があります。
これはSQL 2000データベースです。
あなたが見ることができるいくつかのもの...
バッチサイズを10000から2000や1000などの小さい値に減らします(行サイズの大きさは言われていません)。
IO Statsをオンにして、FKルックアップがどの程度IOを取っているかを確認します。
挿入が発生したときに引き起こされる待機は何ですか(master.dbo.sysprocesses)?
ここから始めましょう。
ブラッド、
クエリの待機統計を調べる必要があります。 SQL 2000では、DBCC SQLPERF( "待機統計")構文を使用してこれらの詳細を取得できます。
クエリのパフォーマンスを分析するときに探していることを言うことができます。多分それは役立ちます。
使用してみてください:
SET STATISTICS IO ON
そして
SET STATISTICS PROFILE ON
統計IO
最も多くのテーブルスキャン、論理読み取り、および物理読み取りを実行しているテーブルを特定するのに役立ちます(これらの3つを使用して、クエリプランのどの部分が最も調整が必要かを調べます)
統計プロファイル
主にクエリプランを表形式で返します。次に、IOとCPU列を見て、クエリで最もコストがかかっているものを探します(一時テーブルのテーブルスキャンですか)。クラスター化されたキーに挿入するために行うソートとの比較など...)