zabbix mysql 8g优化_zabbix mysql调优

本文介绍了如何对 Zabbix MySQL 数据库进行优化,特别是针对8GB以上数据的处理。通过查看数据库表大小,转换分区表以及创建和删除分区的脚本,实现了对历史数据的有效管理。此外,提供了将这些操作自动化执行的CRONTAB配置。
摘要由CSDN通过智能技术生成

SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" FROM information_schema.TABLES WHERE table_schema = 'zabbix' ORDER BY (data_length + index_length) DESC limit 10; (查看 mysql数据库表大小)

一 、转换分区表ALTER TABLE history PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

ALTER TABLE history_log PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

ALTER TABLE history_str PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

ALTER TABLE history_text PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

ALTER TABLE history_uint PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

ALTER TABLE trends PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

ALTER TABLE trends_uint PARTITION BY range( clock) (PARTITION P20160301 VALUES LESS THAN (UNIX_TIMESTAMP('2016-03-01')));

二、执行脚本DELIMITER //

DROP PROCEDURE IF EXISTS `zabbix`.`create_zabbix_partitions` //

CREATE PROCEDURE `zabbix`.`create_zabbix_partitions` ()

BEGIN

CALL zabbix.create_next_partitions("zabbix","history");

CALL zabbix.create_next_partitions("zabbix","history_log");

CALL zabbix.create_next_partitions("zabbix","history_str");

CALL zabbix.create_next_partitions("zabbix","history_text");

CALL zabbix.create_next_partitions("zabbix","history_uint");

CALL zabbix.create_next_partitions("zabbix","trends");

CALL zabbix.create_next_partitions("zabbix","trends_uint");

CALL zabbix.drop_old_partitions("zabbix","history");

CALL zabbix.drop_old_partitions("zabbix","history_log");

CALL zabbix.drop_old_partitions("zabbix","history_str");

CALL zabbix.drop_old_partitions("zabbix","history_text");

CALL zabbix.drop_old_partitions("zabbix","history_uint");

CALL zabbix.drop_old_partitions("zabbix","trends");

CALL zabbix.drop_old_partitions("zabbix","trends_uint");

END //

DROP PROCEDURE IF EXISTS `zabbix`.`create_next_partitions` //

CREATE PROCEDURE `zabbix`.`create_next_partitions` (SCHEMANAME varchar(64), TABLENAME varchar(64))

BEGIN

DECLARE NEXTCLOCK timestamp;

DECLARE PARTITIONNAME varchar(16);

DECLARE CLOCK int;

SET @totaldays = 7;

SET @i = 1;

createloop: LOOP

SET NEXTCLOCK = DATE_ADD(NOW(),INTERVAL @i DAY);

SET PARTITIONNAME = DATE_FORMAT( NEXTCLOCK, 'p%Y%m%d' );

SET CLOCK = UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD( NEXTCLOCK ,INTERVAL 1 DAY),'%Y-%m-%d 00:00:00'));

CALL zabbix.create_partition( SCHEMANAME, TABLENAME, PARTITIONNAME, CLOCK );

SET @i=@i+1;

IF @i > @totaldays THEN

LEAVE createloop;

END IF;

END LOOP;

END //

DROP PROCEDURE IF EXISTS `zabbix`.`drop_old_partitions` //

CREATE PROCEDURE `zabbix`.`drop_old_partitions` (SCHEMANAME varchar(64), TABLENAME varchar(64))

BEGIN

DECLARE OLDCLOCK timestamp;

DECLARE PARTITIONNAME varchar(16);

DECLARE CLOCK int;

SET @mindays = 30;

SET @maxdays = @mindays+4;

SET @i = @maxdays;

droploop: LOOP

SET OLDCLOCK = DATE_SUB(NOW(),INTERVAL @i DAY);

SET PARTITIONNAME = DATE_FORMAT( OLDCLOCK, 'p%Y%m%d' );

CALL zabbix.drop_partition( SCHEMANAME, TABLENAME, PARTITIONNAME );

SET @i=@i-1;

IF @i <= @mindays THEN

LEAVE droploop;

END IF;

END LOOP;

END //

DROP PROCEDURE IF EXISTS `zabbix`.`create_partition` //

CREATE PROCEDURE `zabbix`.`create_partition` (SCHEMANAME varchar(64), TABLENAME varchar(64), PARTITIONNAME varchar(64), CLOCK int)

BEGIN

DECLARE RETROWS int;

SELECT COUNT(1) INTO RETROWS

FROM `information_schema`.`partitions`

WHERE `table_schema` = SCHEMANAME AND `table_name` = TABLENAME AND `partition_name` = PARTITIONNAME;

IF RETROWS = 0 THEN

SELECT CONCAT( "create_partition(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ",", CLOCK, ")" ) AS msg;

SET @sql = CONCAT( 'ALTER TABLE `', SCHEMANAME, '`.`', TABLENAME, '`',

' ADD PARTITION (PARTITION ', PARTITIONNAME, ' VALUES LESS THAN (', CLOCK, '));' );

PREPARE STMT FROM @sql;

EXECUTE STMT;

DEALLOCATE PREPARE STMT;

END IF;

END //

DROP PROCEDURE IF EXISTS `zabbix`.`drop_partition` //

CREATE PROCEDURE `zabbix`.`drop_partition` (SCHEMANAME varchar(64), TABLENAME varchar(64), PARTITIONNAME varchar(64))

BEGIN

DECLARE RETROWS int;

SELECT COUNT(1) INTO RETROWS

FROM `information_schema`.`partitions`

WHERE `table_schema` = SCHEMANAME AND `table_name` = TABLENAME AND `partition_name` = PARTITIONNAME;

IF RETROWS = 1 THEN

SELECT CONCAT( "drop_partition(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ")" ) AS msg;

SET @sql = CONCAT( 'ALTER TABLE `', SCHEMANAME, '`.`', TABLENAME, '`',

' DROP PARTITION ', PARTITIONNAME, ';' );

PREPARE STMT FROM @sql;

EXECUTE STMT;

DEALLOCATE PREPARE STMT;

END IF;

END //

DELIMITER ;

将上面代码保存partition.sql 文件中

执行

/apps/mysql/bin/mysql -uroot -pPass@word zabbix 

/apps/mysql/bin/mysql -B zabbix -uroot -pPass@word -e "CALL create_zabbix_partitions();"

三、加入 crontab

30 23 * * * /apps/mysql/bin/mysql -uroot -pPass@word zabbix 

59 23 * * * /apps/mysql/bin/mysql -B zabbix -uroot -pPass@word -e "CALL create_zabbix_partitions();"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值