MySQL很慢... 怎么破??-阿里云开发者社区

开发者社区> tplinux> 正文

MySQL很慢... 怎么破??

简介: 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)

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【巡检问题分析与最佳实践】RDS MySQL慢SQL问题
判断查询的性能就是看查询执行的时间,这个时间针对不同的业务要求上也有差异。在同一时间内SQL执行的越快,执行的SQL就越多,完成的业务逻辑就越多。同样一个业务场景不同的架构设计、数据库表索引设计,由不同的人来做效果是不同的,有的人可以用很低的成本,RDS规格,ECS规格跑出很高的性能。最好的情况是自顶向下了解业务,以及每个业务涉及的SQL,这样就能厘清业务和数据库负载的关系;也能找到短板,并对短板做有针对性的优化;全链路压测就是做的这个事情。
638 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9489 0
MySQL慢SQL优化
基础知识 慢SQL官方定义 If a query takes longer than this many seconds, the server increments the Slow_queries status variable. If the slow query log is enabled, the query is logged to the slow query log file; Unit:Second. 阿里云控制台慢SQL参数 SQL优化原因与影响 •SQL优化原因:查询效率低的SQL(慢SQL)会占用机器大量的CPU、内存和IO资源,影响正常业务。
5321 0
MySQL很慢... 怎么破??
MySQL 很慢怎么办
1968 0
mysql慢查询
mysql慢查询 查询日志概念      MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
1260 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13169 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11502 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6887 0
+关注
tplinux
云和恩墨 MySQL DBA
38
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载