利用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>
相关文章
|
存储 分布式计算 负载均衡
Hadoop数据块分散存储与副本创建
【4月更文挑战第15天】Hadoop是一个用于大数据处理的分布式框架,其核心特性包括数据块的分散存储和副本创建。数据块默认为128MB,存储在不同DataNode上,由NameNode管理元数据。每个数据块通常有3个副本,分置于不同节点,确保容错性和可靠性。当节点故障时,Hadoop能自动恢复并根据负载平衡副本位置。这种设计优化了计算资源利用,实现并行处理和高可用性。
379 3
|
存储 数据库 C语言
Hawkeyes: x86软件迁移Arm的弱内存序问题解决方案
本文介绍了x86软件迁移到Arm过程中可能遇到的弱内存序问题的解决方案,解析了弱内存序问题的根因,介绍了Hawkeyes的架构和实现原理。欢迎有需求的团队发送邮件咨询
2386 0
|
算法 Java 程序员
Java程序员快速提升技能的6个技巧
知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰。达妹今天为大家分享Java程序员学习的6个小技巧。 1一定要看书 现在学习Java变得比以前容易多了,除了有大量的视频教程外,还有专业的java培训机构,这都使学习变得更加傻瓜化,然而我要说的是,Java虽然变得越来越容易学,然而那只代表入门容易,并不代表这门编程技术就真的变简单了。
4834 0
|
网络协议 网络安全 数据库
通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库
原文: 通过配置Windows 防火墙允许使用TCP/IP协议远程访问数据库 本文适用于:2005、2008、2008R2所有版本 为了可以通过TCP/IP协议远程访问SQLServer数据库,需要做以下几点: 在SQLServer所运行的服务器上,我们必须找到SQLServer所侦听的端口然后添加到WIndows防火墙的【允许入站】中。
1799 0
|
SQL Oracle 关系型数据库
ORA-02409:超时:分布式事务处理等待锁定ORA-02063
ORA-02409:超时:分布式事务处理等待锁定ORA-02063一、错误现象与环境     前端应用程序运行时出现下面的错误提示:         事件添加失败:ORA-02409;超时:分布式事务处理等待锁定         ORA-02063:紧接着line(源于ITSPFDB.
1682 0
|
8天前
|
数据采集 人工智能 安全