鱼C论坛

 找回密码
 立即注册
查看: 314|回复: 3

结合zabbix监控mysql,让mysql性能飙升

[复制链接]
发表于 2024-6-21 17:13:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 富友郑鹏展 于 2024-6-23 13:45 编辑

     前段时间客户的系统突然出现mysql只读集群cpu飙升的情况,飙升到最高点的时候,甚至导致应用服务器GC,幸好应用有备份服务器,流量直接切过去,客户也无感知。但是这个只是临时的解决办法,总归要找到具体的原因,和开发同事查了两天的应用日志和mysql的慢日志,始终无法定位到具体的问题。最后想到,既然这个问题会时不时出现,那能不能写一个脚本结合zabbix监控mysql消耗cpu最高的线程,然后把这些线程执行的语句调出来,这样开发同事就可以针对性的进行优化了。经过调研,这个方案确实可行,说干就干(具体脚本的实现和部署我已经在我的github上公开了,感兴趣的朋友拿走不谢:MonitorAbnormalSql),效果果然是杠杆的。很快就找出了消耗cpu比较高的sql语句,结合zabbix的报警,开发同事很快就收到需要优化的sql语句了,结果发现就是其中一个功能,用户那边只要打开一个页面,后端就会轮询的去查询mysql的一个表,而这个表数据量越来越大,而且相关字段没有做索引,结果这个语句消耗的cpu就越来越高了。原因找到了,自然就好解决了。只需增加索引就可以了。至此问题顺利解决。后面也有出现几次异常sql报警,也很快就收到报警并迅速解决了。下面看看效果,优化后,mysql进程消耗cpu明显下降,性能得到较大提升。可以看到6月8号没优化前,mysql最高的时候cpu达到90%多,优化后,进程的cpu明显下降了,应用服务器也没再出现GC的情况。至此,问题算是完美解决了!

zabbix 监控趋势图

zabbix 监控趋势图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-21 17:14:14 | 显示全部楼层
哈哈,看来你简直是SQL优化的福尔摩斯啊!客户都没感知到问题,你们后端的攻坚战已经悄然打响了。你的做法不仅巧妙,而且相当有成效!下面我就来结合你的案例,用通俗易懂的方式详细讲一下如何让MySQL在Zabbix监控下跑得飞快吧。

### 一、问题背景
你的MySQL集群CPU飙升,不仅影响数据库,还差点让应用服务器挂掉。紧急切换服务器,让业务不受影响,但根本问题还得解决。

### 二、思路和方案
想到可以用Zabbix监控MySQL,抓住CPU消耗最高的线程,再分析这些线程执行的SQL语句。哇,这个思路简直就是要抓“现行”啊!

1. **发现问题**:MySQL CPU炒鸡高。
2. **设定目标**:找到并优化那些耗费CPU的SQL语句。
3. **工具选择**:Zabbix + 自制脚本。

### 三、具体实施步骤

#### 1. 数据库接入Zabbix
首先得把MySQL数据库接入到Zabbix中进行基础的监控。这个通常包括监控MySQL的各种指标,比如QPS(Queries Per Second)、InnoDB的状态等等。
# 举个例子,监控MySQL是否存活
zabbix_get -s <MySQL服务器IP> -k "mysql.ping"

#### 2. 写脚本监控高CPU消耗的线程
写一个脚本,这个脚本运行在MySQL服务器上,定时找出当前消耗CPU最高的线程,并将其SQL语句提取出来。
#!/bin/bash

# 查找Top CPU消耗的SQL
mysql -u<用户名> -p<密码> -e "SHOW PROCESSLIST" | awk '{if($5 > 1000) print $0}' > high_cpu_sql.log

然后,你可以用Zabbix的自定义监控项来调用这个脚本,将结果传回Zabbix。Zabbix可以设定触发器,一旦某个SQL语句的CPU消耗过高,就发送报警。

#### 3. 开发同事收到警报进行优化
开发同事收到Zabbix的报警邮件,立刻去看那个高CPU消耗的SQL语句,然后对症下药,比如加索引、优化查询逻辑等等。
-- 假设发现某个查询没有索引,添加索引
ALTER TABLE your_table ADD INDEX index_name (column_name);

### 四、效果展示
优化前后MySQL CPU的占用率对比可以说是天壤之别啊!6月8号前,MySQL的CPU占用率能飙到90%多,其应用服务器也累得不行。优化后,CPU占用明显下降,应用服务器再也不像从前那样GC频繁啦!

### 五、结语
通过这个案例,我们可以总结出:
- **监控的重要性**:Zabbix等监控系统能帮你实时了解系统健康状况。
- **数据驱动下的优化**:通过实际监控数据,而不是凭感觉进行优化,更科学有效。
- **团队协作**:运维和开发的紧密配合,事半功倍。

好啦,瞧,就这样一个小小的思路加上几个技术手段,MySQL性能杠杠滴提升了!是不是很有成就感呢?希望以后遇到类似的问题,你也能像这样胸有成竹地解决啦!如果还有啥问题,咱们随时探讨哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-21 17:50:13 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-21 17:50:28 | 显示全部楼层
字体稍微小一些会更好哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表