zoukankan      html  css  js  c++  java
  • 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:正在搜索匹配的记录,并且修改这些数据

  • 相关阅读:
    【14】算法 (哈希)
    【1】c++11 智能指针
    【13】算法 (平衡二叉树AVL、红黑色RBT、B+树、B-树详解)
    JavaScript 基础四
    JavaScript 基础三
    JavaScript 基础二
    遍历数组,对象和JSON
    创建对象的两种方式
    CSS3动画旋转——(图片360°旋转)
    产品运营和数据分析
  • 原文地址:https://www.cnblogs.com/Darrenblog/p/8370721.html
Copyright © 2011-2022 走看看