前言MySQL数据库最常见的两个瓶颈是CPU和I/O瓶颈。当CPU饱和时,一般发生在数据加载到内存或从磁盘读取时,当加载的数据远大于内存容量时,就会出现磁盘I/O瓶颈。MySQL数据库性能遇到瓶颈,如何快速定位问题原因是每个DBA或者系统运维人员都应该思考的问题。正确使用一些性能分析工具可以帮助DBA或者系统运维人员快速定位问题。下面小编总结了一些在MySQLDBA工作中有用的性能分析工具。欢迎收藏转发~1.pt-qurey-digestpt-query-digest主要用于分析mysql的慢日志。与mysqldumpshow工具相比,pt-querydigest工具的分析结果更加具体和完整。pt-querydigest是PT工具集的一个子集。1、安装yuminstallpercona-toolkit-3.0.13-1.el7.x86_64.rpm2。用法(1)直接分析慢查询文件:pt-query-digest/var/lib/mysql/slowtest-slow.log>slow_report.log(2)分析最近12小时内的查询:pt-query-digest--since=12h/var/lib/mysql/slowtest-slow.log>slow_report2.log(3)分析指定时间范围内的查询:pt-query-digest/var/lib/mysql/slowtest-slow.log--since'2017-01-0709:30:00'--until'2017-01-0710:00:00'>>slow_report3.log(4)分析指慢查询pt-query-digest--filter'$event->{fingerprint}=~m/^select/i'/var/lib/mysql/slowtest-slow.log>slow_report4.log包含select语句(5)某用户慢查询pt-query-digest--filter'($event->{user}||"")=~m/^root/i'/var/lib/mysql/slowtest-slow.log>slow_report5.log(6)查询所有全表扫描或全连接慢查询pt-query-digest--filter'(($event->{Full_scan}||"")eq"yes")||(($event->{Full_join}||"")eq"yes")'/var/lib/mysql/slowtest-slow.log>slow_report6.log2.Innotopinnotop是MySQL和InnoDB的事务/状态Monitor,显示查询、InnoDB事务、锁等待、死锁、外键错误、打开表、复制状态、缓冲区信息、行操作、日志、I/O操作、加载图等。可以使用innotop同时监控多台服务器。innotp可以全面解决你的MySQL。1.安装innotopyuminstallinnotop-1.11.4-1.el7.noarch2。用法(1)基本使用innotop--host192.168.1.181--useradmin--password123456--port3306--delay1-mQ(2)参数说明,如下图:注::?您可以切换到其他命令。3、Orzdba是淘宝开源的一款数据库实时性能查看工具。使用此工具,您可以随时了解数据库的性能。使用方法:./orzdba_remote--host=192.168.1.181--user="admin"--password=123456--port=3306-mysql-sys2>/dev/null参数说明:--host:指定主机--user:指定用户名--password:数据库密码--port:数据库端口号4.tcp抓包1.安装tcp包yuminstalltcpdump-4.9.2-3.el7.x86_64-y2。使用(1)通过tcpdump包抓取tcpdump-ianyport3306-l-s0-w-|strings|grep-A5select|less(2)tcpdump+pt-query-digesttcpdump-s65535-x-nn-q-tttt-iany-c1000port3306>mysql.tcp.txtpt-query-digest--typetcpdumpmysql.tcp.txt>slow_report9.log5.ioprofile1。pt-ioprofilept-ioprofile定位加载源文件,通过ps找出负载高的进程。2、使用pt-ioprofile--profile-pid=12036--cell=sizes参数说明:--profile-pid:mysql进程的id--cell-sizes:该参数以B/S方式显示结果六一、tcprstat通过响应时间判断数据库的运行状态1.安装tcprstat如果在64位操作系统中使用,可以直接下载二进制文件使用。步骤如下:下载文件http://github.com/downloads/Lowercases/tcprstat/tcprstat-static.v0.3.1.x86_64将下载的文件移动到/usr/bin将文件名改为tcprstat修改文件permission并添加执行权限chmod+x/usr/bin/tcprstat如果要在32位操作系统中使用,只能自己编译。代码下载地址https://github.com/Lowercases/tcprstathttps://launchpad.net/tcprstat2.使用[root@localhost~]#tcprstat--p3306-t1-n10timestampcountmaxminavgmedstddev95_max95_avg95_std99_max99_avg99_std153976080311031031031030000000153976080411081081081080000000153976080511241241241240000000153976080611151151151150000000153976080711121121121120000000每个请求的时间在0.1ms~0.124msparameterdescription:--p:databaseportnumber-t:refreshintervaltime-n:outputtimesfedora/linux/releases/28/Everything/x8664/os/Packages/n/nicstat-1.95-7.fc27.x8664.rpm2.Howtouse[root@lkjtest~]#nicstat-z1TimeIntrKB/swKB/srPk/swPk/srAvswAvs%UtilSat15:29:14ens1604.030.9143.181.6095.61581.80.000.0015:29:15ens1603.090.7335.952.0088.11375.50.000.0015:29:16ens1603.930.6643.992.0091.52335.50.000.0015:29:17ens1603.990.6645.002.0090.71335.50.000.0015:29:18ens1604.040.6646.992.0088.04335.50.000.0015:29:19ens1603.640.6642.002.0088.76335.50.000.00Parameterdescription:-z:skip0linesofoutputparameters数字说明:wKB/s,OutKB#每秒写入(传输)的千字节数rMbps,RdMbps#每秒读取的百万字节数K(received)%Util#接口利用率百分比Sat#每秒错误数,一个指示接口接近饱和八、Dstat1。安装dstatyuinstalldstat-y2。使用[root@localhost~]#dstat-tclmndy1参数说明:-t:启用时间/日期输出-c:启用cpu统计-l:启用负载统计-m:启用内存统计-n:启用网络统计-d:启用diskstats-y:enablesystemstats9.vmtouchvmtouch是学习和控制unix和类unix系统文件系统缓存的工具1.快速安装$gitclonehttps://github.com/hoytech/vmtouch.git$cdvmtouch$make$sudomakeinstall2.如何使用说明$vmtouch-vbig-dataset.txt回收vmtouch-vea.txt10.oprofileOprofile是一个开源的profiling工具,通过采样Job,是一个全局采样统计工具。不合理的高cpu使用率?应用响应慢?苦于没有分析工具?只是寻找它!通过统计和采样,帮助我们从进程、函数、代码层面找到占用cpu的“罪魁祸首”。1、安装yuminstallhttp://www.rpmfind.net/linux/centos/7.5.1804/os/x86_64/Packages/oprofile-0.9.9-25.el7.x86_64.rpm-y2。使用方法(1)使用#加载oprofile内核模块opcontrol--init#我们对内核采样不感兴趣opcontrol--setup--no-vmlinux#在开始采集采样数据之前先查看我们的设置opcontrol--status#Clear最后一次采样数据opcontrol--reset#Runourprogramopcontrol--start#Collectsamplingdataopcontrol--dump#Closethedaemon,准备采样数据opcontrol--shutdown注意:如果报CannotfindeventCPUCLKUNHALTED,解决办法如下:#解决步骤$sudoopcontrol--deinitDaemonnotrunningUnloadingoprofilemodule$sudomodprobeoprofiletimer=1$dmesg|grepoprofile|tail-n1oprofile:usingtimerinterrupt。如果你看到上面的话,你就成功了。我们再试试:$sudoopcontrol--init&&sudoopcontrol--reset&&sudoopcontrol--startUsing2.6+OProfilekernelinterface.Usinglogfile/var/lib/oprofile/samples/oprofiled.logDaemonstarted.Profilerrunning.(2)获取采样信息#System-levelopreport--long-filenames#module-levelopreportimage:foo-l#source-levelopannotateimage:foo-s(3)使用示例opcontrol--deinitmodprobeoprofiletimer=1$dmesg|grepoprofile|tail-n1(oprofile:usingtimerinterrupt.)opcontrol--resetpcontrol--separate=lib--no-vmlinux--start--image=/home/mysql_user/mysqlhome/bin/mysqldopcontrol--dumpopcontrol--shutdownopreport-l/home/mysql_user/mysqlhome/bin/mysqld
