zabbix 5.0 数据库分表
要做zabbix 数据库分表,首先要弄清楚为什么要分表:1. housekeep 太坑,清除历史数据会大量消耗数据库性能,而分表后直接删除当天的表文件即可。2. 加快查询效率,我这边查数据一般是查前一天或者前一个月的数据,如果我以天分表,那我查询前一天的数据时会加快查询效率
什么时候分表:
分表一般都要清空历史数据,所以越早分表越好
分表前准备工作:
要分表必须要理解zabbix的表结构,和哪些表需要分表。
常用表如下:
history : 存储浮点数数据比如ping丢包,CPU使用率等 00.00 类似的数据. (这个是根据采集时间,我准备设置的是1min采集一次)
history_uint: 整数型数据 ,比如流量数据,状态码等等 (这个是根据采集时间,我准备设置的是1min采集一次)
趋势数据存储表:
trend: 与history类似,只不过是一个小时取一个点
trend_unit :与history——uint类似,只不过是一个小时取一个点
我介绍一个我的规划:
我这边大部分是监控交换机数据:
一般探活数据都是 ping ,这个属于浮点数, 所以我计划是每一天进行history分表,每次分14张表,超过33天的数据就清除掉,而trend表我这边是1个月分一张表,超过13个月清除
流量数据我们这边要计费的,属于整数型,所以保留时间长一点。history_uint,每次分14张表,保留时间 368天。
分表脚本见图:
其中需要修改的地方
CALL partition_maintenance(SCHEMA_NAME, 'history', 33, 24, 14);
CALL partition_maintenance(SCHEMA_NAME, 'history_log', 33, 24, 14);
CALL partition_maintenance(SCHEMA_NAME, 'history_str', 33, 24, 14);
CALL partition_maintenance(SCHEMA_NAME, 'history_text', 33, 24, 14);
CALL partition_maintenance(SCHEMA_NAME, 'history_uint', 367, 24, 14);
CALL partition_maintenance(SCHEMA_NAME, 'trends', 368, 720, 12);
CALL partition_maintenance(SCHEMA_NAME, 'trends_uint', 368, 168, 12);
举例:
('history', 33, 24, 14);
history :标明
33:历史数据保留时间单位天
24:每多长时间分表单位小时
14:每次运行脚本分多少张表 单位张
修改好后 mysql -u zabbix -p zabbix < par.sql
然后手动运行:mysql-uzabbix -pPASSWORD zabbix -e"CALL partition_maintenance_all('zabbix')" &>/var/log/partition.log
然后进mysql的目录下,我这边是/data/mysql/zabbix/
ls -alh
可以看到我这边就已经完成了分表,
然后写好crontab
01 01 * * */usr/bin/mysql-uzabbix -pPASSWORD zabbix -e"CALL partition_maintenance_all('zabbix')" &>/var/log/partition.log
OK
attach://803179.zip
分表脚本见这一楼
页:
[1]