应用场景
上一篇文章介绍的Zabbix数据表使用TokuDB引擎及分区表,同时需要每个月为这些表新建一个分区,及删除历史分区。由于MySQL不会自动新建及删除分区,所以需要额外创建一个定时任务,来进行表分区的管理。这里采用MySQL的event来做。
实现的思路是:定时任务每个月执行一次,在执行的时候,创建下个月的分区,及删除大于保留时长的历史分区,并将操作记录到log表里,便于查询历史操作记录。
DBA之路
上一篇文章介绍的Zabbix数据表使用TokuDB引擎及分区表,同时需要每个月为这些表新建一个分区,及删除历史分区。由于MySQL不会自动新建及删除分区,所以需要额外创建一个定时任务,来进行表分区的管理。这里采用MySQL的event来做。
实现的思路是:定时任务每个月执行一次,在执行的时候,创建下个月的分区,及删除大于保留时长的历史分区,并将操作记录到log表里,便于查询历史操作记录。
线上的Zabbix库的数据表默认使用的是InnoDB存储引擎,随着时间的增长,数据量和占用的存储空间越来越多,单表数据达到了3亿之多。同时,Zabbix的Housekeeping每次在定期清理历史数据时,执行时间都超过了1分多钟,严重影响数据库的性能。
TokuDB引擎的高压缩比、高INSERT性能,正好适用于Zabbix这种INSERT多、UPDATE少,而且数据量大的环境。所以准备把相关的数据表修改为TokuDB引擎。
对Zabbix数据表根据时间字段进行分区后,可以通过删除旧的分区,来达到快速清除历史数据的目的。而且,查询Zabbix最近的数据时,只需要查询单个或几个分区即可,而不需要访问整张表,这样查询性能也得到了提升。
测试环境:
在使用pt-table-checksum配置主从校验的时候,本地和生产环境都可以正常校验,而在测试环境校验的时候,却输出以下警告信息:1
2Cannot connect to h=192.168.0.18,p=...,u=pt_table_check
Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information.
pt-table-checksum无法连接从库。
由于没有发现从库,数据校验时无法实时检测从库与主库的数据是否一致(DIFFS
列始终为0
),需要通过--recursion-method
选项指定其他的方式来搜索、连接从库(此处--recursion-method
使用的是默认值processlist,hosts
)。