实践教程之使用PolarDB-X进行冷热数据归档

PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。

本期实验将指导您如何进行PolarDB-X冷热数据归档

本期免费实验地址

本期教学视频地址

前置准备

假设已经根据前一讲内容完成了PolarDB-X的搭建部署,使用PolarDB-X Operator安装PolarDB-X,并且可以成功链接上PolarDB-X数据库。

实践教程之如何快速安装部署PolarDB-X

连接PolarDB-X集群并创建冷数据local_disk冷数据源

  1. 执行如下命令,查看PolarDB-X集群端口。
kubectl get svc -l polardbx/name=polardb-x,polardbx/cn-type=rw -o jsonpath="{.items[0].spec.ports[0].nodePort}" | xargs echo "NodePort:"

返回结果如下,您可以查看到PolarDB-X集群端口

2. 执行如下命令,查看PolarDB-X集群地址。

kubectl get pods -l polardbx/name=polardb-x,polardbx/role=cn -o jsonpath="{range .items[*]}{.status.hostIP}{'\n'}{end}" | xargs echo "HostIP:"

返回结果如下,您可以查看到PolarDB-X集群地址

3. 执行如下命令,查看PolarDB-X集群登录密码。

kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "

返回结果如下,您可以查看到PolarDB-X集群登录密码

4. 执行如下命令,使用MySQL客户端连接PolarDB-X。验证连接成功。

说明:您需要将命令中的<集群地址>、<端口地址>和<登录密码>替换为从前三步骤获得的信息。

mysql -h<集群地址> -P<集群端口> -upolardbx_root -p<登录密码>

5. 执行如下命令,创建local_disk冷数据源

create filestorage local_disk with ('file_uri' ='file:///tmp/orc/');

6. 查看冷数据源

show filestorage;

安装Benchmark-Boot平台

1.在Web Terminal中,单击击右上角加号按钮打开新终端。

2. 在新终端中,使用root账户,在/root目录下,执行如下命令,安装Benchmark-Boot压测平台。

bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"

说明:

  • 其他部署安装方式可参考官方文档:https://doc.polardbx.com/tools/topics/benchmark-boot.html
  • 在正式测试环境下,压测机应与数据库实例独立部署,避免资源争抢;且压测机应与数据库实例在同一个内网中,避免网络成为性能瓶颈。

3. Benchmark-Boot压测平台安装完成之后,执行如下的curl命令。

curl -X GET "http://127.0.0.1:4121/config/database" -H "accept: */*"

返回结果如下,表示Benchmark-Boot压测平台安装成功。

4. 在实验室页面左侧的云产品资源列表中,找到实验室提供的ECS服务器的弹性IP。

5. 在实验室页面右侧功能栏中,单击

图标,切换至远程桌面。在远程桌面双击Chromium网页浏览器,在地址栏中输入并访问http://<ECS弹性IP地址>,跳转到Benchmark Boot 平台首页。

压测平台配置数据库连接

本章节操作均在 Benchmark-Boot 平台端通过白屏化操作完成。

1.配置数据库连接。

在左侧导航栏进入运行压测-数据库连接面板,在配置数据库连接表格中填入以下信息,然后单击提交

  • 目标数据库的ip地址:输入在第3节连接PolarDB-X集群中获取的密码。
  • 端口:输入在第3节连接PolarDB-X集群中获取的密码。
  • 用户名:默认为polardbx_root。
  • 密码:输入在第3节连接PolarDB-X集群中获取的密码。
  • Sysbench库名:库名设置为sysbench,建库模式为AUTO。

2. 提交配置后,平台将自动校验数据库是否可以连通,并自动创建对应压测数据库,页面会自动刷新并展示当前连接数据库信息。

压测平台运行冷数据Sysbench

本章节操作由Benchmark-Boot 平台端搭配命令行完成。

1.导入Sysbench。

在左侧导航栏进入运行压测-Sysbench面板,在导入Sysbench表格中填入以下信息,单击提交

  • 表数量:本实验设置为4。
  • 单表大小:本实验设置为100000。
  • 并发数:本实验设置为1。

说明:请参考当前PolarDB-X实例的规格,选择合适的表数量和并发数,实验中的配置为4张表,单表大小为100000,并发数为1。

2. 提交导入任务后,可跳转到实时数据-Sysbench面板,查看导入数据过程。当出现Task has finished, exiting...时,表示导入完成。

3. 导入完毕后,切换至终端,使用命令行连接PolarDB-X。执行如下命令,创建冷数据表并进行数据归档。

create database sysbench_cold mode = 'auto'; use sysbench_cold; create table sbtest1 like sysbench.sbtest1 engine='local_disk' archive_mode='loading'; create table sbtest2 like sysbench.sbtest2 engine='local_disk' archive_mode='loading'; create table sbtest3 like sysbench.sbtest3 engine='local_disk' archive_mode='loading'; create table sbtest4 like sysbench.sbtest4 engine='local_disk' archive_mode='loading';

4. 回到运行压测-Sysbench面板中,单击切换库并将库切换为sysbench_cold

5.单击校验数据,校验Sysbench冷数据。

6. 运行Sysbench。

6.1 进入运行压测-Sysbench面板,在运行Sysbench表格中填入以下信息,然后单击提交

  • 表数量:本实验设置为4。
  • 单表大小:本实验设置为100000。
  • 并发数:可根据负载类型选择合适并发数。本实验设置为4。
  • 运行时长:单位为秒。本实验设置为60。
  • 负载类型:冷数据只支持oltp_point_select和oltp_read_only。本实验设置为oltp_read_only。
  • 任务描述:有意义的一段压测描述记录,方便后续结果查看与汇总。本实验设置为sysbench_cold。

说明:实验中的配置为4张表,单表大小为100000,并发数为4,运行时长60,负载类型oltp_read_only,任务描述sysbench_cold。

6.2 在压测Sysbench过程中,暂不支持并行启动任务。

7. 查看Sysbench压测结果。

进入压测结果-Sysbench面板,可以列表的形式查看历史任务。

冷数据表AP查询

本章节操作完全在命令行中完成。

1.切换至终端。执行如下命令,收集统计信息。

use sysbench;
analyze table sbtest1;
analyze table sbtest2;
analyze table sbtest3;
analyze table sbtest4;
use sysbench_cold;
analyze table sbtest1;
analyze table sbtest2;
analyze table sbtest3;
analyze table sbtest4;
collect statistic;

2. 执行如下命令,查看执行计划。

explain select count(distinct sbtest1.id) from sbtest1 join sbtest2 on sbtest1.id=sbtest2.k;

3. 执行如下命令,查询数据。

select count(distinct sbtest1.id) from sbtest1 join sbtest2 on sbtest1.id=sbtest2.k;

4. 执行如下命令,冷数据表与InnoDB表关联查询的执行计划。

explain select count(distinct sbtest1.id) from sbtest1 join sysbench.sbtest2 on sbtest1.id=sbtest2.k;

5. 执行如下命令,查询数据。

select count(distinct sbtest1.id) from sbtest1 join sysbench.sbtest2 on sbtest1.id=sbtest2.k;

TTL自动归档

本章节操作完全在命令行中完成。

1.执行如下命令,创建TTL表t_order,从6月1日开始,分区间隔是1个月,数据2个月后过期。

create database ttl mode = 'auto';
use ttl;
CREATE TABLE t_order (
    id bigint NOT NULL AUTO_INCREMENT,
    gmt_modified DATETIME NOT NULL,
    c_varchar_1 varchar(50) DEFAULT NULL,
    c_varchar_2 varchar(50) character set gbk DEFAULT NULL,
    c_bigint_1 bigint DEFAULT NULL,
    c_bigint_2 bigint DEFAULT NULL,
    c_decimal_1 decimal(20,5) DEFAULT NULL,
    PRIMARY KEY (id, gmt_modified)
) partition by key(id) partitions 8
LOCAL PARTITION BY RANGE (gmt_modified)
STARTWITH '2022-06-01'
INTERVAL 1 MONTH
EXPIRE AFTER 2
PRE ALLOCATE 5;

2. 执行如下命令,往t_order导入数据1408行数据。

insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1)
values 
('2022-05-02 10:00:00', 'ddddabc', '&&&', 1, 999, 636.8888),
('2022-06-02 10:00:00', 'abc', '&&&', 1, 999, 66.8888),
('2022-07-02 10:00:00', '12d', '&&&', 2, 999, 15.3421),
('2022-08-02 10:00:00', 'fda89', '&&&', 3, 999, 89497832.8888),
('2022-09-02 10:00:00', 'asd98asf', '&&&', 4, 999, 48192523195.8888),
('2022-10-02 10:00:00', 'acdsn', '&&&', 5, 999, 6.8888),
('2022-11-02 10:00:00', 'xhuo', '&&&', 6, 999, 432.8888),
('2022-12-02 10:00:00', '0ab0c-xfa', '&&&', 7, 9887, 66.8888),
('2023-01-02 10:00:00', 'xa', '&&&', 8, 999, 8492138423.8888),
('2023-02-02 10:00:00', '90xzbyq=', '&&&', 9, 999, 43.8888),
('2023-03-02 10:00:00', 'fa89fa9dfadf', '&&&', 9, 999, 435.8888);

insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;
insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;
insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;
insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;
insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;
insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;
insert into t_order (gmt_modified, c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1) select TIMESTAMPADD(MONTH, (id + 300) % 12, '2022-05-02 10:00:00'), c_varchar_1, c_varchar_2, c_bigint_1, c_bigint_2, c_decimal_1 from t_order limit 1000;

3. 执行如下命令,查看t_order的时间分区和数据分布。

select * from information_schema.local_partitions where table_schema='ttl' and table_name="t_order";
select count(*),DATE_FORMAT(gmt_modified,'%Y-%m-%d') as year_month_day from t_order group by gmt_modified order by gmt_modified;

其中local_partition p20220601、p20220701、p20220801、p20220901都是过期数据,会在运维窗口(凌晨1点到5点)内自动过期。

4. 执行如下命令,绑定冷数据表t_order_oss并查看。

create table t_order_oss like t_order engine = 'local_disk' archive_mode = 'TTL'; show tables;

5. 执行如下命令,手动过期t_order的分区 p20220601。

alter table t_order expire local partition p20220601;

6. 执行如下命令,查看数据分布,p20220601中的5月份数据被归档至冷数据表t_order_oss中。

select count(*),DATE_FORMAT(gmt_modified,'%Y-%m-%d') as year_month_day from t_order group by gmt_modified order by gmt_modified;
select count(*),DATE_FORMAT(gmt_modified,'%Y-%m-%d') as year_month_day from t_order_oss group by gmt_modified order by gmt_modified;

接下来采用手动触发的方式模拟自动过期冷数据。

7. 执行如下命令,修改定时任务自动终止时间为23:59,定时任务默认在凌晨5点后不会无法调度,修改参数至23:59解除这个限制。

set global BACKGROUND_TTL_EXPIRE_END_TIME="23:59";

8. 执行如下命令,获取定时任务id SCHEDULE_ID,例子中的SCHEDULE_ID为5,后面两步需要用到这个值。

SELECT * FROM INFORMATION_SCHEMA.LOCAL_PARTITIONS_SCHEDULE;

9. 执行如下命令,触发定时任务。

fire schedule {SCHEDULE_ID};

10. 执行如下命令,查看定时任务状态。

show schedule result {SCHEDULE_ID};

等待定时任务调度完成(至多需等待一分钟),STATE由QUEUED变为SUCCESS即归档完成。

11. 执行如下命令,再次查看数据分布,过期数据均被自动归档至冷数据表中。

select count(*),DATE_FORMAT(gmt_modified,'%Y-%m-%d') as year_month_day from t_order group by gmt_modified order by gmt_modified;
select count(*),DATE_FORMAT(gmt_modified,'%Y-%m-%d') as year_month_day from t_order_oss group by gmt_modified order by gmt_modified;

12. 执行如下命令,查看TTL的时间分区。

select * from information_schema.local_partitions where table_schema='ttl' and table_name="t_order";

所有过期分区均不在原表t_order中,下个分区p20221001到2022-12-01才会过期。


云原生数据库PolarDB分布式(PolarDB-X)大降价,价格下调40%,最低至0.75元/小时。
阿里巴巴双十一同款数据库,原生MySQL生态,基于Paxos三副本确保RPO=0,支持集中式和分布式一体化。
点击下方链接,立即购买

购买PolarDB-X

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值