4

この質問は別の質問に関連しています:
複数のファイル グループを使用すると、データベースの速度が向上しますか?

私たちが開発しているソフトウェアは、MS SQL Server 2005 を使用してリレーショナル データを格納する分析ツールです。最初の分析は遅くなる可能性がありますが (数百万行または数十億行のデータを処理しているため)、以前の分析をすばやく呼び出すにはパフォーマンス要件があるため、各分析の結果を「保存」します。

私たちの現在のアプローチは、分析結果を一連の「実行固有の」テーブルに保存することです。分析は非常に複雑であるため、分析ごとに 100 ものテーブルが作成される可能性があります。通常、これらのテーブルは分析ごとに数百 MB を使用します (数百 GB、場合によっては数 TB のソース データと比較すると小さい)。しかし、全体として、ディスク容量は私たちにとって問題ではありません。テーブルの各セットは 1 つの分析に固有であり、多くの場合、これによりソース データを参照するよりもパフォーマンスが大幅に向上します。

保存された分析結果が十分に蓄積されると、このアプローチは崩壊し始めます。より堅牢なアーカイブ/クリーンアップ機能を追加する前に、テスト データベースは数百万のテーブルに増加しました。しかし、本番環境であっても、100,000 を超えるテーブルを持つことは簡単なことではありません。Microsoft は sysobjects のサイズに非常に大きな理論的制限 (~20 億) を設定していますが、データベースが 100,000 程度を超えると、CREATE TABLE や DROP TABLE などの単純なクエリは劇的に遅くなる可能性があります。

私たちのアプローチについて議論する余地はありますが、より多くのコンテキストがないとそれを行うのは難しいと思うので、代わりに、より一般的な質問をしたいと思います: 非常に多くのテーブルを作成する必要がある場合、管理するための最良のアプローチは何ですか?彼ら?複数のファイル グループ? 複数のスキーマ/所有者? 複数のデータベース?

別のメモ: 「問題にハードウェアを投入する」(つまり、RAM、CPU パワー、ディスク速度を追加する) という考えには、私は興奮しません。ただし、特に (たとえば) 誰かが、RAM の追加や複数のファイル グループの使用が大規模なシステム カタログの管理にどのような影響を与えるかを明確に教えてくれる場合は、その可能性を排除しません。

4

4 に答える 4

2

最初にシステム全体を確認することなく、キーの一部として RunID を使用して組み合わせたテーブルに過去の実行を保存することをお勧めします。ディメンション モデルもここに関連している可能性があります。このテーブルは、改善のためにパーティション分割することができます。これにより、テーブルを他のファイル グループに分散させることもできます。

別の可能性は、各実行を独自のデータベースに入れてから切り離し、必要に応じてのみ (読み取り専用形式で) 接続することです。

マスター データベースまたはモデル データベースがこの種の動作に最適化されていないため、CREATE TABLE と DROP TABLE のパフォーマンスが低下している可能性があります。

また、データベース設計の選択について Microsoft に相談することをお勧めします。

于 2008-09-24T00:00:48.663 に答える
1

テーブルはすべて異なる構造ですか? それらが同じ構造である場合、単一のパーティション化されたテーブルでうまくいく可能性があります。

それらが異なる構造であるが、ディメンション列の同じセットのサブセットにすぎない場合でも、該当しない列に NULL がある同じテーブルのパーティションにそれらを格納できます。

これが分析的である場合 (デリバティブ価格の計算でしょうか?)、実行した計算の結果をフラット ファイルにダンプし、フラット ファイルからロードして計算を再利用できます。

于 2008-09-23T22:42:34.560 に答える
0

これは、あなたが取り組んでいる非常に興味深い問題/アプリケーションのようです。このようなことに取り組んでみたいと思います。:)

問題の表面積が非常に大きいため、支援を開始するのが難しくなります。あなたの投稿では明らかにされていないソリューション パラメータがいくつかあります。たとえば、実行分析テーブルをどのくらいの期間保持する予定ですか? 他にも尋ねなければならない質問がたくさんあります。

本格的なデータ ウェアハウジングと、データ/テーブルのパーティショニングの組み合わせが必要になります。保持およびアーカイブするデータの量によっては、テーブルの非正規化とフラット化を開始する必要がある場合があります。

これは、Microsoft に直接連絡することが相互に有益な場合に適しています。Microsoft は他の顧客に紹介する良いケースを取得し、ベンダーから直接支援を受けます。

于 2008-09-23T22:25:26.413 に答える
0

データベースを複数のデータベースに分割することになりました。そのため、メイン データベースには、1 つ以上の「実行」データベースを参照する「データベース」テーブルが含まれており、各データベースには個別の分析結果セットが含まれています。次に、メインの「実行」テーブルにはデータベース ID が含まれ、保存された結果を取得するコードには、すべてのクエリに関連するデータベース プレフィックスが含まれます。

このアプローチにより、各データベースのシステム カタログがより合理的になり、コア/永続テーブルと動的/実行テーブルがより適切に分離され、バックアップとアーカイブがより管理しやすくなります。また、データを複数の物理ディスクに分割することもできますが、複数のファイル グループを使用することも可能です。全体として、現在の要件を考えると、現在はうまく機能しており、予想される成長に基づいて、私たちにとってもうまく拡張できると考えています.

また、SQL 2008 は、SQL 2000 および SQL 2005 よりも大規模なシステム カタログをより適切に処理する傾向があることにも気付きました。(この質問を投稿したとき、2008 にアップグレードしていませんでした。)

于 2011-08-17T16:42:13.197 に答える