本文汇总了MySQL DBA日常工作中用到的些工具,方便初学者,也便于自己查阅。

先介绍下基础设施(CPU、IO、网络等)检查的工具:

vmstat、sar(sysstat工具包)、mpstat、oprofile、nicstat、dstat、iotop、tsar、iostat 掌握几个即可,功能大同小异(个人常用的是 dstat、sar)。

CPU:

mpstat -P ALL 1每隔1s显示一次

上图可以看到CPU调度不均衡。因此我们可以尝试将pid为700的进程绑定到第四颗CPU上。taskset -p 03 700

磁盘:

vmstat -S m 1 10

iostat -xkdz 1

iotop

pt-ioprofile --profile-pid=$(pidof mysqld) --cell=sizes --run-time=30

内存:

vmtouch【很cool的工具】参考:http://blog.yufeng.info/archives/1903

作用:

查看一个文件(或者目录)哪些部分在内存中;

把文件调入内存;

把文件清除出内存;

把文件锁住在内存中而不被换出到磁盘上;

1.看看/bin目录有多少内容在内存中

$ vmtouch /bin/Files: 92

Directories: 1

Resident Pages: 348/1307  1M/5M 26.6%

Elapsed: 0.003426 seconds

2.看看某文件(big-dataset.txt)有多少在内存中

How much ofbig-dataset.txt is currently in memory?

$ vmtouch -v big-dataset.txt

big-dataset.txt

[                                                           ] 0/42116Files: 1

Directories: 0

Resident Pages: 0/42116  0/164M 0%

Elapsed: 0.005182 seconds

然后读入部分文件,

$ tail -n 10000big-dataset.txt > /dev/null

然后在用vmtouch查看一下:

$ vmtouch -vbig-dataset.txt

big-dataset.txt

[                                                   oOOOOOOO] 4950/42116Files: 1

Directories: 0Resident Pages: 4950/42116 19M/164M  11.8%Elapsed: 0.006706 seconds

我们可以看出big-datset.txt开始时没有数据在内存中,在用tail命令读入了部分数据后,有19MB的数据进入了内存。

3.把文件(a.txt)清除出内存

$ vmtouch -vea.txt

Evicting a.txtFiles: 1

Directories: 0

Evicted Pages: 42116 (164M)

Elapsed: 0.076824 seconds

vmtouch主要作用是做数据的warm-up,即对于将要用到的数据,通过vmtouch把它们事先读入内存,而不是在需要时再从硬盘上读入,这样可以提高系统效率。

网络:

nicstat -z 1(需要参照网上自己编译安装)

全面的工具:

dstat  -tclmdny 1

oprofile

【这个工具太厉强大,但是需要我们先安装带debug的kernel才行,具体请自行查阅文档】

基础设施没问题后,我们才可以去考虑MySQL的参数调优及性能优化。

常用的性能分析工具有:

mytop、innotop、orzdba、dodba、mysqltuner.pl。(这几个工具都很好用)

此外,常用的带web界面的监控工具有:

zabbix

lepus 天兔

官网:http://www.lepus.cc/page/opensource

专业做mysql监控的软件。

可直观监控主从状态,界面比较炫。支持分析慢查询(基于pt-query-digest实现)

PMM监控的部署(采用docker容器的部署方法很简单,界面也很炫,但是感觉还是不够实用。)

命令行的pt工具包套件:

percona-toolkit家族的系列工具,功能非常多,已经在我博客里面拆分成好几篇基本上都罗列了一遍用法了。

此外, 比较推荐的有如下2个命令行的工具:

innotop 【mytop的加强版】

参考://www.percona.com/blog/2013/10/14/innotop-real-time-advanced-investigation-tool-mysql/

下载地址:git clone https://github.com/innotop/innotop.git【epel源里面也可以直接yum方式安装】

配置方法:

yum install  perl-TermReadKey  perl-Time-HiRes  perl-DBD-MySQL  perl-DBI

./innotop --help可以查看到支持的参数。不过我们不在命令行输入密码,所有这些参数一般都用不到的。

./innotop --write进入交互式界面后,输入@根据提示输入相关的参数,然后退出命令行。会在当前目录下生成一个.innotop/innotop.conf里面记录了数据的密码信息。【我们只要在最后一步,提示是否保存密码到文本中时候,选择n即可只保存配置信息,不记录密码】

输入?,显示所有支持的命令,如下图:

按q键,可以退出inntop的控制台界面。

在当前目录下,自动生成一个.innotop的隐藏文件夹。innotop.conf里面保存了数据库的连接方式。

如果我们不退出刚才的Dashboard界面,直接输入I,可以看到IO相关状态,如下图:

输入Q,可以查看query list

然后按e并输入thread ID显示执行计划或者按f显示完整sql语句,或者按o显示系统优化过的语句(需要MySQL的版本支持EXPLAIN EXTENDED)

innotop是通过information_schema.processlist来获得完整的sql语句,并且根据COMMAND来过滤掉空闲线程的。

输入S,然后选择我们上面的test连接配置,可查看Variables & Status。

输入B,显示Buffer Pool的状态:

输入M,可以查看主从复制的状态。下图是master上的截图:

mytop

比较简单。

mytop  --user root --pass root

mysqltuner

一个pl脚本,mysqltuner 根据提示输入用户名和密码即可分析并给出优化的建议。直接使用yum install mysqltuner也能安装。

orzdba

http://code.taobao.org/p/orzdba/src/trunk/

chmod +x orzdba即可。

我个人常用下面的2个即可,其他的状态使用dstat、sar等命令来获取。

注意:下面的2个参数的调用默认是没有地方输入用户名和密码的,因此建议将密码写到/etc/my.cnf的client段里面。

./orzdba -mysql -C 10 -i 1

./orzdba -innodb -C 10 -i 1

tcpdump抓包捕获瞬间的SQL

step1、

tcpdump -s 65535 -x -nn -q -tttt -i eth0 -c 5000 port 3306 > /root/dump.txt

上面的命令参数含义:

-s     #snaplen,也就是数据包的截取长度

-nn    #将地址、端口显示为数字格式【经常用】

-q     #快速输出。只输出较少的协议信息。【经常用】

-tttt #在每行打印的时间戳之前添加日期的打印【经常用】

-c     #在收到指定的数量的分组后,tcpdump就会停止。

step2、

pt-query-digest --type tcpdump/root/dump.txt即可分析出结果

#!/bin/bash

#实时采集并分析1000个分组的sql包数据

#Date:2017/05/02

#注意部分机器的网卡是eth1或多网卡,脚本里面需要做修改

source/etc/profile

[! -e /usr/sbin/tcpdump ] &&  yum  install  tcpdump -y > /dev/null 2>&1

#如果抓取的数据太少,可以修改-c 5000多抓取些用于分析

tcpdump -s 65535 -x -nn -q -tttt -i eth0 -c 5000 port 3306 > /root/dump.txt && pt-query-digest --type tcpdump /root/dump.txt > /root/pt_result.log

if[ $? -eq 0 ] ; then

echo "统计结果输出到/root/pt_result.log" && rm -f /root/dump.txt

else

echo "程序运行出错"

fi

dodba 【推荐】

doDBA tools是一个基于控制台的远程监控工具,它不需要在本地/远程系统上安装任何软件,它可以实时收集操作系统、MySQL、InnoDB的实时性能状态数据,并可以生成Doing日志文件,来帮助你快速了解/优化系统及MySQL数据库。

远程收集系统信息是通过ssh(用户名密码或建立信任)的方式连接到远程服务器上收集,收集的方法都是通过读取Linux的proc下的等meminfo,diskstats,uptime,net,vmstat,cpuinfo,loadavg等文件,这和pmm,zabbix收集方式一致。

远程收集MySQL信息是通过MySQL tcp连接到MySQL数据库上收集,只需要授予连接用户PROCESS、SELECT权限即可。

系统信息和MySQL信息的收集可以分离,如果只想收集系统信息,只需要提供系统用户名密码即可,如果只收集MySQL可以只提供MySQL连接信息,如果是rds用户,可以使用-rds参数,在使用mytop时会自动忽略系统信息的收集。

http://www.ywnds.com/?p=7499

下载地址:https://github.com/dblucyne/dodba_tools

wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA--no-check-certificate

wget https://raw.githubusercontent.com/dblucyne/dodba_tools/master/doDBA.conf--no-check-certificate

chmod +x doDBA

具体如何使用在运维帮的公众号上面有比较全面的介绍,下面是我摘录的部分内容:

./doDBA-help查看帮助

收集Linux性能数据

./doDBA-h=192.168.2.11 -sys  #通过ssh远程连接去获取信息

搜集MySQL性能数据

./doDBA-h=127.0.0.1 -mysql

执行前需要先去修改doDBA.conf配置上mysql的用户名密码和端口:

{

"Host":"",

"Huser":"root",

"Hport":"22",

"Hpwd":  "",

"Muser": "root",

"Mpwd": "Abcd@1234",

"Mport":"3306"

}

###这里需要注意一点就是:搜集远程mysql时候,必须要先在目标MySQL上对本机IP做授权,不然会出现下图类似的报错。

搜集InnoDB性能数据

./doDBA-h=127.0.0.1 -innodb

搜集MySQL及Linux性能数据

./doDBA-h=127.0.0.1 -myall

类似Mytop的功能

./doDBA-h=127.0.0.1 -mytop

搜集到日志文件

./doDBA-h=127.0.0.1 -mytop-log

开启Doing功能

./doDBA -h=127.0.0.1-myall -t=3  #当有超过3个活跃线程时就自动执行show processlist和show engine innodb status\G并把采集到的信息存到dbdba.log

配合shell批量采集

cat ip.txt内容如下:

192.168.2.11

192.168.2.12

cat ip.txt | while read ip;  do  echo $ip;  ./doDBA -h=$ip -mysql -log

重磅推荐:my.cnf 参数计算器(推荐):

不同物理硬件的服务器,my.cnf 的部分参数需要调整,如果参数设置的太大,可能导致OOM。因此有必要用这个计算器算一下。

上文中部分内容参考自网易王洪权的ppt。

mysql性能分析工具_MySQL性能分析、及调优工具使用详解相关推荐

  1. mysql性能调优之 max_allowed_packet 详解 解决ERROR 2006 (HY000): MySQL server has gone away

    mysql性能调优之 max_allowed_packet 详解 一.背景 mysql报错如下: SQLSTATE[HY000]: General error: 2006 MySQL server h ...

  2. JVM性能调优监控工具使用详解

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:http://uee.me/czpHk 现实企业级J ...

  3. Java虚拟机学习总结(4)—— JVM 性能调优常用参数详解

    前言 在JVM性能调优时有三个组件: 堆大小调整(内存最够大的话,尽量搞大点) 垃圾收集器调整 JIT 编译器(比较深,需要掌握源码才能更好的优化更加底层) 大多数调优选项都与调整堆大小和为您的情况选 ...

  4. mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

    本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...

  5. mysql 配置root密码_Mysql安装与配置调优及修改root密码的方法

    一.安装 apt-get install mysql-server 需要设置账号密码 apt-get isntall mysql-client apt-get libmysqlclient-dev 2 ...

  6. MySQL性能调优my.cnf详解

    MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件 [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 330 ...

  7. mysql 优化300例_MySQL配置文件my.cnf参数优化和中文详解

    Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的 ...

  8. mysql sql执行过程_MySQL探秘(二):SQL语句执行过程详解

    昔日庖丁解牛,未见全牛,所赖者是其对牛内部骨架结构的了解,对于MySQL亦是如此,只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化. 当希望MySQL能够以更高的性能运行查 ...

  9. mysql myisam 行锁_MySQL MYISAM引擎表锁和行锁详解

    MySQL有三种锁:表级锁.行级锁和页面锁.BDB支持页面锁,MyISAM支持表级锁,而innoDB则支持表锁和行级锁.这篇文章主要介绍MYISAM引擎的表锁. 表锁分为读锁(read lock)和写 ...

  10. mysql数据库帐户_MySQL数据库用户帐号管理基础知识详解

    MySQL管理员应该知道怎样通过指定哪些用户可连接到服务器.从哪里进行连接,以及在连接 时做什么,来设置MySQL用户账号.MySQL3.22.11引入了两个更容易进行这项工作的语句:GRANT 语句 ...

最新文章

  1. 动态规划 dp05 插入乘号问题 c代码
  2. jsp 跳到servlet路径_想打开一个jsp的页面就跳转到servlet中去,并向servlet传值。用什么跳转...
  3. Ubuntu下安装谷歌浏览器(Google chrome)报错
  4. SQL之rand,round,floor,ceiling,cast小数处理函数
  5. 学完计算机还是不懂,如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧...
  6. curator分布式锁的基本使用
  7. CVE-2018-1000136:Electron nodeIntegration绕过漏洞
  8. python第2位的值_Python组通过匹配元组列表中的第二个元组值
  9. java retry 实现,java-retry实现
  10. Linux卸载搜狐,搜狐的linux笔试题
  11. 面试官:分布式环境下,如何实现session共享
  12. mysql数据类型内存_mysql 存储金额类型,用什么数据类型比较可靠,一般企业数据用什么数据类型?...
  13. (Quicker)懒人福利:鼠标快捷操作工具箱
  14. 【数据库】“SQLite”+“DEV-CPP”实现C/C++嵌入式编程操作数据库
  15. 计算机算法基础:分治法
  16. natapp 使用教程
  17. 焕然一新的 Vue 3 中文文档来了,附送50张学习思维图
  18. 基于CC2430的基础实验5---时钟模式
  19. 肝了一宿才收集的48个超炫酷的 CSS 文字特效,绝对值得收藏!!!
  20. 学习笔记:使用requests+Beautiful4爬取优美图库

热门文章

  1. Petalinux EMMC启动
  2. AI 算法工程师面试高频 100 题(附答案详解)
  3. js植物大战僵尸实训1
  4. 实时音频编解码之十一Opus编码
  5. 没有磁盘计算机就无法工作,解决办法:Bios找不到硬盘的完美解决方案,请选择STATConfigur...
  6. 随机森林回归树官方例子小结
  7. Java获取字符串长度(length())
  8. 快速使用注解方式实现aop切面编程
  9. MATLAB的数据类型
  10. 《物联网开发实战》05 系统实例:怎样设计一个简易物联网系统?(学习笔记)