3

私が使用しているデータベースは現在 100 GiB を超えており、今後 1 年ほどでさらに大きくなることが約束されています。私のデータセットで動作するパーティショニング スキームを設計しようとしていますが、これまでのところ惨めに失敗しています。私の問題は、このデータベースに対するクエリは、通常、この 1 つの大きなテーブル内の複数の列の値をテストし、予測できない方法で重複する結果セットになることです。

全員 (私が一緒に働いている DBA) は、特定のサイズを超えるテーブルを持つことに対して警告し、私が見つけた解決策を調査および評価しましたが、それらはすべて、論理テーブルのパーティション分割を可能にするデータ特性に依存しているようです。残念ながら、テーブルの構造を考えると、それを達成する方法がわかりません。

これを概観するために、2 つのメイン テーブルの構造を次に示します。

Table: Case
Columns:
Year
Type
Status
UniqueIdentifier
PrimaryKey
etc.

Table: Case_Participant
Columns:
Case.PrimaryKey
LastName
FirstName
SSN
DLN
OtherUniqueIdentifiers

上記の列のいずれかをクエリ パラメータとして使用できることに注意してください。

4

3 に答える 3

5

推測するのではなく、測定します。使用状況の統計を収集し ( query run )、エンジン自体の統計を見てsys.dm_db_index_usage_stats、情報に基づいた決定を下します。データ サイズのバランスが最適で、最も頻繁に実行されるクエリに最適なアフィニティを提供するパーティションが適切な候補になります。もちろん、妥協する必要があります。

また、パーティショニングはテーブルごとではなく、インデックス (「テーブル」 = インデックスの 1 つ) ごとであることを忘れないでください。問題は、何をパーティショニングするかではなく、どのインデックスをパーティショニングするかしないか、そしてどのパーティショニング関数を使用するかです。2 つのテーブルのクラスター化されたインデックスは明らかに最も可能性の高い候補になります (クラスター化されていないインデックスのみを分割し、クラスター化されたインデックスを分割しないことはあまり意味がありません)。クラスター化されたキーの再設計を検討していない限り、質問実際には、クラスター化インデックスに選択するパーティション関数です。

あえて推測すると、時間の経過とともに蓄積されるデータ (「ケース」と「年」など) の場合、最も自然なパーティションはスライディング ウィンドウです。

于 2009-06-11T23:55:15.020 に答える
0

他に選択肢がない場合は、キーモジュールでパーティションテーブルの数を分割できます。10 個のテーブルに分割したいとしましょう。テーブルを定義します:
Case00
Case01
...
Case09

UniqueIdentifier または PrimaryKey モジュール 10 でデータを分割し、各レコードを対応するテーブルに配置します (一意の UniqueIdentifier によっては、ID の手動割り当てを開始する必要がある場合があります)。

クエリを実行するときは、すべてのテーブルで同じクエリを実行し、UNION を使用して結果セットを単一のクエリ結果にマージする必要があります。

予想されるクエリに対応する論理的な分離に基づいてテーブルをパーティション分割するほどではありませんが、テーブルのサイズ制限に達するよりはましです。

于 2009-06-11T21:02:15.420 に答える
0

(パーティショニングの前に) 検討すべきもう 1 つの可能性は、モデルです。

正規化されたデータベースにいますか? 正規化/非正規化/部分正規化のさまざまな選択によってパフォーマンスを改善できる追加の手順はありますか? レポート/クエリに最適な Kimball スタイルの次元スター モデルにデータを変換するオプションはありますか?

テーブルのパーティションを削除しない場合 (前述のようにスライディング ウィンドウ)、または異なるパーティションを別の方法で処理する場合 (クエリで任意の列を使用できると言う場合)、何を取得しようとしているのかわかりません。インデックス作成戦略からまだ抜け出せないパーティショニング。

行に対するテーブルの制限については知りません。私の知る限り、行数は利用可能なストレージによってのみ制限されます。

于 2009-06-13T00:07:51.673 に答える