1

時間フィールドで分割されたテーブルがあります。25個のパーティションがあります。ここで、オブジェクトタイプフィールドを使用してさらに分割することを検討します。私は10個のオブジェクトタイプを持っているので、250個のパーティションになります。私が読んだところによると、推奨されるパーティション数は数十ですが、私の場合、スキーマは非常に単純で、結合が含まれていないため、その数のパーティションを定義しても大丈夫かどうか疑問に思います。postgresバージョン9.1.2を使用しています

CREATE TABLE metric_store.lc_aggregated_data_master_10_minutes
(
  from_time integer,
 object_id integer,
 object_type integer,
 latencies_client_fetch_sec_sum bigint,
 latencies_client_rttsec_sum bigint,
 latencies_db_bci_res_sec_sum bigint,
 latencies_net_infrastructure_ttlb_sec_sum bigint,
 latencies_retransmissions_sec_sum bigint,
 latencies_ttfbsec_sum bigint,
 latencies_ttlbsec_sum bigint,
 latencies_ttlbsec_sumsqr bigint,
 latencies_ttlbsec_histogram_level0 integer,
 latencies_ttlbsec_histogram_level1 integer,
 latencies_ttlbsec_histogram_level2 integer,
 latencies_ttlbsec_histogram_level3 integer,
 latencies_ttlbsec_histogram_level4 integer,
 latencies_ttlbsec_histogram_level5 integer,
 latencies_ttlbsec_histogram_level6 integer,
 latencies_ttlbsec_histogram_level7 integer,
 usage_bytes_total bigint,
 usage_hits_total integer,
 latencies_server_net_ttlbsec_sum bigint,
 latencies_server_rttsec_sum bigint,
 avaiability_errors_total integer
)
  WITH (
  OIDS=FALSE
  );
  ALTER TABLE metric_store.lc_aggregated_data_master_10_minutes
  OWNER TO postgres;


CREATE TABLE metric_store.lc_aggregated_data_10_minutes_from_1353070800
(
  CONSTRAINT lc_aggregated_data_10_minutes_from_1353070800_pkey PRIMARY KEY (from_time , object_id ),
  CONSTRAINT lc_aggregated_data_10_minutes_from_1353070800_from_time_check CHECK (from_time >=      1353070800 AND from_time < 1353190800)
   )
    INHERITS (metric_store.lc_aggregated_data_master_10_minutes)
   WITH (
   OIDS=FALSE
);
ALTER TABLE metric_store.lc_aggregated_data_10_minutes_from_1353070800
OWNER TO postgres;


CREATE INDEX lc_aggregated_data_10_minutes_from_1353070800_obj_typ_idx
ON metric_store.lc_aggregated_data_10_minutes_from_1353070800
USING btree
(from_time , object_type );
4

1 に答える 1

1

現在のバージョン (9.2) には、パーティションの数に関するこのガイダンスがあります。(このガイダンスは 8.3 以降変更されていません。)

マスター テーブルのすべてのパーティションに対するすべての制約は、制約の除外中に調べられるため、パーティションの数が多いと、クエリの計画時間が大幅に長くなる可能性があります。これらの手法を使用したパーティション分割は、おそらく最大 100 個のパーティションでうまく機能します。何千ものパーティションを使用しようとしないでください。

PostgreSQL メーリング リストを読むと、クエリの計画にかかる時間が増えることが、直面している主な問題だと思います。

パーティションがコールド データからホット データを分離できる場合、またはパーティションが頻繁にクエリを実行するクラスター化されたデータ セットをグループ化できる場合は、おそらく問題ありません。しかし、テストはあなたの最善の策です。EXPLAIN ANALYZE分割されていないテーブルで代表的なクエリを実行し、分割後に同じことを行います。それらのいずれかを分析する前に、代表的なクエリを選択してください。

于 2012-11-12T10:34:29.993 に答える