2

1 億 7000 万行の非常に大きなテーブル [X] があり、使用済みレコードのみを [X] に保持するためにデータをアーカイブする必要があります。これは、速度が低下しているシステムを高速に保つために行っています。テーブル全体から少量の行しか使用していないため (10% 未満と言えば)、たとえば Archive.[X] に大量のデータをアーカイブする余裕があります。

問題は、レコードを削除しようとすると、時間がかかることです。ここで、トラブルシューティングに次のチェックを実行して、時間がかかる理由の可能性を確認しました。 1) テーブルにインデックスが作成されている 2) インデックスが作成されていない外部キーがない 3) 削除時にバックグラウンドで余分な作業を行うトリガーがない

同様のシナリオに遭遇した人はいますか?似たようなことをするときに従うべき最善の手順は何ですか? また、役立つツールはありますか?

私はあなたの助けに感謝します!

4

2 に答える 2

4

オプション

  • 10% を新しいテーブルに入れてみませんか?
  • トランザクションではない一括削除/挿入(以下を参照)
  • パーティションテーブル (別名、エンジンに処理させる)

アーカイブ テーブルに入力するには

SELECT 'starting' -- sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
BEGIN
    DELETE TOP (50000) dbo.Mytable
    OUTPUT DELETED.* INTO ArchiveTable 
    WHERE SomeCol < <Afilter>

    -- maybe CHECKPOINT

    WAIT FOR DELAY ...
END
于 2011-10-04T10:56:39.113 に答える
2

データベース/テーブルをパーティション分割する必要があります。

于 2011-10-04T10:52:34.843 に答える