Zabbix的events页面非常慢且消耗大量资源

来源:互联网 发布:程序员转行能干什么 编辑:程序博客网 时间:2024/06/03 01:41

Zabbix的events页面非常慢且消耗大量资源

Zabbix的events页面非常慢且消耗大量资源
问题描述
环境 CentOS5? Zabbix-1.4.2 MySQL? 5.1
Zabbix 正常运行了很久之后,突然有一天打开events.php页面,页面非常慢,刷新了几次,结果发现系统负载冲到10以上,差点死掉。

解决过程
经过调查,出现问题的时候,系统的监控表明数据库的slow log剧增,基本上判断是这个页面中有比较慢的查询所致。
进一步检查,slow log中有很多形如下面这样的SQL
# Time: 081203 6:35:12
# User@Host: zabbix[zabbix] @ [127.0.0.1]
# Query_time: 3 Lock_time: 0 Rows_sent: 2 Rows_examined: 1913303
SELECT MAX(clock) as clock, value FROM events WHERE objectid=12778 AND value<>2 AND clock < 1227976533 GROUP BY value ORDER BY clock DESC;# Time: 081203 6:40:03# User@Host: zabbix[zabbix] @ [127.0.0.1]# Query_time: 3 Lock_time: 0 Rows_sent: 2 Rows_examined: 1913312SELECT MAX(clock) as clock, value FROM events WHERE objectid=12778 AND value<>2 AND clock < 1227941133 GROUP BY value ORDER BY clock DESC;手动在mysql命令行下执行这样一句命令,耗时2s-4s不等,但是毋庸置疑的是,这个查询很慢。接下来考虑如何优化。执行explain分析SQL# 首先是表定义信息和建表语句(含索引定义)mysql> desc events;
+————–+———————+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————–+———————+——+—–+———+——-+
| eventid | bigint(20) unsigned | NO | PRI | 0 | |
| source | int(11) | NO | | 0 | |
| object | int(11) | NO | MUL | 0 | |
| objectid | bigint(20) unsigned | NO | | 0 | |
| clock | int(11) | NO | MUL | 0 | |
| value | int(11) | NO | | 0 | |
| acknowledged | int(11) | NO | | 0 | |
+————–+———————+——+—–+———+——-+
7 rows in set (0.01 sec)

mysql> show create table eventsG
*************************** 1. row ***************************
Table: events
Create Table: CREATE TABLE `events` (
`eventid` bigint(20) unsigned NOT NULL default ‘0’,
`source` int(11) NOT NULL default ‘0’,
`object` int(11) NOT NULL default ‘0’,
`objectid` bigint(20) unsigned NOT NULL default ‘0’,
`clock` int(11) NOT NULL default ‘0’,
`value` int(11) NOT NULL default ‘0’,
`acknowledged` int(11) NOT NULL default ‘0’,
PRIMARY KEY (`eventid`),
KEY `events_1` (`object`,`objectid`,`clock`),
KEY `events_2` (`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

# 执行explain分析SQL
mysql> explain SELECT MAX(clock) as clock, value FROM events WHERE objectid=12778 AND value<>2 AND clock < 1228224333 GROUP BY value ORDER BY clock DESCG*************************** 1. row *************************** id: 1 select_type: SIMPLE table: events type: ALLpossible_keys: events_2 key: NULL key_len: NULL ref: NULL rows: 1914432 Extra: Using where; Using temporary; Using filesort # 这里就是关键了,性能就是因为这些,全表扫描,没有使用索引1 row in set (0.00 sec)经过检查发现,已有的两个索引并不能优化这个表的检索,下面是一个简单的说明mysql> explain SELECT clock, value FROM events WHERE clock < 1128224333G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: events type: rangepossible_keys: events_2 key: events_2 key_len: 4 ref: NULL rows: 1 Extra: Using where1 row in set (0.00 sec)mysql> explain SELECT clock, value FROM events WHERE clock < 1228224333G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: events type: ALLpossible_keys: events_2 key: NULL key_len: NULL ref: NULL rows: 1914898 Extra: Using where1 row in set (0.00 sec)mysql> explain SELECT clock, value FROM events force index(events_2) WHERE clock < 1228224333G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: events type: rangepossible_keys: events_2 key: events_2 key_len: 4 ref: NULL rows: 957455 Extra: Using where1 row in set (0.00 sec)# 上面三句分析表明,对于实际需要的clock范围,events_2的筛选度并不好,MySQL默认优化在30%以下的筛选才会选用这个索引# 所以最终结果是系统放弃使用已有索引最后的解决方法也不复杂,在这个查询语句上的objectid,value和clock上建立联合索引,一共不到200万条数据,加索引用了半分多钟mysql> alter table events add index (objectid,value,clock) ;
优化后,查询非常快,不到0.01秒,随之页面的问题也就解决了。
mysql> SELECT MAX(clock) as clock, value FROM events WHERE objectid=12778 AND value<>2 AND clock < 1228224333 GROUP BY value;+------------+-------+| clock | value |+------------+-------+| 1228209333 | 0 || 1228224303 | 1 |+------------+-------+2 rows in set (0.00 sec)mysql> explain SELECT MAX(clock) as clock, value FROM events WHERE objectid=12778 AND value<>2 AND clock < 1228224333 GROUP BY valueG*************************** 1. row *************************** id: 1 select_type: SIMPLE table: events type: rangepossible_keys: events_2,events_3 key: events_3 key_len: 12 ref: NULL rows: 3540 Extra: Using where; Using index; Using temporary; Using filesort1 row in set (0.00 sec)

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 丰巢电话留错了怎么办 e栈快递员软件打不开怎么办 耳朵里进了东西怎么办 e栈收不到取件码怎么办 挖机排放不达标怎么办 三星手机一直开机关机怎么办 高速路上胎爆了怎么办 迪兰588温度高怎么办 象印保温杯掉漆怎么办 报销的车票丢了怎么办 快递写错一个字怎么办 外国人在中国护照过期怎么办 大学选课选漏了怎么办 高德地图不能琦跨城导航怎么办 水痘预防针间隔时间太久怎么办 车载导航被删了怎么办 高德地图gps信号弱怎么办 ai里面图片太多文件太大怎么办 ai文件太大怎么办1个G 文件写错了字怎么办 戒指弄不下来了怎么办 高德地图反应慢怎么办 白色印花t恤染色怎么办 印花t恤图案掉了怎么办 衣服上印花掉了怎么办 ps cs 3图标太小怎么办 ai cs6图标太小怎么办 su界面太小怎么办win10 华为p9手机gps信号弱怎么办 小米手机导航gps信号弱怎么办 安卓手机gps信号弱怎么办 苹果6导航gps信号弱怎么办 苹果6plus反应慢怎么办 手机文件打开是乱码怎么办 手机wps文件打开是乱码怎么办 腾讯视频vip账号被盗怎么办 附单据数错了 怎么办 橡胶的回弹性差怎么办 自己喷漆喷坏了怎么办 透明塑料磨花了怎么办 包包金属刮花了怎么办