|
|
51CTO旗下网站
|
|
移动端

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

MySQL数据库性能遇到瓶颈,如何快速定位问题的原因,是每个DBA或系统运维人员应该思考的问题。正确的借助一些性能分析工具,能够帮助DBA或系统运维人员进行问题快速的定位。

作者:老王谈运维来源:MySQL|2019-05-23 08:08

前言

MySQL 数据库最常见的两个瓶颈是CPU和I/O的瓶颈。CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候,磁盘I/O瓶颈发生在装入数据远大于内存容量的时候。

MySQL数据库性能遇到瓶颈,如何快速定位问题的原因,是每个DBA或系统运维人员应该思考的问题。正确的借助一些性能分析工具,能够帮助DBA或系统运维人员进行问题快速的定位。

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

下面小编汇总了一些 MySQL DBA工作中好用的性能分析工具,欢迎大家收藏转发~

一、 Pt-qurey-digest

pt-query-digest主要用来分析mysql的慢日志,与mysqldumpshow工具相比,pt-querydigest 工具的分析结果更具体,更完善。pt-querydigest是PT工具集的子集。

1. 安装

  1. yum install percona-toolkit-3.0.13-1.el7.x86_64.rpm  

2. 用法

(1) 直接分析慢查询文件:

  1. pt-query-digest /var/lib/mysql/slowtest-slow.log > slow_report.log 

(2) 分析最近12小时内的查询:

  1. pt-query-digest --since=12h /var/lib/mysql/slowtest-slow.log > slow_report2.log 

(3) 分析指定时间范围内的查询:

  1. pt-query-digest /var/lib/mysql/slowtest-slow.log --since '2017-01-07 09:30:00' --until '2017-01-07 10:00:00'> > slow_report3.log 

(4) 分析指含有select语句的慢查询

  1. pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' /var/lib/mysql/slowtest-slow.log> slow_report4.log 

(5) 针对某个用户的慢查询

  1. pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' /var/lib/mysql/slowtest-slow.log> slow_report5.log 

(6) 查询所有所有的全表扫描或full join的慢查询

  1. pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' /var/lib/mysql/slowtest-slow.log> slow_report6.log 

二、Innotop

innotop是一个MySQL和InnoDB事务/状态监视器,它显示查询、InnoDB事务、锁等待、死锁、外键错误,打开表,复制状态,缓冲区信息,行操作、日志、I/O操作、加载图等等。你可以使用innotop同时监控多个服务器。innotp可以综合解你的 MySQL。

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

1. 安装innotop

  1. yum install innotop-1.11.4-1.el7.noarch  

2. 使用方法

(1) 基本使用

  1. innotop --host 192.168.1.181 --user admin --password 123456 --port 3306 --delay 1 -m Q 

(2) 参数说明,如下图:

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

注意::?可以切换至其他命令。

三、 Orzdba

是taobao开源出来一个数据库实时性能查看工具,借助此工具你可以时刻了解的你的数据库的性能情况。

使用方法:

  1. ./orzdba_remote --host=192.168.1.181 --user="admin" --password=123456 --port=3306 -mysql -sys 2>/dev/null  

参数说明:

  • --host:指定主机
  • --user:指定用户名
  • --password:数据库密码
  • --port:数据库的端口号

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

四、 Tcp抓包

1. 安装tcp包

  1. yum install tcpdump-4.9.2-3.el7.x86_64 -y 

2. 使用

(1) 通过tcpdump抓包

  1. tcpdump -i any port 3306 -l -s 0 -w - |strings |grep -A 5 select|less 

(2) tcpdump+pt-query-digest

  1. tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt 
  2. pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log 

五、ioprofile

1. pt-ioprofile

pt-ioprofile定位负载来源文件,通过ps找出负载较高的进程。

2. 使用

  1. 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
  • 修改文件权限,增加执行权限 chmod +x /usr/bin/tcprstat 如果你想在32位操作系统中使用,那你只能自己编译了。

代码下载地址 https://github.com/Lowercases/tcprstat https://launchpad.net/tcprstat

2. 使用

  1. [root@localhost ~]# tcprstat --p 3306 -t 1 -n 10 
  2. timestamp count max min avg med stddev 95_max 95_avg 95_std 99_max 99_avg 99_std 
  3. 1539760803 1 103 103 103 103 0 0 0 0 0 0 0 
  4. 1539760804 1 108 108 108 108 0 0 0 0 0 0 0 
  5. 1539760805 1 124 124 124 124 0 0 0 0 0 0 0 
  6. 1539760806 1 115 115 115 115 0 0 0 0 0 0 0 
  7. 1539760807 1 112 112 112 112 0 0 0 0 0 0 0 

每个请求的时间在0.1ms~0.124ms

参数说明:

  • --p:数据库端口号
  • -t:刷新间隔时间
  • -n:输出次数

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

七、 Nicstat

nicstat网络利器,充分了解你的网卡运行状况)

1. 安装nicstat

  1. yum install http://rpmfind.net/linux/fedora/linux/releases/28/Everything/x8664/os/Packages/n/nicstat-1.95-7.fc27.x8664.rpm 

2. 使用方法

  1. [root@lkjtest ~]# nicstat -z 1 
  2.  Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat 
  3. 15:29:14 ens160 4.03 0.91 43.18 1.60 95.61 581.8 0.00 0.00 
  4. 15:29:15 ens160 3.09 0.73 35.95 2.00 88.11 375.5 0.00 0.00 
  5. 15:29:16 ens160 3.93 0.66 43.99 2.00 91.52 335.5 0.00 0.00 
  6. 15:29:17 ens160 3.99 0.66 45.00 2.00 90.71 335.5 0.00 0.00 
  7. 15:29:18 ens160 4.04 0.66 46.99 2.00 88.04 335.5 0.00 0.00 
  8. 15:29:19 ens160 3.64 0.66 42.00 2.00 88.76 335.5 0.00 0.00 

参数说明:

  • -z:跳过0行

输出参数说明:

  • wKB/s,OutKB #每秒写的千字节数(transmitted)
  • rMbps,RdMbps #每秒读的百万字节数K(received)
  • %Util #接口的利用率百分比
  • Sat #每秒的错误数,接口接近饱和的一个指标

八、 Dstat

1. 安装dstat

  1. yum install dstat -y 

2. 使用

  1. [root@localhost ~]# dstat -tclmndy 1  

参数说明:

  • -t:enable time/date output
  • -c:enable cpu stats
  • -l:enable load stats
  • -m:enable memory stats
  • -n:enable network stats
  • -d:enable disk stats
  • -y:enable system stats

十大MySQL性能分析工具汇总!专治MySQL性能瓶颈

九、 vmtouch

vmtouch是一个学习和控制unix和类unix系统的文件系统缓存的工具。

1. 快速安装

  1. $ git clone https://github.com/hoytech/vmtouch.git 
  2. $ cd vmtouch 
  3. $ make 
  4. $ sudo make install 

2. 使用方法

显示

  1. $ vmtouch -v big-dataset.txt 

回收

  1. vmtouch -ve a.txt 

十、 oprofile

Oprofile 是一个开源的profiling工具,通过取样来工作,是一个全局的抽样统计工具。cpu无端占用高?应用程序响应慢?苦于没有分析的工具?找它就对了!通过计数采样,帮助我们从进程、函数、代码层面找出占用cpu的"罪魁祸首"。

1. 安装

  1. yum install http://www.rpmfind.net/linux/centos/7.5.1804/os/x86_64/Packages/oprofile-0.9.9-25.el7.x86_64.rpm -y 

2. 使用方法

(1) 使用

  1. #加载oprofile内核模块 opcontrol --init  
  2. #我们对内核的取样没兴趣 opcontrol --setup --no-vmlinux 
  3. #在开始收集采样数据前回顾下我们的设置 opcontrol --status 
  4. #清除上一次采样到的数据 opcontrol --reset  
  5. #运行我们的程序 opcontrol --start  
  6. #收集采样数据 opcontrol --dump 
  7. #关闭守护程序, 同时准备好采样的数据 opcontrol --shutdown 

注意:如报Cannot find event CPUCLKUNHALTED,解决方法如下:

  1. #解决步骤 
  2. $sudo opcontrol --deinit 
  3. Daemon not running 
  4. Unloading oprofile module 
  5.   
  6. $sudo modprobe oprofile timer=1  
  7.   
  8. $dmesg|grep oprofile|tail -n 1 
  9. oprofile: using timer interrupt. 
  10. 如果你看到上面的字说明你成功了。 
  11. 我们再试验下: 
  12. $sudo opcontrol --init && sudo opcontrol --reset && sudo opcontrol --start 
  13. Using 2.6+ OProfile kernel interface. 
  14. Using log file /var/lib/oprofile/samples/oprofiled.log 
  15. Daemon started. 
  16. Profiler running. 

(2) 获取采样信息

  1. #系统级别的 opreport --long-filenames 
  2. #模块级别的 opreport image:foo -l 
  3. #源码级别的 opannotate image:foo -s 

(3) 使用样例

  1. opcontrol --deinit 
  2. modprobe oprofile timer=1 
  3. $dmesg|grep oprofile|tail -n 1 
  4. (oprofile: using timer interrupt.) 
  5. opcontrol --reset 
  6. pcontrol --separate=lib --no-vmlinux 
  7. --start --image=/home/mysql_user/mysqlhome/bin/mysqld 
  8. opcontrol --dump 
  9. opcontrol --shutdown 
  10. opreport -l /home/mysql_user/mysqlhome/bin/mysqld 

【编辑推荐】

  1. 4个MySQL优化工具AWR,帮你准确定位数据库瓶颈!
  2. 排除MySQL中常见错误的实用招术
  3. 这个MySQL8.0.16新特性,你知道吗
  4. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
  5. 传统数据库一键上云 阿里云PolarDB发布重大更新
【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Spring Boot 爬虫搜索轻松游

Spring Boot 爬虫搜索轻松游

全栈式开发之旅
共4章 | 美码师

30人订阅学习

Linux性能调优攻略

Linux性能调优攻略

性能调优规范
共15章 | 南非蚂蚁

146人订阅学习

VMware vSphere虚拟化常见故障

VMware vSphere虚拟化常见故障

搞定vSphere虚拟化
共18章 | 王春海

62人订阅学习

读 书 +更多

SOA 原理•方法•实践

本书并不是关于Web服务的又一本开发手册,抑或是开发技术的宝典之类的读物。本书的作者来自于IBM软件开发中心的SOA技术中心,作为最早的一...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客