,在做zabbix的性能优化时,有时候在db的数据量比较大的时候,需要对表进行分区操作,这样可以在数据查询减少用时。并且由于使用了分区,我们可以自己实现历史数据的删除操作,这样就可以禁用zabbix的管家功能。
简单的说下再内核版本的zabbix中进行分区的操作:1。备份数据,如果使用代理的结构的话,调整ProxyOfflineBuffer,加大数据在线下情况的缓存时间,这样在分区调整完后数据会自动补充。
简单的说下再内核版本的zabbix中进行分区的操作:1。备份数据,如果使用代理的结构的话,调整ProxyOfflineBuffer,加大数据在线下情况的缓存时间,这样在分区调整完后数据会自动补充。
确定需要分区的表,并更改表结构(使用钟进行parttition,分区键必须是primarykey的一部分),涉及的表主要是存储历史相关数据的表:历史,history_uint, history_text, history_log, history_str
表结构更改:
ALTER TABLE history_log删除主键,添加主键(“itemid”、“id”,“时钟”); 改变表的history_log下降键“history_log_2”; ALTER TABLE history_text删除主键,添加主键(“itemid”、“id”,“时钟”); 改变表的history_text下降键“history_text_2”;
例子:
mysql - u xxx -pxxx xxx & lt;/分区。sql
分隔符 下降过程中如果存在“zabbix_server”。//癱reate_zabbix_partitions” 创建过程“zabbix_server”。“create_zabbix_partitions”() 开始 叫zabbix_server.create_next_partitions (“zabbix_server”、“历史”); 调用zabbix_server.create_next_partitions (“zabbix_server”、“history_log”); 调用zabbix_server.create_next_partitions (“zabbix_server”、“history_str”); 调用zabbix_server.create_next_partitions (“zabbix_server”、“history_text”); 调用zabbix_server.create_next_partitions (“zabbix_server”、“history_uint”); 叫zabbix_server.drop_old_partitions (“zabbix_server”、“历史”); 调用zabbix_server.drop_old_partitions (“zabbix_server”、“history_log”); 调用zabbix_server.drop_old_partitions (“zabbix_server”、“history_str”); 调用zabbix_server.drop_old_partitions (“zabbix_server”、“history_text”); 调用zabbix_server.drop_old_partitions (“zabbix_server”、“history_uint”);//结束 下降过程中如果存在“zabbix_server”。//癱reate_next_partitions” 创建过程“zabbix_server”。“create_next_partitions”(SCHEMANAME varchar(64),表名varchar (64)) 开始 声明NEXTCLOCK时间戳; 声明PARTITIONNAME varchar (16); 声明时钟int; 设置@totaldays=7; 设置@i=1; createloop:循环 设置NEXTCLOCK=DATE_ADD(现在(),间隔@i天); 设置PARTITIONNAME=DATE_FORMAT (NEXTCLOCK ' p % Y % m % d '); 设置时钟=UNIX_TIMESTAMP (DATE_FORMAT (DATE_ADD (NEXTCLOCK,间隔1天),Y ' % - % - % d就是')); zabbix_server打电话。PARTITIONNAME create_partition (SCHEMANAME,表名,时钟); 设置@i=@i + 1; 如果@i比;@totaldays然后 离开createloop; 如果; 结束循环;//结束 下降过程中如果存在“zabbix_server”。//癲rop_old_partitions” 创建过程“zabbix_server”。“drop_old_partitions”(SCHEMANAME varchar(64),表名varchar (64)) 开始 声明OLDCLOCK时间戳; 声明PARTITIONNAME varchar (16); 声明时钟int; 设置@mindays=30; 设置@maxdays=@mindays + 4; 设置@i=@maxdays; droploop:循环 设置OLDCLOCK=DATE_SUB(现在(),间隔@i天); 设置PARTITIONNAME=DATE_FORMAT (OLDCLOCK ' p % Y % m % d '); zabbix_server打电话。drop_partition (SCHEMANAME、表名、PARTITIONNAME); 设置@i=@i-1; 如果@i & lt;=@mindays 离开droploop; 如果; 结束循环;//结束 下降过程中如果存在“zabbix_server”。//癱reate_partition” 创建过程“zabbix_server”。“create_partition”(SCHEMANAME varchar(64),表名varchar (64), PARTITIONNAME varchar(64),时钟int) 开始 声明RETROWS int; (1)成RETROWS选择计数 从“information_schema”。“分区” “table_schema”=SCHEMANAME和“table_name”=表名和“partition_name”=PARTITIONNAME; 如果RETROWS=0 选择CONCAT (“create_partition (“SCHEMANAME,”,“表”,,“PARTITIONNAME,”,“时钟,”)”作为味精); 设置@sql=CONCAT (ALTER TABLE”, SCHEMANAME, ' '。”,’”,表 “添加分区(分区”,PARTITIONNAME值小于(',时钟,'));'); 准备从@sql支撑; 执行支撑; 释放准备支撑; 如果;//结束 下降过程中如果存在“zabbix_server”。//癲rop_partition” 创建过程“zabbix_server”。“drop_partition”(SCHEMANAME varchar(64),表名varchar (64), PARTITIONNAME varchar (64)) 开始 声明RETROWS int; (1)成RETROWS选择计数 从“information_schema”。“分区” “table_schema”=SCHEMANAME和“table_name”=表名和“partition_name”=PARTITIONNAME; 如果RETROWS=1 选择CONCAT (“drop_partition (“SCHEMANAME,”,“表”,,“PARTITIONNAME,”)”作为味精); 设置@sql=CONCAT (ALTER TABLE”, SCHEMANAME, ' '。”,’”,表 “删除分区”,PARTITIONNAME '。'); 准备从@sql支撑; 执行支撑; 释放准备支撑; 如果;//结束 null null null null null null null null null null null null null null null null null null nullzabbix数据库分区