2010-11-25 17 views
0

私はおそらく、巨大なテーブル(数十億行)でパーティショニングを実装しようとしています。SQL Server 2008 r2でmodパーティショニングを実装する方法は?

各テーブル行には、特定のデバイスに関するステータスがあり、分単位で挿入されます。したがって、デバイスあたり1日あたり1440(24 x 60)行が存在します。各デバイスには固有のID(DeviceID)があります。

私はDeviceID MOD {TheNumberOfPartitionsThatIWant}を使用してパーティショニングについて考えましたが、TheNumberOfPartitionsThatIWantが250であることは良い妥協であると思います。この戦略を使用すると、パーティション全体にデバイスを均等に分散することができます。また、特定のデバイスをクエリする場合、クエリエンジンは250パーティションすべてではなく、1つのパーティションに触れるだけで済みます。

問題は、この列を使用してパーティション・スキーマで表を定義できるように、行が属しているパーティションを示すために、表に追加の列を追加する必要があるということです。この列をそれほど単純な表現にするのではなく、パーティションスキーマに(DeviceID MOD 250)を供給する方がはるかに良いでしょう。そのための回避策はありますか?

+0

私はあなたの前の[質問](http://stackoverflow.com/questions/4249073/partitioning-for-query-performance-in-sql-server-2008)にあなたが持っているコメントを見ました** 2 **ドライブ。 2つのパーティションを使用する..いいえ?あなたがこれらの種類のボリュームを処理したい場合は、ハードウェア上で*まったく*縮めることはありません。 – gbn

+0

これは単なる経験でした。最終的な解決策では、おそらくDASまたはSAN構成を使用します。 – gsb

+0

パーティショニング戦略の目的は何ですか?クエリでパーティションを削除したり、高速データロードをサポートしたり、古いデータを選択的にアーカイブすることは可能ですか? DeviceIDに基づいて計算された列をパーティション化して250の範囲を作成することはできますが、すべてのパーティションが毎日更新されることになるので、それは分かりやすいパーティション化戦略になります。また、1日あたりのMB/GB単位のテーブルの予想サイズはどれくらいですか? – sqlvogel

答えて

2

関数に基づいてスキーマバインドされた計算カラムをパーティション化することはできますが、それでも問題は解決されませんが、スケーリングされたテストが必要になります。また、whereテーブル内で同じ関数を使用するには、そのテーブルへのすべてのアクセスが必要です。

重要な点はdportasです。パーティション化はデータエージングを簡単な操作にするように設計されていますが、システム内のデータは古い/値がないためにパージする必要がありますこのデータを削除するには、長時間実行される削除に減らされます。

複数のディスクにデータを分散するという観点からは、パーティション化は既存のファイルグループ/ファイル機能を大幅に追加するものではありません。

0

適切な索引付けは、おそらくパーティション化よりも優れた結果をもたらします。 @Andrew氏によると、パーティション分割は、主に高速データのロードとアンロード(つまり、パーティションの入出力の切り替え)を目的としています。

0

私は計算カラムを作成し、問題を解決しました。

関連する問題