MySQL很慢... 怎么破??

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 很慢怎么办

老王:最近我的MySQL数据库很慢.... 很忧伤,这可肿么办?

帅萌:老王,老王你莫心慌,听我跟你唠~

MySQL性能有问题,先应该关注的是慢查询日志(slow log)。

MySQL性能慢,多半是SQL引起的(慢查询日志会把执行慢的SQL,一五一十的记录下来,就像你的身体一样诚实..)需要根据慢查询日志的内容来优化SQL。

其次,除了MySQL慢查询日志,还需要更多的关注liunx系统的指标和参数。

top 命令帮你观察大橘(局)。

image

观察 load average 1分钟 、5分钟、 15分钟的平均负载值。

然后是us% 用户使用的CPU占比,如果us%太高,极有可能索引使用不当。

sy%系统内核使用的CPU占比,如果sy%太高,要注意MySQL的连接数和锁等信息。

wa% io使用CPU的占比,如果wa%太高,要关注MySQL是否使用了硬盘临时表,或者大量刷盘等操作,也有可能是硬盘太慢,或硬盘故障,可以使用iostat等工具来观察。

还需要关注各个逻辑CPU之前的负载是否均衡(可能是中断不均衡导致性能问题),可以使用mpstat命令来进行详细观察。

image

MySQL是数据库服务,不建议跟其他应用混跑。

其次是内存的使用信息,先通过free来观察。

image

要观察 是否使用了SWAP,剩余多少内存,是否发生内存泄漏。

说到SWAP,就要说到NUMA,通过numactl来观察NUMA的使用情况,建议关闭NUMA。至于为什么,建议阅读《NUMA架构的CPU -- 你真的用好了么?》 。

阅读地址:http://t.cn/RAZ3hw9

内存泄漏观察方法 buff/cache 和used 对比。 如果发生了内存泄漏,解决方案:

重启MySQL 。

升级到最新的小版本MySQL 。

还可以通过vmstat 来观察每秒的进程、内存、swap、io、cpu等详情情况。

image

然后要关注IO的使用情况,可以通过 iostat -x来观察,主要观察。

image

rrqm/s #每秒读取的扇区数。

wrqm/s #每秒写入的扇区数。

avgrq-sz #平均请求扇区的大小 。

avgqu-sz #是平均请求队列的长度。

await #每一个IO请求的相应时间。

%util #在统计时间内所有处理IO时间,除以总共统计时,暗示了设备的繁忙程度。

MySQL观察层面

主要关注tps、qps、并发连接数(Threads_connected)、并发活跃线程数(Threads_running)、临时表(tmp_disk_tables)、锁(locks_waited, Innodb_row_lock*)等指标。

关注当前是否有不良线程状态,例如:copyto tmp table、Creating sort index、Sorting result、Creating tmp table、长时间的Sending data等。

关注InnoDB buffer pool page的使用情况,主要是Innodb pages_free、Innodb wait_free两个 。

关注InnoDB的redo log刷新延迟,尤其是checkpoint延迟情况,并关注unpurge list大小。

关注innodb status中是否有long semaphore wait的情况出现。

观察是否有大事物的阻塞。

在观察MySQL运行状态方面,帅萌丢一个py脚本。写的时间久,迭代N个版本,不过这个版本很方便....(其他的在项目里拆起来有点费劲)。但是编程这方面越写越精,需要磨练,各位可以参考一下,相信你们会写的更棒。

如果实在看不懂的请联知数堂zizi老师,我负责挖坑,他负责教你会,带你飞。

代码地址:http://t.cn/E4n7O6S

还提供一个SOS.sh脚本,当性能遇到问题,可以根据实际情况进行修改,并自行把相关内容打包,以便探讨和交流。

image

(杨奇龙老师的图)

、##参考 知数堂-叶问(20181218)

、##感谢,有赞杨奇龙老师提供的帮助,以及图片支持。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 监控 Oracle
MySQL发现sql语句执行很慢排查建议
MySQL发现sql语句执行很慢排查建议
499 0
|
SQL 算法 关系型数据库
Mysql使用left join连表查询时,因连接条件未加索引导致查询很慢
Mysql使用left join连表查询时,因连接条件未加索引导致查询很慢
174 0
|
关系型数据库 MySQL 索引
MySQL的SQL_CALC_FOUND_ROWS真的很慢么?
分页程序一般由两条SQL组成: SELECT COUNT(*) FROM ... WHERE ....SELECT ... FROM ... WHERE LIMIT ...   如果使用SQL_CALC_FOUND_ROWS的话,一条SQL就可以了: SELECT SQL_CALC_FOUND_ROWS .
1669 0
|
SQL 关系型数据库 MySQL
paip.解决 数据库mysql增加列 字段很慢添加字段很慢
paip.解决 数据库mysql增加列 字段很慢添加字段很慢 环境如下: mysql5.6 数据仅仅3w alter table xxx add column yyy int default 0; 添加字段很慢,好几份中都没有好。
3894 0
|
关系型数据库 MySQL PHP
【MySQL】pdo连接数据连接很慢
【MySQL】pdo连接数据连接很慢
320 0
【MySQL】pdo连接数据连接很慢
|
网络协议 关系型数据库 MySQL
mysql远程连接数据库很慢
<p style="line-height:27.2px; color:rgb(73,73,73); font-size:16px; margin:10px auto; padding-top:0px; padding-bottom:0px"> <br></p> <p style="line-height:27.2px; font-size:16px; margin:10px auto
9480 0
|
关系型数据库 MySQL Oracle