Autopartitioning#

PGDの自動パーティショニングを使用すると、テーブルを複数のパーティションに分割できます。他のテーブル、これらのパーティションの作成と削除が必要です。自動パーティション化は、データを管理可能なチャンクに分割できるため、時間の経過とともに増加する大規模なテーブルの管理に役立ちます。たとえば、古いデータを独自のパーティションにアーカイブし、データが必要でなくなったらパーティションをアーカイブまたはドロップできます。

自動パーティション化とレプリケーション#

PGD自動パーティションは、デフォルトで、 bdr.autopartition ファンクションを介してローカルに管理されます。この機能を使用すると、テーブルの自動レンジパーティションの定義を作成または変更できます。定義が存在しない場合、作成します。それ以外の場合、既存の定義を変更します。

レンジパーティショニング#

PGD自動パーティション化は、 RANGE キーワードを使用したレンジパーティション化をサポートしています。レンジパーティション化を使用すると、列の値の範囲に基づいてテーブルをパーティション化できます。たとえば、日付でテーブルをパーティション化できます。各パーティションには、特定の日付範囲のデータが含まれます。これは、データを管理可能なチャンクに分割できるため、時間の経過とともに増加する大規模なテーブルの管理に役立ちます。

たとえば、日付でパーティション化されたテーブルを作成できます。

CREATE TABLE measurement (
    logdate date not null,
    peaktemp int,
    unitsales int
) PARTITION BY RANGE (logdate);

次に、 bdr.autopartition ファンクションを使用して日次パーティションを作成し、データを1か月間保持できます。

select bdr.autopartition(measurement, 1 day, data_retention_period := 30 days);

この機能は、日ごとにパーティションを作成し、データを30日間保持します。 30日後、パーティションは自動的に削除されます。データベーステーブルを見ると、measurement テーブル用に作成されたパーティションが表示されます。

pgddb=# \dt
__OUTPUT__
                               List of relations
 Schema |                  Name                  |       Type        |  Owner
- -------+----------------------------------------+-------------------+----------
 public | measurement                            | partitioned table | postgres
 public | measurement_part_1231354915_2103027132 | table             | postgres
 public | measurement_part_1520219330_1231354915 | table             | postgres
 public | measurement_part_1670975046_3921991865 | table             | postgres
 public | measurement_part_2103027132_2095358725 | table             | postgres
 public | measurement_part_2877346473_1670975046 | table             | postgres
 public | measurement_part_3921991865_1520219330 | table             | postgres
(7 rows)

なぜこれほど多くのパーティションがあるのですか?デフォルトでは、自動パーティションは将来の使用に備えて5つの高度なパーティションを作成し、2つのパーティションを除くすべてを使用するたびにそれを自動的に行うためです。これは、新しいデータに使用可能な少なくとも2つのパーティションがあることを意味します。 bdr.autopartition ファンクションのminimum_advance_partitions およびmaximum_advance_partitions パラメーターを設定することにより、この動作を変更できます。

bdr.autopartition(relation regclass,
        partition_increment text,
        partition_initial_lowerbound text DEFAULT NULL,
        partition_autocreate_expression text DEFAULT NULL,
        minimum_advance_partitions integer DEFAULT 2,
        maximum_advance_partitions integer DEFAULT 5,
        data_retention_period interval DEFAULT NULL,
        enabled boolean DEFAULT on,
        analytics_offload_period);