zabbix数据库分区

  ,在做zabbix的性能优化时,有时候在db的数据量比较大的时候,需要对表进行分区操作,这样可以在数据查询减少用时。并且由于使用了分区,我们可以自己实现历史数据的删除操作,这样就可以禁用zabbix的管家功能。
简单的说下再内核版本的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   null

zabbix数据库分区