码迷,mamicode.com
首页 > 数据库 > 详细

MySql语句性能问题定位--从sql语句到磁盘IO检查

时间:2016-03-26 08:18:14      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:linux   mysql   percona-toolkit   

写在前面:本文只针对IO导致MySql性能问题的定位,其他如CPU、MySql参数配置、程序自身等问题需要进一步补充。

背景:某条sql建表语句运行了15秒  :(

Step1:

开启profiling

  • SET profiling = 1;

关闭

  • SET profiling = off;

找到运行慢的sql语句ID

  • show profiles;

查看sql语句CPU/IO等耗时具体的量化数据

  • show profile CPU,SWAPS,BLOCK IO,MEMORY,CONTEXT SWITCHES,IPC,PAGE FAULTS,SOURCE forquery 39;

技术分享技术分享

结论:

从上图可见CPU耗时不多,反而IO操作占了大部分的耗时。下面让我们来找出服务器的哪些进程在占用IO资源。

Step2:

查看服务器linux IO:

  • iostat -1

技术分享

技术分享

找出哪些进程在疯狂的进行IO操作:

  • iotop

技术分享技术分享

结论:

发现磁盘的读写都很高,而且svctm与await相差很大。

1,await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。

2,%util项的值也是衡量磁盘I/O的一个重要指标,%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。

所以,确实是磁盘高IO操作,导致sql性能问题。而且是mysql本身IO特别高。

Setp3:

使用pt-ioprofile,查出哪些文件的IO操作高。命令如下,  

  • yum install  percona-toolkit-2.2.17-1.noarch.rpm


  • pt-ioprofile --profile-pid=44937 --cell=sizes

技术分享技术分享

总结:从上图可以看出,数据库中,某些表的读写操作是造成IO一直很高的主要原因,并严重影响了sql的查询性能。

定位到具体某个表、文件之后,就可以采取相应措施了。可以更换磁盘设备,使用更快的SSD磁盘,结合程序读写规则,选择合适的磁盘文件系统类型,或者从程序本身进行优化。


本文出自 “散人” 博客,请务必保留此出处http://zouqingyun.blog.51cto.com/782246/1755311

MySql语句性能问题定位--从sql语句到磁盘IO检查

标签:linux   mysql   percona-toolkit   

原文地址:http://zouqingyun.blog.51cto.com/782246/1755311

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!