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

article/2025/3/19 4:30:04

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

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

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

CPU:

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

7f68657b2436ed330e87402445e123b7.png

上图可以看到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

17b1eca9761f8ac09a846743001a7b23.png

内存:

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(需要参照网上自己编译安装)

fb39ed01debdd57c2ce7a2f92f7334ed.png

全面的工具:

dstat  -tclmdny 1

3962451acf2baa88b8a6fd035f4e26c3.png

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即可只保存配置信息,不记录密码】

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

ccb46bc2f6133a88400b0635659348d5.png

29814b38dec13bd7a2c82b728bba7f66.png

9f634495f2fcf39315282419fc017014.png

52ea23224f2499f6328e60b077826c57.png

9a55f01a7884145d796fc7da09f3b8ba.png

e9bc1b36060ecd9eba831650c595e35b.png

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

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

6539437ce3ae854353173fb09e19b3c1.png

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

06d7b622e3bc41ebe3fe97769ca782b4.png

输入Q,可以查看query list

4ad1189a65af176cb6c01f8080ce5e13.png

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

c6a78d0894ac9f4bb1eca0501ccbe3a8.png

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

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

ad7532e303c84eb40b556026bd077d47.png

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

05272c85ee9405c5d3d13e668c2350eb.png

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

6154b6bb0601ceb3ed8a7e37751711e0.png

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

c9eb715083f077aa082b117a18a8909d.png

./orzdba -innodb -C 10 -i 1

45818a267c83898f296594d90d1bccee.png

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远程连接去获取信息

ac7fb27e1b750b1675dec377d45386d9.png

搜集MySQL性能数据

./doDBA-h=127.0.0.1 -mysql

8d40ae73f1138efa8a3027005cf66574.png

执行前需要先去修改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

2556958e75e5c2da272f81ad7cce8ad0.png

搜集MySQL及Linux性能数据

./doDBA-h=127.0.0.1 -myall

1116d7d99a53d09def0c97d511ed5d05.png

类似Mytop的功能

./doDBA-h=127.0.0.1 -mytop

99bd38d71392825d915990c01663a356.png

搜集到日志文件

./doDBA-h=127.0.0.1 -mytop-log

dddf3d8f252f4813be729fabf2b17dc3.png

开启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。


http://chatgpt.dhexx.cn/article/URw4HYlu.shtml

相关文章

3种方法删除7-Zip压缩包的密码

7-Zip压缩软件是一款完全免费且开源的软件,不仅能压缩和解压7-Zip压缩包,还能给压缩包设置打开密码。 有些小伙伴可能会遇到这样的问题,7-Zip压缩包设置密码后,过了一段时间不需要密码保护了,或者一不小心忘记了密码&…

人大金仓数据库软件下载

作为国产数据库的头部企业,人大金仓的数据库基于开源数据库PostgreSQL开发而成,具有较好的性能及使用体验。这里先来一段人大金仓对自己产品的描述: 人大金仓致力于打造最便捷的国产化替代方案,最可靠、最智能的数据库产品服务&am…

金仓数据库KingbaseES客户端连接问题

关键字: KingbaseES,客户端连接 尽管可能在客户端出现的错误情况范围宽广而且是应用相关的,但的确有几种与服务器的启动方式直接相关。除了下面提到的几种错误之外的问题都应该在相应的客户端应用文档中。 这是常见的"I couldnt find…

金仓数据库KingbaseES的连接方法

关键字: KingbaseES,数据库连接 内容正文: 在访问数据库前,启动数据库服务器后,要先连接我们需要访问的数据库,才能对数据库进行操作,下面我们将对KingBaseES数据库的连接方法进行总结&#…

KingBase数据库【人大金仓数据库】jdbc链接

jdbc链接 首先明确自己的金仓数据库的版本明确自己的驱动demo代码 首先明确自己的金仓数据库的版本 我是2022年2月14号,从官网下载的:8.6的版本。 你们一定要看好自己的版本,因为jdbc的jar是要对应版本的,我当时没注意&#xff0…

人大金仓数据库怎么样?好用吗?

人大金仓总体来看属于数据库第一梯队。 有保障:国产数据库老牌玩家,是最早在国内开展数据库教学、研究与开发的专家在1999年创立的,现在属于央企,KingbaseES是入选国家自主创新产品目录的唯一数据库产品。 口碑和市场:…

DataGrip连接人大金仓数据库(kingbase)详细教程【超详细】

DataGrip连接人大金仓数据库(kingbase)详细教程【超详细】 第一步:下载DataGrip第二步:添加人大金仓的数据库引擎第三步:输入账号密码连接第四步:查看数据库关于连接其它数据库 第一步:下载Data…

人大金仓数据库迁移工具

人大金仓数据库迁移工具 人大金仓帮助文档: 链接:https://pan.baidu.com/s/1mbp9m5zaxatsq2fhianAYg 提取码:9s13 复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V3的分享 上一篇已经写完如何安装人大金仓数据库&a…

​ 金仓数据库KingbaseES数据库如何启停和重启

关键字 数据库、启动数据库、停止数据库、重启数据库 KingbaseES数据库服务启动 在访问数据库之前,必须启动数据库服务器。可通过命令: ps -ef|grep kingbase 查看数据库服务器当前是否处于启动状态。如下图所示,kingbase进程存在且为正常开启…

国产化人大金仓数据库转库工具:oracle12c数据库转kingbase8.6人大金仓数据库实例演示

oracle12c数据库转人大金仓数据库实例演示 第一章:数据准备① 人大金仓建库建用户② 人大金仓授权表空间③ 人大金仓创建 schema 表第二章:转库演示① 转库工具准备② 创建源库和目的库数据库连接③ 创建迁移任务④ 启动迁移任务⑤ 迁移完成,…

金仓数据库安装教程

安装教程 前期工作环境要求硬件要求 预安装步骤安装包准备预安装准备创建安装用户安装目录数据目录 安装步骤启动安装程序 前期工作 环境要求 安装金仓数据库管理系统 KingbaseES V8R6 ,需要 Linux 系统满足以下环境参数,否则安装可能会出现错误。 硬…

人大金仓数据库(kingbase7d)操作入门指南

一直以来,通过在CSDN上搜索、学习相关技术知识,解决了诸多工作中遇到的问题。自己却从未发表贡献过一篇文章,深感内疚。近期,公司由于与金仓公司合作,需要将数据迁移至人大金仓数据库,本人有幸参与此工作&a…

人大金仓数据库的备份与还原 KingbaseES V8R6

人大金仓数据库的备份与还原 文章目录 人大金仓数据库的备份与还原前言备份sys_dump 命令 还原ksql 命令sys_restore 一. 从人大金仓数据库备份还原到人大金仓数据库二 从postgresql数据库备份还原到人大金仓数据库 后记 前言 本文记录一次使用人大金仓数据库(King…

kingbase(人大金仓)数据库的常用知识点与简单巡检

KES服务的启停 查看服务是否已设为开机自启 systemctl list-dependencies |grep kingbase 除了使用systemctl和service还可以使用sys_ctl管理KES服务 也可以到安装目录下的Server/bin/目录下执行sys_ctl命令 sys_ctl -D /../data/ start 问题: 人大金仓数据库连接人…

人大金仓KingBase安装手记

一、前言 因为工作需要后续要引入使用人大金仓的数据库,本次先尝试在虚拟机环境完成人大金仓的数据库安装工作,特记录如下。 二、环境准备 (一)操作系统 1、安装版本 本次选择使用Ubuntu Server 22.04.2 LTS版本,…

金仓数据库KingbaseES数据库概念(五)--数据库实例体系结构

目录 1. 实例结构 2. 进程结构 3. 内存结构 1. 实例结构 KingbaseES 数据库管理系统,由数据库文件和KingbaseES实例组成。 数据库文件 数据库文件为存储用户数据以及元数据的一组磁盘文件。 元数据为描述数据库结构、配置和控制有关的信息。 KingbaseES实例 …

猿创征文 | 国产数据库之人大金仓数据库详解安装和使用

文章目录 1、KingbaseES是什么数据库2、KingbaseES数据库产品优势3、KingbaseES安装包下载地址4、KingbaseES数据库安装1、windows安装KingbaseES1、图形化界面安装2、命令行安装3、静默安装 2、Linux安装KingbaseES1、图形化安装2、命令行安装3、静默安装 1、KingbaseES是什么…

UCF101数据集标签错误解决方案

最近在用ECO视频理解方案,进行数据处理时,发现了一个标签和视频名对应不上的问题,然后导致程序运行错误,问题描述如下: 出现问题后,逐步排查代码,发现代码没有问题,让我百思不得其解…

关于如何将动作识别数据集UCF101中的每一小段视频按类别分割成一帧帧图片

关于如何将动作识别数据集UCF101中的每一小段视频按类别分割成一帧帧图片 本人搜索了好位博主的解决方案,效果始终不能满足我的要求,后来在他人的代码基础上加以改进,成功分割。代码如下: import cv2 import osvideo_path .../U…

PyTorch implementation for ECO,finetune on ucf101

方法出自论文 ECCV2018 " Efficient Convolutional Network for Online Video Understanding" 接口出自https://github.com/mzolfaghari/ECO-pytorch 环境要求 作者: Python 3.5.2 PyTorch 0.4.1 TorchVison: 0.2.1 我的: centos系统 Pytho…