2

現在MSSQLServer 2008を使用していますが、この特定のタスクに最適なシステムかどうかはわかりません。

私はそのような単一のテーブルを持っています:

PK_ptA PK_ptB DateInserted LookupColA LookupColB ... LookupColF DataCol (ntext)

一般的なクエリは

SELECT TOP(1000000) DataCol FROM table 
WHERE LookupColA=x AND LookupColD=y AND LookupColE=z
ORDER BY DateInserted DESC 

このテーブルには約10億行あり、1日あたり500万行が挿入されています。

SQL Serverに関する私の主な問題は、データファイルをシャーディングまたは分散するのが簡単ではないことです。また、エクスポートは1秒あたり1000行(約1MB /秒)で最大になるようですが、これは非常に遅いようです。

私が抱えているもう1つの問題は、SQL Serverで、新しいLookupColを追加したい場合、ログファイルが非常に大きくなり、タップ時にめったに使用されない大量の空き領域が必要になることです。

この問題に対する明らかなより良い解決策はありますか?

4

2 に答える 2

3

問題がありますが、SQLServerではありません。また、テーブルのデザインが悪いように思われることも無視させてください。

  • データファイルの拡散は実際には非常に簡単です。後で再編成するのはそれほど簡単ではありませんが、実行可能です。テーブル、ファイルグループ、ファイルのレイアウトはどうですか?
  • 1秒あたり1MBのエクスポートは冗談です。真剣に。私は数分で1億5000万行のファイルを処理してきました。これは、1分あたり60.000行を超えるLOTになります。何かがおかしくなりました。一時的なスペース?パフォーマンス分析を行いましたか?ハードウェアはどのように見えますか?
  • ログの使用には何も機能しません。基本的に、ほとんどのプロデータベースと同様に、ログにはトランザクション中に変更されたすべてのデータベースページが含まれます。フィールドを追加すると、すべてのページが変更されます。

あなたがすべき:

  • データベースを再設計し(必要に応じて同じ古いテーブルを所定の位置に保持する)、「LookupColA」などが適用されないようにしますが、正規化されます(LookupValue、および「column」でコード化されたLookuPTable)。このようにして、追加のフィールドを即座に取得できます。これは、スタースキーマのようなデータウェアハウスになります。
  • パフォーマンス分析を行います。いくつか問題があるようです。
  • 間違いなくあなたのハードウェアについて教えてください;)

ここでのこの問題は間違いなくSQLServerではなく、テーブルの設計が不適切であり、ハードウェアの使用率が低い可能性があります。

于 2010-03-24T12:09:18.550 に答える
0

わかりました、テーブルのデザイン(別の回答)。Lokup は基本的にルックアップ テーブルです。

そう....

  • ルックアップテーブル
  • pk (整数)
  • テーブルタイプ
  • フィールドとしての値

  • 値テーブル

  • パック

  • ValueLookupMap テーブル

  • ValueTable エントリの pk
  • LookupTable エントリの pk

したがって、基本的に、ルックアップ「フィールド」を追加する場合は、LookupTable に一連のエントリを作成し、ValueLookupMap にエントリを追加するだけです。

于 2010-03-24T12:42:37.250 に答える