本文介绍如何创建、修改列存快照。
版本限制
实例版本需要在5.4.20及以上,且引擎版本为MySQL 5.7或MySQL 8.0。
准备工作
在使用列存快照功能前,需要先调整数据库的一些参数配置。连接数据库后,执行如下步骤:
PolarDB-X提供了多种连接数据库的方式。具体信息,请参见连接数据库。
执行如下代码,为所有写入事务开启严格的外部一致性保证:
SET GLOBAL ENABLE_EXTERNAL_CONSISTENCY_FOR_WRITE_TRX = TRUE;
说明需要使用高权限账号执行。
返回结果中如果有
warnings
,则代表执行没成功,请检查您是否使用的是高权限账号。开启事务的严格外部一致性保证后,所有事务都会严格执行两阶段提交。
关闭列存索引自适应心跳(可选):
CALL polardbx.columnar_set_config('columnar_heartbeat_interval_ms_self_adaption', false);
说明建议您关闭列存索引自适应心跳,以避免产生过多的元数据。
创建列存快照
列存快照是基于列存索引实现的,因此,您可以通过创建列存索引的语法CREATE CLUSTERED COLUMNAR INDEX
,在其中特别指定columnar_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 | 否 | 自动生成列存快照点的时间间隔,单位为分钟,取值范围如下:
说明 设置后,每过 |
示例
创建列存快照有以下4种方式:
在创建表的同时创建列存索引与列存快照:
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
语句为表创建列存索引与列存快照: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
语句,为表创建列存索引与列存快照: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" }';
为已有列存索引的表创建列存快照:
CALL polardbx.columnar_set_config(<cci_id>, 'type', 'snapshot');
说明其中
cci_id
为列存索引的ID,您可通过SHOW COLUMNAR STATUS
语句来查看列存索引的ID。更多信息,请参见SHOW COLUMNAR STATUS。
调整列存快照的属性
为指定的列存快照调整保留时间和自动生成快照点的时间间隔,示例如下:
-- 修改保留时间为10天 CALL polardbx.columnar_set_config(<cci_id>, 'snapshot_retention_days', 10); -- 修改为每隔 10 分钟生成一个快照点 CALL polardbx.columnar_set_config(<cci_id>, 'auto_gen_columnar_snapshot_interval', 10); -- 关闭自动生成快照点 CALL polardbx.columnar_set_config(<cci_id>, 'auto_gen_columnar_snapshot_interval', -1);
为列存快照的属性设置全局默认值,示例如下:
-- 修改全局默认的自动生成快照点的时间间隔为20分钟 CALL polardbx.columnar_set_config('auto_gen_columnar_snapshot_interval', 20); -- 修改全局默认的列存快照保留时间为7天 CALL polardbx.columnar_set_config('snapshot_retention_days', 7);
说明设置后,只对新建的列存快照生效,对已经创建的列存快照没有影响。
创建列存快照时,如果不显式设置
snapshot_retention_days
和auto_gen_columnar_snapshot_interval
的值,系统会使用这两个参数的全局配置作为该列存快照的属性。
删除列存快照
删除列存索引
DROP INDEX `seller_snapshot` ON t_order;
删除表
DROP TABLE t_order;
查看列存快照定义
您可以通过如下代码,查看列存快照的定义:
SHOW FULL CREATE TABLE t_order;