MySQL的基准测试

MySQL的基准测试

基准测试:基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。直接、简单、用于评估服务器的处理能力。

基准测试的目的:

  • 建立MySQL服务器的性能基准线
  • 确定当前MySQL服务器运行的情况
  • 模拟比当前系统更高的负载,以找出系统的扩展的瓶颈增加数据库的开发,观察QPS和TPS的变化
  • 测试不同的硬件、软件和操作系统配置
  • 证明新的硬件设备是否配置正确

如何进行基准测试:

  • 对整个系统进行基准测试
  • 单独对一个组件进行基准测试

MySQL进行性能的基准测试:

  • 单位时间内所处理的事务数(TPS)
  • 单位时间内索处理的查询数(QPS)
  • 响应时间(平均响应时间、最小响应时间、最大响应时间、各时间所占的百分比)
  • 并发量:同时处理的查询请求的数量(正在工作中的并发的操作数或者同时工作的数量)

基准测试的步骤:

  • 对整个系统还是对一个组件
  • 使用什么样的数据
  • 准备基准测试及数据收集的脚本(cpu的使用率、IO、网络流量、状态与计数器的信息等)
    实例脚本:

      #!/bin/bash
      INTERVAL=5   #每隔多长时间收集一次信息
      PREFIX=/home/imooc/benchmarks/$INTERVAL-sec-status #收集的位置
      RUNFILE=/home/imooc/benchmarks/running  #运行标识
      echo "1" > $RUNFILE
      MYSQL=/usr/bin/mysql #mysql的位置
      $MYSQL -e "show global variables" >> mysql-variables #mysql的配置的信息
      while test -e $RUNFILE; do   #循环打印出需要的数据
      file=$(date +%F_%I)
      sleep=$(date +%s.%N | awk '{print 5 - ($1 % 5)}')
      sleep $sleep
      ts="$(date +"TS %s.%N %F %T")"
      loadavg="$(uptime)"
      echo "$ts $loadavg" >> $PREFIX-${file}-status
      $MYSQL -e "show global status" >> $PREFIX-${file}-status &
      echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
      $MYSQL -e "show engine innodb status" >> $PREFIX-${file}-innodbstatus &
      echo "$ts $loadavg" >> $PREFIX-${file}-processlist
      $MYSQL -e "show full processlist\G" >> $PREFIX-${file}-processlist &
      echo $ts
      done
      echo Exiting because $RUNFILE does not exists复制代码
  • 运行基准测试
  • 保存及分析基准测试结果

      #!/bin/bash
      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;
         printf "\n%s %s %s %s",ts,$3,$4,substr($load,1,length($load)-1);
         prev_ts=ts;
         }
         /Queries/{
         printf fmt,($2-Queries)/diff;
         Queries=$2
         }
         ' "$@"复制代码

注意的问题:

  1. 使用生产环境数据时只使用了部分的数据
  2. 在多用户场景中,只做了单用户的测试(建议:使用多线程的并发测试)
  3. 在单服务上测试分布式应用(使用相同的架构进行测试)
  4. 反复的执行同一个查询

Mysql基准测试工具

  1. mysql自带的基准测试工具mysqlslap

    常用的参数:

    --auto-generate-sql:由系统自动生成SQL脚本进行测试

    --auto-generate-sql-add-autoincrement 在生成的表中增加自增ID

    --auto-generate-sql-load-type 指定测试中使用的查询类型

    --auto-generate-sql-write-number 指定初始化数据时生成的数据量

    --concurrency 指定并发的线程的数量

    --engine 指定要测试表的存储引擎,可以用逗号分隔多个存储引擎

    --no-drop 指定不清理测试数据

    --iterations 指定测试运行的次数

    --number-of-queries 指定每一个线程执行的查询的数量

    --debug-info 指定输出额外的内存及cpu的信息

    --number-int-cols 指定测试表中包含的int类型列的数量

    --number-char-cols 指定测试表中包含的varchar类型列的数量

    --create-schema 指定了用于执行测试的数据库的名字

    --query 用于指定自定义SQL的脚本

    --only-print 并不运行测试,而是把生成的脚本打印出来

mysqlslap -uroot -proot --concurrency=1,50,100,200 --iterations=3 --number-int-cols=5 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --number-of-queries=10 --create-schema=test --only-print

  1. mysql自带的基准测试工具sysbench

    安装:

     ./autogen.sh 
    
     ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
    
     make && make install复制代码

    常用的参数:

     --test 用于指定要测试的测试的类型,支持以下的参数
          Fileio 文件系统I/O性能的测试
          cpu cpu性能的测试
          memory 内存性能的测试
          Oltp 测试要指定具体的lua脚本(0.5版本之后不支持了)
          Lua脚本位于sysbench-0.5/sysbench/tests/db
     --mysql-db 用于指定基准测试的数据库名
     --mysql-table-engine 有鬼指定所使用的存储引擎
     --oltp-table-count 指定测试表的数量
     --oltp-table-size 指定每个表中数据的数据行数
     --num-threads 指定测试的并发的线程数量
     --max-time 指定最大的测试时间
     --report-interval 指定间隔多长时间输出一次统计信息
     --mysql-user 指定执行测试的MySQL用户
     --mysql-password指定测试的MySQL用户的密码
    
     prepare 用于准备测试数据
     run 用于实际进行测试
     cleanup 用于清理测试数据复制代码

测试cpu性能:

sysbench --test=cpu --cpu-max-prime=10000 run

测试IO性能:

sysbench --test=fileio --file-total-size=1G prepare

sysbench --test=Fileio --num-threads=8 --init-rng=on --file-total-size=1G --file-test-mode=rndrw --report-interval=1 run

grant all privileges on . to sbtest@'localhost' identified by '123456';

sysbench --test=./oltp.lua --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-db=tests --mysql-user=sbtest --mysql-password=123456 --oltp-tables-count=10 --mysql-socket=/usr/local/mysql/data/mysql.sock prepare

sysbench --test=./oltp.lua --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-db=tests --mysql-user=sbtest --mysql-password=123456 --oltp-tables-count=10 --mysql-socket=/usr/local/mysql/data/mysql.sock run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值