すべてのプロダクト
Search
ドキュメントセンター

PolarDB:列ストアスナップショットの作成

最終更新日:Jan 23, 2025

このトピックでは、列ストアスナップショットを作成および変更する方法について説明します。

前提条件

インスタンスは5.4.20以降で、エンジンはMySQL 5.7またはMySQL 8.0である必要があります。

説明

準備

列ストアスナップショット機能を使用する前に、データベースの次のパラメーターを設定できます。 データベースに接続したら、次の手順を実行します。

説明

PolarDB-Xは、データベースに接続するためのいくつかの方法を提供します。 詳細については、「データベースへの接続」をご参照ください。

  • (オプション) 次のステートメントを実行して、すべての書き込みトランザクションに対して厳密な外部一貫性保証を有効にします。

    SET GLOBAL ENABLE_EXTERNAL_CONSISTENCY_FOR_WRITE_TRX = TRUE;
    説明
    • 特権アカウントを使用してステートメントを実行します。

    • 結果に警告が含まれている場合、実行は失敗しました。 特権アカウントを使用しているかどうかを確認します。

    • トランザクションに対して厳密な外部整合性保証が有効になると、すべてのトランザクションは厳密な2段階コミットモードを使用します。 これは、ローストアデータのデータ書き込みパフォーマンスにわずかな影響を与えます。 columnar_flush() を使用して生成された列ストアのスナップショットポイントは、行ストアのスナップショットポイントでもあります。

    • トランザクションに対して厳密な外部整合性保証が無効になっている場合、列ストアのスナップショットポイントのトランザクションの整合性が保証されます。 しかしながら、列ストアのスナップショットポイントは、行ストアのスナップショットポイントでなくてもよい。 詳細については、「スナップショットポイントの生成」をご参照ください。

  • (オプション) CCIの適応ハートビートを無効にします。

    CALL polardbx.columnar_set_config('columnar_heartbeat_interval_ms_self_adaption', false);
    説明

    過度のメタデータを避けるために、CCIの適応ハートビートを無効にすることを推奨します。

列ストアスナップショットの作成

列ストアのスナップショットはCCIに基づいて実装されます。 したがって、create CLUSTERED COLUMNAR INDEXステートメントを使用し、columnarnan_optionstypeパラメーターをsnapshotに設定することで、列ストアスナップショットを作成できます。 詳細については、「CCIの作成と使用」をご参照ください。

構文

CREATE
    CLUSTERED COLUMNAR INDEX snapshot_name    
    ON tbl_name (index_sort_key_name,...)    
    [partition_options] 
    columnar_options='{
      "k1":"v1",
      "k2":"v2",
    }'

columnar_options:
    "type":"snapshot"
    "snapshot_retention_days":"7"
    "auto_gen_columnar_snapshot_interval":"30"

下表に、各パラメーターを説明します。

パラメーター

必須 / 任意

説明

type

対象

テーブルの列ストアスナップショットを作成するかどうかを指定します。 有効な値:

  • snapshot: 列ストアスナップショットを作成します。

  • default (default): 列ストアのスナップショットを作成しません。

snapshot_retention_days

非対象

カラムストアのスナップショットの保持期間。 単位:日。 有効な値:

  • 1から366。

  • デフォルト値: 7。これは、列ストアのスナップショットが7日間保持されることを示します。 グローバル設定を指定した場合、グローバル設定が優先されます。

説明
  • 保存期間に達した場合、システムはスナップショットを照会できることを保証しません。

  • このパラメーターはタイムゾーンに依存しません。

  • 例:

    snapshot_retention_daysパラメーターが7に設定されている場合、T0に生成されたスナップショットは少なくともT0 + 7日間保持されます。 T0 + 7日後、システムはスナップショットを照会できることを保証しません。

auto_gen_columnar_snapshot_interval

非対象

2つの列ストアのスナップショットポイントの間隔。 単位:分 有効な値:

  • デフォルト値: -1。これは、列ストアのスナップショットポイントが自動的に生成されないことを示します。 グローバル設定を指定した場合、グローバル設定が優先されます。

  • デフォルト値 (-1) を除いて、他の有効な値は5以上でなければなりません。

説明

このパラメーターを設定すると、システムは自動的にcall polardbx.columnar_flush(schema_name, table_name, index_name) コマンドを呼び出して、auto_gen_columnar_snapshot_intervalパラメーターで指定された指定間隔でスナップショットポイントを生成します。 最初の自動呼び出し中に1分続くレイテンシが発生する場合があります。 コマンドを手動で呼び出して、スナップショットポイントを生成できます。 詳細については、「スナップショットポイントの生成」をご参照ください。

次のいずれかの方法を使用して、列ストアのスナップショットを作成できます。

  • テーブルを作成するときに、CCIと列ストアのスナップショットを作成します。

    CREATE TABLE t_order (
      `id` BIGINT(11) NOT NULL AUTO_INCREMENT,
      `order_id` VARCHAR(20) DEFAULT NULL,
      `buyer_id` VARCHAR(20) DEFAULT NULL,
      `seller_id` VARCHAR(20) DEFAULT NULL,
      `order_snapshot` LONGTEXT DEFAULT NULL,
      `order_detail` LONGTEXT DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `l_i_order` (`order_id`),
      CLUSTERED COLUMNAR INDEX `seller_snapshot` (`seller_id`)
        PARTITION BY HASH(`order_id`)
        PARTITIONS 16
        COLUMNAR_OPTIONS='{
          "type":"snapshot",
          "snapshot_retention_days":"7",
          "auto_gen_columnar_snapshot_interval":"30"
        }'
    ) ENGINE=INNODB DEFAULT CHARSET=UTF8 PARTITION BY HASH(`order_id`) PARTITIONS 16;
  • CREATE CLUSTERED COLUMNAR INDEXステートメントを使用して、テーブルのCCIと列ストアのスナップショットを作成します。

    CREATE CLUSTERED COLUMNAR INDEX `seller_snapshot` ON t_order (`seller_id`) 
    PARTITION BY HASH(`order_id`) 
    PARTITIONS 16 
    COLUMNAR_OPTIONS='{
      "type":"snapshot",
      "snapshot_retention_days":"7",
      "auto_gen_columnar_snapshot_interval":"30"
    }';
  • ALTERステートメントを使用して、テーブルのCCIと列ストアのスナップショットを作成します。

    ALTER TABLE t_order ADD CLUSTERED COLUMNAR INDEX `seller_snapshot` (`seller_id`) 
    partition by hash(`order_id`) 
    partitions 16 
    columnar_options='{
      "type":"snapshot",
      "snapshot_retention_days":"10",
      "auto_gen_columnar_snapshot_interval":"30"
    }';
  • CCIが作成されたテーブルの列ストアスナップショットを作成します。

    CALL polardbx.columnar_set_config(<cci_id>, 'type', 'snapshot');
    説明

    cci_idはcci idである。 SHOW COLUMNAR STATUSステートメントを実行して、cci_id値を照会できます。 詳細については、「SHOW COLUMNAR STATUS」をご参照ください。

列ストアスナップショットの属性の変更

  • カラムストアのスナップショットの保持期間と、スナップショットポイントが自動的に生成される間隔を変更します。

    -- Modify the retention period to 10 days.
    CALL polardbx.columnar_set_config(<cci_id>, 'snapshot_retention_days', 10);
    
    -- Modify the interval to generating a snapshot point every 10 minutes.
    CALL polardbx.columnar_set_config(<cci_id>, 'auto_gen_columnar_snapshot_interval', 10);
    
    -- Disable automatic snapshot point generation.
    CALL polardbx.columnar_set_config(<cci_id>, 'auto_gen_columnar_snapshot_interval', -1);
  • 列ストアスナップショットのグローバルデフォルトを変更します。

    -- Set the global default interval for generating snapshots to 20 minutes
    CALL polardbx.columnar_set_config('auto_gen_columnar_snapshot_interval', 20);
    -- Set the global default snapshot retention period to 7 days
    CALL polardbx.columnar_set_config('snapshot_retention_days', 7);
    説明
    • 新しい値は、新しい列ストアのスナップショットでのみ有効になり、既存の列ストアのスナップショットには影響しません。

    • 列ストアスナップショットの作成時にsnapshot_retention_daysauto_gen_columnar_snapshot_intervalの値を明示的に設定しない場合、システムはこれら2つのパラメーターのグローバル設定を使用します。

列ストアスナップショットの削除

  • CCIを削除します。

    DROP INDEX `seller_snapshot` ON t_order;
  • テーブルを削除します。

    DROP TABLE t_order;

列ストアのスナップショット定義の表示

次のステートメントを実行して、カラムストアのスナップショットの定義を表示できます。

SHOW FULL CREATE TABLE t_order;