MySQL基准测试(二)--方法

MySQL基准测试(二)--方法

目的:

方法不是越高级越好。而应该善于做减法。至简是一种智慧,首先要做的是收集MySQL的各状态数据。收集到了,不管各个时间段出现的问题,至少你手上有第一时间的状态数据,而不是凭空想象的去做剖析和分析问题。

数据模拟参考

仿真多线程插入和查询语句,可以参考Python模拟数据(MySQL数据库)文档

MySQL状态命令的解释

  • SHOW GLOBAL VARIABLES 查看目前的MySQL的各个参数变量值。
  • SHOW GLOBAL STATUS 查看全局的MySSQL的状态信息。
  • SHOW FULL PROCESSLIST 查看当前MySQL当前进程运行的具体信息。
  • SHOW ENGINE INNODB STATUS 查看InnoDB当前的状态信息

备注:

当MySQL出现瞬时负载升高,IO负载增大的时候。SHOW FULL PROCESSLISTpager more联用,可以立马查到当前MySQL线程中的一些问题。现在可以把SHOW FULL PROCESSLIST 封装成一个脚本来执行,效果更佳。也说明MySQL的状态值的收集的重要性!

脚本封装

碰到问题,快速定位问题,把上述的状态命令进行封装。定位查找,脚本如下:

备注:

这里将来会写一个MySQL线上环境的一个实例《xxxxx》,来解释MySQL服务间歇性问题,如:MySQL服务卡壳或者慢查询。

  • exec_mysql_processlist.sh 打出当前进程运行的具体信息
#!/bin/sh
file=$(date +%F_%H_%M_%S)
PREFIX=ZMySQL-edition
loadavg="$(uptime)"
ts="$(date +"TS %s.%N %F %T")"
echo "$ts $loadavg" >> $PREFIX-${file}-processlist
/usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW FULL PROCESSLIST\G‘ >> $PREFIX-${file}-processlist
  • exec_mysql_status.sh 打出当前MySQL的状态信息
#!/bin/sh
file=$(date +%F_%H_%M_%S)
PREFIX=ZMySQL-edition
loadavg="$(uptime)"
ts="$(date +"TS %s.%N %F %T")"
echo "$ts $loadavg" >> $PREFIX-${file}-status
/usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW GLOBAL STATUS‘ >> $PREFIX-${file}-status
  • exec_mysql_innodbstatus.sh 打出当前MySQL Innodb存储引擎的状态信息
#!/bin/sh
file=$(date +%F_%H_%M_%S)
PREFIX=ZMySQL-edition
loadavg="$(uptime)"
ts="$(date +"TS %s.%N %F %T")"
echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
/usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW ENGINE INNODB STATUS\G‘ >> $PREFIX-${file}-innodbstatus

脚本收集

  • collect_mysql.sh 每5秒收集上述各个状态命令的相关信息,并输出到文件中,后续可以用awk等其他格式化命令来分析日志文件,并画图变现出来。
#!/bin/sh
INTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/data/mysqldata/running
/usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW GLOBAL VARIABLES‘ >> mysql-variables
while test -e $RUNFILE; do
    file=$(date +%F_%H)
    sleep=$(date +%s.%N | awk "{print $INTERVAL -(\$1 % $INTERVAL)}")
    sleep 5
    ts="$(date +"TS %s.%N %F %T")"
    loadavg="$(uptime)"
    echo "$ts $loadavg" >> $PREFIX-${file}-status
    /usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW GLOBAL STATUS‘ >> $PREFIX-${file}-status &
    echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
    /usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW ENGINE INNODB STATUS\G‘ >> $PREFIX-${file}-innodbstatus &
    echo "$ts $loadavg" >> $PREFIX-${file}-processlist
    /usr/local/mysql/bin/mysql -uroot -p‘[email protected]‘ -S /data/mysqldata/3306/mysql.sock -e ‘SHOW FULL PROCESSLIST\G‘ >> $PREFIX-${file}-processlist &
    echo $ts
done
echo Exiting because $RUNFILE does not exist.

收集日志的输出结果

[[email protected] scripts]# ls -l
total 63192
-rw-rw-r-- 1 mysql mysql 5504846 Jun 15 18:00 5-sec-status-2018-06-15_17-innodbstatus
-rw-rw-r-- 1 mysql mysql  436374 Jun 15 18:00 5-sec-status-2018-06-15_17-processlist
-rw-rw-r-- 1 mysql mysql 7169459 Jun 15 18:00 5-sec-status-2018-06-15_17-status
-rw-rw-r-- 1 mysql mysql 2695460 Jun 15 18:26 5-sec-status-2018-06-15_18-innodbstatus
-rw-rw-r-- 1 mysql mysql  212897 Jun 15 18:26 5-sec-status-2018-06-15_18-processlist
-rw-rw-r-- 1 mysql mysql 3512080 Jun 15 18:26 5-sec-status-2018-06-15_18-status

其中三个不同的文件分别为MySQL status,processlist和innodb status的具体信息。

脚本分析

  • analyze 分析上述生成的文件如:5-sec-status-2018-06-15_17-status,变成一个固定格式,用于图片输出
#!/bin/sh

awk ‘
   BEGIN{
     printf "#ts date time load QPS";
     fmt = " %.2f";
   }
   /^TS/{
     ts      = substr($2,1,index($2,".")-1);
     load    = NF - 2;
     diff    = ts - prev_ts;
     prev_ts = ts;
     printf "\n%s %s %s %s",ts,$3,$4,substr($load,1,length($load)-1);
   }
   /Queries/{
     printf fmt,($2-Queries)/diff;
     Queries=$2
   }
    ‘ "[email protected]"

分析日志的输出结果

[[email protected] scripts]# ./analyze 5-sec-status-2018-06-15_17-status >>QPS-5-sec-0615
  • 日志信息如下:

    #ts date time load QPS
    1529053574 2018-06-15 17:06:14 0.49 0.00
    1529053579 2018-06-15 17:06:19 0.53 1.00
    1529053584 2018-06-15 17:06:24 0.49 1.20
    1529053622 2018-06-15 17:07:02 0.52 0.39
    1529053627 2018-06-15 17:07:07 0.48 1.20
    1529053632 2018-06-15 17:07:12 0.44 1.20

    画图

    gnuplot为一个制图开源工具。可以通过yum install gnuplot安装。

  • gnuplot_mysql_status.sh 画图,并生成一个为MySQL_STATUS.png的图片。
    #!/bin/bash
    TITLE="MySQL_GLOBAL_STATUS"
    OUTPUT="MySQL_STATUS.png"
    PLOT="plot ‘QPS-5-sec-06161735‘ using 4 title‘LOAD‘ w lines,\
           ‘QPS-5-sec-06161735‘ using 5 title ‘QPS‘ w lines"
    YRANGE="[0:]"
    gnuplot << EOF
       set terminal png small size 480,360
       set title "$TITLE"
       set xtics 60
    #   set mxtics 720
       set yrange $YRANGE
       set grid
       set output "$OUTPUT"
       $PLOT
    EOF
  • 图片如下:

原文地址:https://www.cnblogs.com/zhangshengdong/p/9194691.html

时间: 2024-07-28 16:10:51

MySQL基准测试(二)--方法的相关文章

Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)

什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一种压力测试.用来观察系统在不同压力下的行为,评估系统的容量,观察系统如何处理不同的数据,但是要注意的是基准测试和通常所说的压力测试还是有区别的. 基准测试要尽量的直接和简单,使各个结果之间容易比较,基准测试所使用的数据通常是由测试工具所生成的,只能用于评估服务器的 处理能力:而压力测试通常是通过真实

详解MySQL基准测试和sysbench工具

前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的.本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法. 文章有疏漏之处,欢迎批评指正. 目录 一.基准测试简介 1.什么是基准测试 2.基准测试的作用 3.基准测试的指标 4.基准测试的分类 二.sysbench 1.sysbench简介 2.sysbench安装 3.sysbench语法 4.sysbench使用举例 5.测试结果 三.建议 一.基准测试简介 1.什么

MySQL修改密码方法总结

方法一 使用phpmyadmin,这是最简单的了,修改mysql库的user表, 不过别忘了使用PASSWORD函数. 方法二 使用mysqladmin,这是前面声明的一个特例. mysqladmin -u root -p password mypasswd 输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd. 把命令里的root改为你的用户名,你就可以改你自己的密码了. 当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysq

mysql基准测试工具tpcc-mysql安装、使用、结果解读

TPCC是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统,tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于MySQL基准测试.其源码放在launchpad上,用bazaar管理,项目地址:https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql,专门转对mysql的基准测试工具,模拟电商业务流程.但是tpcc-mysql的结果并未获得TP

tpcc-mysql &nbsp; mysql基准测试工具使用文档

mysql基准测试工具tpcc-mysql的安装和使用1.tpcc-mysql介绍:TPC(Tracsaction Processing Performance Council) 事务处理性能协会是一个评价大型数据库系统软硬件性能的非盈利的组织,TPC-C是TPC协会制定的,用来测试典型的复杂OLTP系统的性能.Tpcc-mysql是percona基于tpcc衍生出来的产品,专用于mysql基准测试.2.官网地址:https://github.com/Percona-Lab/tpcc-mysql

查看三种MySQL字符集的方法(转)

http://database.51cto.com/art/201010/229171.htm ***************************************** MySQL字符集多种多样,下面为您列举了其中三种最常见的MySQL字符集查看方法,该方法供您参考,希望对您学习MySQL数据库能有所启迪. 一.查看MySQL数据库服务器和数据库MySQL字符集. mysql> show variables like '%char%'; +-----------------------

查看mysql数据库版本方法总结

当你接手某个mysql数据库管理时,首先你需要查看维护的mysql数据库版本:当开发人员问你mysql数据库版本时,而恰好你又遗忘了,那么此时也需要去查看mysql数据库的版本...............下文总结一下Linux平台下查看mysql数据库的方法.个人觉得总结的比较全面了. 方法1:登录数据库时,你可以看到对应mysql数据库的版本信息,如下所示: [[email protected] ~]# mysql -u root -p Enter password: Welcome to

mysql基准测试 ,java测试

Mysql 基准测试 基准测试是针对系统设计的一种压力测试. 一.基准测试的主要工作: 1.验证基于系统的一些假设,确认这些假设是否符合实际情况(我们在测试中主要做的也还,只是一些功能测试). 2.重现系统中的某些异常行为,以解决这些异常.(如:web中 用户登陆经常失败,501,502的错误.) 3.测试当前系统的运行情况.(系统稳定性,bug fix ,什么的). 4.模拟比当前系统更高的负载. 5.规划未来的业务增长. 6.测试应用适应可变环境的能力. 7.测试不同硬件,软件,系统之间的配

Mac os X下安装Mysql 以及配置方法和常用命令

一.安装mysql 1.mysql下载地址http://dev.mysql.com/downloads/mysql/我的机器是mac 10.8的;所以使用mysql-5.6.10-osx10.7-x86_64.dmg安装包: 2.安装软件包位于硬盘映象(.dmg)文件中,必须首先双击搜索起中的图标来安装该文件.应当安装图像并显示其内容. 注释:在继续安装前,一定要使用MySQL管理器应用程序(在Mac OS X服务器上)或通过命令行的mysqladmin shutdown关闭所有运行MySQL服