利用event为zabbix数据表定期添加和删除分区

简介: 利用event为zabbix数据表定期添加和删除分区

导读

利用MySQL的event来自动维护表分区。

我们去年就开始把zabbix数据库改成用TokuDB来支撑,并且启用了表分区(详情见:迁移Zabbix数据库到TokuDB)。这样做的好处很明显,较早的历史数据可以通过删除分区快速废弃掉。要知道,zabbix数据表默认是没有针对时间字段创建索引的,因此如果执行删除的SQL命令,其效率会很差,而直接删除分区就快多了。

先看history表的分区规则:

CREATE TABLE history (
  itemid bigint(20) unsigned NOT NULL,
  clock int(11) NOT NULL DEFAULT '0',
  value double(16,4) NOT NULL DEFAULT '0.0000',
  ns int(11) NOT NULL DEFAULT '0',
  KEY history_1 (itemid,clock)
) ENGINE=TokuDB DEFAULT CHARSET=utf8 ROW_FORMAT=TOKUDB_QUICKLZ
PARTITION BY RANGE (clock)
(PARTITION p20150531 VALUES LESS THAN (1433088000) ENGINE = TokuDB,
...
 PARTITION p20160411 VALUES LESS THAN (1460390400) ENGINE = TokuDB);

对这个表,我们每天要的是:创建一个新的分区,而后删除N个月前的历史旧分区。这个工作可以通过系统的cron来实施,也可以利用MySQL自身的event来做,在这里我们选择用event,没什么特殊的原因,只是想顺便尝试下event而已,呵呵。

一个定期调度的event写起来并不难,下面是参考样例,相信很快就能看明白:

delimiter $$$

drop event if exists zabbix_alter_aprtition_daily;
CREATE EVENT zabbix_alter_partition_daily
ON SCHEDULE EVERY 1 DAY -- 每天执行
DO
begin

-- 记日志
insert into zlogs select 0, now(), date_format(date_sub(now(), INTERVAL 180 DAY),
" ALTER TABLE history DROP PARTITION p%Y%m%d");

-- 删除history表180天前的旧分区
-- 用PREPARE & EXECUTE 准备和执行删除的SQL
SET @drop_p_stmt = date_format(date_sub(now(), INTERVAL 180 DAY)," ALTER TABLE history DROP PARTITION p%Y%m%d");
PREPARE drop_p_stmt FROM @drop_p_stmt;
EXECUTE drop_p_stmt;

-- 创建history表30天后的新分区
-- 记日志
insert into zlogs select 0, now(), concat(
date_format(date_add(now(), INTERVAL 180 DAY)," ALTER TABLE history ADD PARTITION ( PARTITION p%Y%m%d VALUES LESS THAN "),
"(",
unix_timestamp( date_add(date_format(now(), "%Y%m%d"), INTERVAL 31 DAY) ),
"))");

-- 用PREPARE & EXECUTE 准备和执行创建新分区的SQL
SET @add_p_stmt = concat(
date_format(date_add(now(), INTERVAL 30 DAY)," ALTER TABLE history ADD PARTITION ( PARTITION p%Y%m%d VALUES LESS THAN "),
"(",
unix_timestamp( date_add(date_format(now(), "%Y%m%d"), INTERVAL 31 DAY) ),
"))");

PREPARE add_p_stmt FROM @add_p_stmt;
EXECUTE add_p_stmt;

end $$$
delimiter ;
            </div>
相关文章
|
11月前
|
人工智能 算法 芯片
天天都在说的“算力”到底是个啥?一文全讲透!
算力是数字经济发展的重要支撑,尤其在AI和大数据应用中起着关键作用。阿里云致力于构建全球领先的算力基础设施,助力各行业数字化转型。吴泳铭和马云均强调了算力在未来科技竞争中的核心地位。2023年底,我国算力总规模达230EFLOPS,位居全球第二。算力分为通用、智能和超算算力,广泛应用于人工智能训练与推理等场景。中国正加速建设智算中心,推动算力产业链发展,并注重绿色低碳和智能运维,以应对日益增长的计算需求。
17460 19
|
Linux
Linux通过QQ邮箱账号使用mailx发送邮件
Linux通过QQ邮箱账号使用mailx发送邮件
635 2
|
监控 关系型数据库 MySQL
MySQL高可用MHA
MySQL高可用管理工具(MHA,Master High Availability)是一个用于自动管理MySQL主从复制的工具,它可以提供高可用性和自动故障转移。MHA由原版的MHA工具和MHA Manager组成,它们协同工作以实现自动主从切换和监控。
873 0
|
消息中间件 存储 监控
Kafka 消息保留时长由 24 小时变更为 72 小时的影响分析
Kafka 消息保留时长由 24 小时变更为 72 小时的影响分析
1198 0
|
关系型数据库 网络安全 数据库
通过SSH登录OceanBase数据库需要修改用户密码,然后使用SSH客户端进行远程登录
通过SSH登录OceanBase数据库需要修改用户密码,然后使用SSH客户端进行远程登录
689 6
|
NoSQL Redis
redis cluster 手动切换主从
redis cluster 手动切换主从
329 1
|
存储 NoSQL Redis
Redis集群部署指南
本章是基于CentOS7下的Redis集群教程,包括: ● 单机安装Redis ● Redis主从 ● Redis分片集群
|
SQL 存储 关系型数据库
MySQL8.0之执行计划
MySQL8.0.17 执行计划
2833 0
|
Prometheus 数据可视化 Cloud Native
Grafana【部署 02】可视化工具 Grafana 9 最新版下载安装配置及使用(新特性体验)
Grafana【部署 02】可视化工具 Grafana 9 最新版下载安装配置及使用(新特性体验)
666 0
|
关系型数据库 MySQL 安全