MS SQL Serverで多数のテーブルを管理する最も良い方法は何ですか?


4

この質問別に関連している:
Will having multiple filegroups help speed up my database?

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

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

堅牢なアーカイブ/クリーンアップ機能を追加する前に、十分に保存された分析結果が蓄積されると、アプローチが崩れ始めます。テストデータベースは、いくつかのテーブルに登場しました。しかし、生産中でさえ、10万台以上のテーブルを持つことは私たちには不可能ではありません。 Microsoftはsysobjects(約20億)のサイズにかなり大きな理論上の制限を設けていますが、データベースが100,000を超えるとCREATE TABLEやDROP TABLEのような簡単なクエリが大幅に遅くなります。

私たちのアプローチについては議論の余地がありますが、それ以上の文脈がなければ難しいかもしれないと思うので、もっと一般的に質問したいと思います。それらを管理するための最良の方法は?複数のファイルグループ?複数のスキーマ/所有者?複数のデータベース?

別の注記:「問題でハードウェアを投げている」(つまり、RAM、CPUパワー、ディスク速度を追加する)という考え方には驚きません。しかし、特に、(例えば)誰かが、RAMを追加する効果や、複数のファイルグループを使用して大きなシステムカタログを管理する効果を明確に伝えることができない場合は、それを排除しません。

  0

WOW。多くのテーブルで、リストをロードするときにManagement Studioは何をしますか?それは痛いものでなければなりません。 23 9月. 082008-09-23 23:38:19

  0

Management Studioでテーブルのリストをプルアップすることはできません。不注意に誰かがそうすると、プロセスを殺すか、クラッシュするだけです。しかし、それは私たちの最大の問題から遠いです。 30 12月. 082008-12-30 14:49:17

  0

これはあなたのためにどのように判明したのか不思議です、これはほとんど誰もそれを行う方法について確固たる情報を持っていない、それはすべての理論です。だから、どんな答えでも分かります。 16 8月. 112011-08-16 06:58:58

0

私たちのデータベースは複数のデータベースに分割されました。したがって、メインデータベースには、1つまたは複数の「実行」データベースを参照する「データベース」テーブルが含まれています。それぞれのデータベースには、異なる分析結果セットが含まれています。次に、メインの「実行」テーブルにデータベースIDが格納され、保存された結果を取得するコードには、すべてのクエリの関連するデータベース接頭辞が含まれます。

このアプローチでは、各データベースのシステムカタログをより合理的にすることができ、コア/パーマネントテーブルとダイナミック/実行テーブルの分離が向上し、バックアップとアーカイブの管理が容易になります。また、複数の物理ディスクにデータを分割することもできますが、複数のファイルグループを使用することもできます。全体として、現在の要件を満たしていれば、今のところうまくいきます。期待される成長に基づいて、私たちもそれがうまく拡大すると考えています。

また、SQL 2008はSQL 2000やSQL 2005よりも大きなシステムカタログを扱う傾向があることに気付きました。 (私はこの質問を投稿したときに2008年にアップグレードしていませんでした)


0

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

あなたは非常に大きな問題の表面積を持っており、それは助けを始めるのが難しいです。あなたのポストでは明らかではないいくつかの解決策のパラメータがあります。たとえば、実行分析テーブルを保持する予定はどのくらいですか?他にも質問が必要な質問がたくさんあります。

重大なデータウェアハウスとデータ/テーブルのパーティション分割が必要になります。保持したいデータの量に応じて、テーブルの逆正規化と平坦化を開始する必要があります。

これは、マイクロソフトに直接お問い合わせいただくことがお互いに有益な場合があります。マイクロソフトは他の顧客を紹介する良いケースを得て、ベンダーから直接サポートを受けています。


1

テーブルはすべて異なる構造ですか?それらが同じ構造であれば、単一のパーティション表で逃げることができます。

異なる構造で、同じディメンション列のサブセットのみであっても、適用できない列にはnullを持つ同じ表のパーティションに格納できます。

これが分析的な場合(派生的な価格設定の計算はおそらく?計算の結果をフラットファイルにダンプし、フラットファイルからロードして計算を再利用することができます。


2

システム全体を最初に見ることなく、最初の推奨事項は、キーの一部としてRunIDを持つ結合されたテーブルに履歴ランを保存することです。ディメンションモデルもここで関連します。このテーブルは、改善のためにパーティション分割することができます。これにより、テーブルを他のファイルグループに分散することもできます。

別の可能性、それは、独自のデータベース内の各実行を配置し、それらを切り離し、必要に応じてのみ、それらを取り付ける(読み取り専用形式で)する

TABLEおよびDROP TABLEのCREATEおそらくマスターので、パフォーマンスの低いまたはされていますモデルデータベースはこの種の動作に最適化されていません。

データベース設計の選択については、マイクロソフトと相談することをお勧めします。