巨大なテーブルのパフォーマンスチューニング(SQL Server 2008 R2)


14

背景:
UATフェーズにファクトテーブルがあります。Prodに5年間のデータをロードする目的(予想されるサイズ4億Mnレコード)現在、テストのデータはわずか2年です。

テーブルの特徴:

  1. 次元数〜45
  2. 対策〜30
  3. 非加法メジャーとその他の列〜25
  4. 現在のデータサイズ〜2億(2年間のデータ)
  5. タイムビュー:3つの異なる月ビュー:会計/カレンダー/調整(つまり、同じ行が探しているビューに基づいて異なる月に分類される場合があります)
  6. ユーザーが一度に必要とするビューは1つだけです。(つまり、クエリで使用されるのは1つのMonth列のみです。これにより、時間表示でパーティション分割ができなくなります)
  7. インデックス:Natural Keysに1つのクラスター化インデックス(8列)。ディメンションSK(FK)とすべてのメジャーを含む各Month列に1つずつ非クラスター化インデックスをカバーする3つを作成しました。
  8. このため、インデックスは巨大です(合計190 GB)。
  9. スペースに制約はありません(1 TBが割り当てられています)
  10. サーバーで使用可能な64 GBのRAM。
  11. テーブルの圧縮も完了しました。

要件:
このファクトテーブルのクエリは、30秒以内に結果を返す必要があります(一般的なクエリは、Dim値でいくつかのDimsグループに参加するsum(measure)を選択します)。レポートは、このファクトテーブルの上で直接行われます。

問題:
インデックスで使用可能な列を含むクエリはすべて正常に機能しますが、インクルードにない他の列を含めると.. 5〜10分以上かかります。選択したディメンション/列でうまく機能するソリューションを提案できますか?この状況でインデックスビューは役立ちますか?

回答:


6

SQL Server 2012にアップグレードし、列ストアを使用します。これらの要件で成功します。真剣に、評価版をダウンロードして試してみてください。すべてのインデックスを削除し、クラスター化インデックスを削除し、すべての列に非クラスター化列ストアインデックスを追加して、旋回させます。主にセグメントの削除が開始されたために、実行時間を2〜3秒に短縮したケースを見てきました。


0

インデックス付きビューは問題を解決しますか?データは最新のものである必要がありますか?いくつかの順列のインデックス付きビューを作成できます。しかし、そのような多くの寸法と測定を使用すると、スペースがすぐになくなる可能性があります!

SSDを使用してはどうですか?


データは毎月更新されます。ビューを更新するのにどれくらい時間がかかりますか?

既存のクエリに5〜10分かかる場合、インデックス付きビューには5〜10分かかります。完了すると、同じクエリを実行すると、テーブルから出てきたように(つまり、すぐに)戻ってきます。インデックス付きビューは、特定のSQLビットを事前に実行します。一致するSQLをサブミットすると、再度実行するのではなく、インデックス付きビューから取得します。インデックス付きビューの主な利点は、既存のクエリを変更する必要がなく、自動的に使用されることです。欠点は、いくつかの異なる組み合わせのために作成する必要があることです。
Nick.McDermaid

しかし、速度を上げるために複数のインデックス付きビューを作成することはお勧めしません。時間とディスク容量が不足することになります。武器庫に入れるのはたった一つのことかもしれません。
Nick.McDermaid

してください...提案されているように列ストアを調べてください!
Nick.McDermaid
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.