PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。
本期实验将指导您如何进行PolarDB-X冷热数据归档
1. 前置准备
假设已经根据前一讲内容完成了PolarDB-X的搭建部署,使用PolarDB-X Operator安装PolarDB-X,并且可以成功链接上PolarDB-X数据库。
2. 连接PolarDB-X集群并创建冷数据local_disk冷数据源
2.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.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集群地址
2.3 执行如下命令,查看PolarDB-X集群登录密码。
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
返回结果如下,您可以查看到PolarDB-X集群登录密码
2.4 执行如下命令,使用MySQL客户端连接PolarDB-X。验证连接成功。
说明:您需要将命令中的<集群地址>、<端口地址>和<登录密码>替换为从前三步骤获得的信息。
mysql -h<集群地址> -P<集群端口> -upolardbx_root -p<登录密码>
2.5 执行如下命令,创建local_disk冷数据源。
create filestorage local_disk with ('file_uri' ='file:///tmp/orc/');
2.6 查看冷数据源。
show filestorage;
3. 安装Benchmark-Boot平台
3.1 在Web Terminal中,单击击右上角加号按钮打开新终端。
3.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.htmlopics/benchmark-boot.html。
- 在正式测试环境下,压测机应与数据库实例独立部署,避免资源争抢;且压测机应与数据库实例在同一个内网中,避免网络成为性能瓶颈。
3.3 Benchmark-Boot压测平台安装完成之后,执行如下的curl命令。
curl -X GET "http://127.0.0.1:4121/config/database" -H "accept: */*"
返回结果如下,表示Benchmark-Boot压测平台安装成功。
3.4 在实验室页面左侧的云产品资源列表中,找到实验室提供的ECS服务器的弹性IP。
3.5 在实验室页面右侧功能栏中,单击图标,切换至远程桌面。在远程桌面双击Chromium网页浏览器,在地址栏中输入并访问http://,跳转到Benchmark Boot 平台首页。
4. 压测平台配置数据库连接
本章节操作均在 Benchmark-Boot 平台端通过白屏化操作完成。
4.1 配置数据库连接
在左侧导航栏进入运行压测-数据库连接面板,在配置数据库连接表格中填入以下信息,然后单击提交。
- 目标数据库的ip地址:输入在第3节连接PolarDB-X集群中获取的密码。
- 端口:输入在第3节连接PolarDB-X集群中获取的密码。
- 用户名:默认为polardbx_root。
- 密码:输入在第3节连接PolarDB-X集群中获取的密码。
- Sysbench库名:库名设置为sysbench,建库模式为AUTO。
4.2 提交配置后,平台将自动校验数据库是否可以连通,并自动创建对应压测数据库,页面会自动刷新并展示当前连接数据库信息。
5. 压测平台运行冷数据Sysbench
本章节操作由Benchmark-Boot 平台端搭配命令行完成。
5.1 导入Sysbench。
在左侧导航栏进入运行压测-Sysbench面板,在导入Sysbench表格中填入以下信息,单击提交。
- 表数量:本实验设置为4。
- 单表大小:本实验设置为100000。
- 并发数:本实验设置为1。
说明:请参考当前PolarDB-X实例的规格,选择合适的表数量和并发数,实验中的配置为4张表,单表大小为100000,并发数为1。
5.2 提交导入任务后,可跳转到实时数据-Sysbench面板,查看导入数据过程。当出现Task has finished, exiting...时,表示导入完成。
5.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';
5.4 回到运行压测-Sysbench面板中,单击切换库并将库切换为sysbench_cold。
5.5 单击校验数据,校验Sysbench冷数据。
5.6 运行Sysbench。
5.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。
5.6.2 在压测Sysbench过程中,暂不支持并行启动任务。
7. 查看Sysbench压测结果。
进入压测结果-Sysbench面板,可以列表的形式查看历史任务。
7. 冷数据表AP查询
本章节操作完全在命令行中完成。
7.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;
7.2 执行如下命令,查看执行计划。
explain select count(distinct sbtest1.id) from sbtest1 join sbtest2 on sbtest1.id=sbtest2.k;
7.3 执行如下命令,查询数据。
select count(distinct sbtest1.id) from sbtest1 join sbtest2 on sbtest1.id=sbtest2.k;
7.4 执行如下命令,冷数据表与InnoDB表关联查询的执行计划。
explain select count(distinct sbtest1.id) from sbtest1 join sysbench.sbtest2 on sbtest1.id=sbtest2.k;
7.5 执行如下命令,查询数据。
select count(distinct sbtest1.id) from sbtest1 join sysbench.sbtest2 on sbtest1.id=sbtest2.k;
8. TTL自动归档
本章节操作完全在命令行中完成。
8.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;
8.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;
8.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点)内自动过期。
8.4 执行如下命令,绑定冷数据表t_order_oss并查看。
create table t_order_oss like t_order engine = 'local_disk' archive_mode = 'TTL'; show tables;
8.5 执行如下命令,手动过期t_order的分区 p20220601。
alter table t_order expire local partition p20220601;
8.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;
接下来采用手动触发的方式模拟自动过期冷数据。
8.7 执行如下命令,修改定时任务自动终止时间为23:59,定时任务默认在凌晨5点后不会无法调度,修改参数至23:59解除这个限制。
set global BACKGROUND_TTL_EXPIRE_END_TIME="23:59";
8.8 执行如下命令,获取定时任务id SCHEDULE_ID,例子中的SCHEDULE_ID为5,后面两步需要用到这个值。
SELECT * FROM INFORMATION_SCHEMA.LOCAL_PARTITIONS_SCHEDULE;
8.9 执行如下命令,触发定时任务。
fire schedule {SCHEDULE_ID};
8.10 执行如下命令,查看定时任务状态。
show schedule result {SCHEDULE_ID};
等待定时任务调度完成(至多需等待一分钟),STATE由QUEUED变为SUCCESS即归档完成。
8.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;
8.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,支持集中式和分布式一体化。
点击下方链接,立即购买