DBパフォーマンスを最大化するには、SSISを介して大量のデータをSQL Server 2008にロードした後に実行する必要があるコマンド


11

テストデータを空のデータベースに読み込むSSISパッケージを作成しました。一部のテーブルは非常に大きい(約7億行)。SSISパッケージが完了したら、データベースのパフォーマンスを最大化するために(見習いDBAとして)実行する必要があるコマンドはありますか?

たとえば、私は実行しましたEXEC sp_updatestatsが、インデックスを更新する必要がないと報告されました。

大量のデータが読み込まれた後に行うことのリストはありますか、それともSQL Server 2008がそれらすべてを処理してくれるのですか?

回答:


8

空のデータベースにロードする場合は、ロード後に追加のメンテナンス手順を必要としないようにするための手順を実行できます。断片化は敵であり、それを回避しようとしています。

  • ロードする前にすべてのNCインデックスを削除します。
  • ロード後、各テーブルのNCインデックスを順番に追加します。つまり、インデックスをTableA、次にTableB、次にTableAに追加しないでください。これは断片化には影響しませんが、非常に大きなデータセットにインデックスを追加するのにかかる時間を改善できます(バッファープールのチャーンを減らします)。
  • クラスタ化インデックスの順序でデータをテーブルに挿入できる場合は、クラスタ化インデックスをそのまま残します。できない場合は、データをヒープにダンプし、ロード後にクラスター化インデックスに再構築します。

コピーアンドペーストではなく、私がBCPについて尋ね質問への回答にまとめられたETL最適化@Marianのリファレンスの非常に包括的なリストを紹介します。これらの多くは、シナリオに等しく適用されます。


2
興味深いことに、SQLCATとSSISからのビデオへのリンクで、彼らの発見は決してNCインデックスを落とすことはありませんでした。これはさらに「それは依存する」の別のケースだと
思い

2
@billinkcは、この質問が参照する空のデータベースではなく、インクリメンタルロード用ではありませんでしたか?どちらにしても、SQLCATテストは、一般的な組織ではめったに見られないハードウェアのクラスを含む傾向があります。
Mark Storey-Smith

5

これは、ウィンドウの大きさによって異なりますが、一般的には、統計の更新とインデックスの再構築/再編成が適切な手順です。それ以外に、あなたが本当にやるべきことは他にないはずです。

統計は、操作によって影響を受ける可能性のある行数をクエリオプティマイザーに通知し、次に、クエリを実行するためにどのアプローチを取るかをSQLに通知します。データを挿入すると、分布が歪む可能性があります。自動更新モードで統計の更新をトリガーするのに十分な行を挿入していない場合は、手動の行が役立つはずです。あなたがウィンドウを持っているなら、私は統計の更新部分を保持すると言います。

データが追加されると、インデックスが断片化する可能性があります。再構築または再編成は、これを減らすのに役立ち、実際にデータにアクセスするときのパフォーマンスを向上させることができます。


4
インデックスと同様に、SQLCATのSSISビデオの1つで、データの増加率が100%を超え、NCI が1つしかない場合は、それらを削除して再作成するという経験則も示されています。10%を超え、NCIが2つ以上ある場合は、ドロップして再作成するとパフォーマンスが向上します。
billinkc

2
ビルのコメントを明確にするために-私は提案がドロップインデックスを作成する時間のためであると彼は言っていると思いますドロップインデックス、データロードを実行し、次にインデックスを再作成します。ロード中にインデックスをそこに残すのではなく、後で再構築します。とにかくそう思います:-)そして、ええ、素晴らしい点、私はそのコメントを+1しました。
マイクウォルシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.