Mysql基准测试

一、基准测试

基准测试的作用:

  • 了解当前系统的性能,建立MySQL服务器性能基准线(为之后的性能优化提供一个超始线)

  • 模拟比当前系统更高的负载,找出系统的扩展瓶颈,为系统扩展与优化提供参考条件

  • 测试不同的硬件、软件和操作系统配置

  • 证明新的硬件设备是否配置正确和是否是最优配置

基准测试可以分为集成式测试和单组件式测试。

  • 集成式测试就是对整个应用系统进行测试,如一个网站应用系统,对整个网站系统进行测试。

  • 单组件式测试是对系统中的某个组件进行测试,如对网站中的数据库这个组件进行测试,或对web服务器这个组件进行测试等。

(一)、集成式测试工具

有http_load,ab,jMeter,wrk等

1、ab的使用

ab即apache bench,是apache httpd包含的一个http压测工具

(1)ab的安装

安装apache httpd即可(详细安装教程请参照:Linux下安装apache httpd及httpd常见用法

(2)ab的常用用法

ab [options] url

  • options表示参数

       -n:请求数

       -c:并发数(请求人数)

       -s:超时时间

  • url表示压力测试的地址

如:

1
ab -n 2000 -c 10000 http://localhost/hello.php

 结果如下:

ab.png

2、wrk的使用

wrk是一款简单的http压测工具,安装和使用都比较简单(推荐使用)

(1)安装

下载地址:http://github.com/wg/wrk

1
2
3
 cd wrk
 make
 cp wrk /usr/local/bin/wrk

(2)使用

wrk <options> url

  • - options:参数

    -c:连接数

       -d:压测时间(可以使用m(分钟)、s(秒)这种单位)

       -t:使用的线程数

  • - url:压测地址

1
 wrk -c20000 -t10 -d1m http://localhost/index.php

  结果如下:

wrk.png

3、jMeter的使用

jmeter相对于其他工具来说相对复杂,之后会有专门的文章来介绍jMeter的使用

(二)、单组件式测试工具

有mysqlslap,sysbench等

1、mysqlslap

它是mysql自带的压测工具

使用:mysqlslap <options>

常用options详解:

  • --auto-generate-sql(或者使用-a),表示使用mysqlslap工具自己生成的sql脚本来测试并发压力

  • --concurency(或者使用-c),表示模拟的多少个客户端同时执行操作

  • --engine(或者使用-e),表示要测试的存储引擎

  • --iterations(或者使用-i),表示在不同的并发环境下,各自测试多少次

  • --number-of-queries=N,表示总的测试查询次数

如:测试单个用户

1
./mysqlslap -a

或:模拟多个用户(100个)

1
./mysqlslap -a -c200

 

2、sysbench

详细使用请参照:mysql优化调优之一:发现问题-基准测试之sysbench的使用

二、性能分析

与测试一样,性能分析也包括对整个应用的性能分析和对单个组件的性能分析,针对整个应用,针对不同的开发平台,有不同的解决方案。如openresty中可以通过火焰图来分析,PHP中可以使用xhprof来分析,或者借助第三方的性能分析工具(一般是收费的,搜索APM即可)

1、应用级性能分析

针对整个应用级的性能分析,非本文的重点,可以根据项目特性选择或开发对应的工具来分析。

2、MySQL性能分析

(1)分析慢查询日志

可以使用mysqldumpslow或者pt-query-digest来分析,具体可参考 mysql慢查询日志分析工具的使用

(2)通过show status和show engine innodb status等

show status可以查看当前服务器的状态:

查看服务器正在执行的命令

1
show status like 'Com_%';

 查看和服务器之间来往的流量:

1
show status like 'Bytes_%';

查看在查询执行期间创建的临时表和文件:

1
show status like 'Created_%';

查看服务器运行时间:

1
show status like 'uptime';

show engine innodb status:查看innodb这种存储引擎的状态

(3)通过show profile

通过show profile可以查看mysql语句的性能损耗在哪些地方

第一步:要打开profiling(可以先查看是否打开)

1
2
show variables like 'profiling';
set profiling = 1;

第二步:执行sql

第三步:查看执行的sql的性能损耗分析报告

查看最近的一条执行结果:

1
show profile;

查看打开profling后所有的结果:但是只显示每条的执行时间:

1
show profiles;

例如:

1
2
3
4
5
mysql>set profling =1;
mysql>select from population where country="cn";
mysql>select from population where city = "beijing";
mysql>select from population where population>=1000000;
mysql>show profile;

查看结果:

show_profile.png

通过上图可以看出整个执行过程每个阶段消耗的时间。

通过show profiles查看:

show_profiles.png

通过上图可以查找每条执行语句消耗的时间

(4)通过show processlist

通过show processlist可以查看目前有哪些线程进行运行,也可以认为这是查找当前mysql连接数的方法,对于出现too many connections的错误,是一个很好的排查方式。

1
show processlist

结果如下:

processlist.png

  •  Id:连接的编号

  • User:连接的用户

  • Host:连接的主机

  • db:连接的数据库名称

  • Command:执行的命令

  • Time:连接持续时间

  • State:连接状态

  • Info:具体执行的SQL语句

主要的State状态:(这个状态值有很多,这里只列举常用的几个,可以根据名称很容易知道其含义)

  • Locked:被其他查询锁定

  • Sending data:正在处理Select查询的记录,时时正在把结果发送给客户端

  • Connect Out:复制从服务器正在连接主服务器

  • Updating:正在搜索匹配的记录,并且修改这些数据

posted @ 2018-01-28 11:08  Darren&  阅读(467)  评论(0编辑  收藏  举报