このトピックでは、列ストアスナップショットを作成および変更する方法について説明します。
前提条件
インスタンスは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_optionsのtypeパラメーターを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_retention_days | 非対象 | カラムストアのスナップショットの保持期間。 単位:日。 有効な値:
説明
|
auto_gen_columnar_snapshot_interval | 非対象 | 2つの列ストアのスナップショットポイントの間隔。 単位:分 有効な値:
説明 このパラメーターを設定すると、システムは自動的に |
例
次のいずれかの方法を使用して、列ストアのスナップショットを作成できます。
テーブルを作成するときに、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_daysとauto_gen_columnar_snapshot_intervalの値を明示的に設定しない場合、システムはこれら2つのパラメーターのグローバル設定を使用します。
列ストアスナップショットの削除
CCIを削除します。
DROP INDEX `seller_snapshot` ON t_order;テーブルを削除します。
DROP TABLE t_order;
列ストアのスナップショット定義の表示
次のステートメントを実行して、カラムストアのスナップショットの定義を表示できます。
SHOW FULL CREATE TABLE t_order;