2.1 基准测试完成的工作内容

  • 1.验证系统的Bug
  • 2.测试当前系统的压力负载
  • 3.模拟高于当前的压力负载,为未来提供必要的策略

2.2 基准测试的策略

主要分成系统的整体测试和单独组件测试,系统的整体测试主要包含服务器、网络、数据库、应用程序等。单独组件测试只需要关注部分的组件,通过验证获取组件的性能数据。

2.3 编写获取MySQL性能测试脚本

下面是一个收集MySQL的shell脚本 mysqlbenchmark.sh

  1. #!/bin/sh
  2. INTERVAL=5
  3. PREFIX=$INTERVAL-sec-status
  4. RUNFILE=/home/benchmarks/running
  5. mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW GLOBAL VARIABLES' >> mysql-variables
  6. while test -e $RUNFILE; do
  7. file=$(date +%F_%I)
  8. sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
  9. sleep $sleep
  10. ts="$(date +"TS %s.%N %F %T")"
  11. loadavg="$(uptime)"
  12. echo "$ts $loadavg" >> $PREFIX-${file}-status
  13. mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW GLOBAL STATUS' >> $PREFIX-${file}-status &
  14. echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
  15. mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &
  16. echo "$ts $loadavg" >> $PREFIX-${file}-processlist
  17. mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist &
  18. echo $ts
  19. done
  20. echo Exiting because $RUNFILE does not exist.

执行: sh mysqlbenchmark.sh

下面是一个分析MySQL数据的shell脚本 analyze.sh

  1. #!/bin/sh
  2. awk '
  3. BEGIN {
  4. printf "#ts date time load QPS";
  5. fmt = " %.2f ";
  6. }
  7. /^TS/ { # The timestamp lines begin with TS.
  8. ts = substr($2, 1, index($2, ".") -1);
  9. load = NF - 2;
  10. diff = ts - prev_ts;
  11. prev_ts = ts;
  12. printf "\n%s %s %s %s", ts, $3, $4, substr($load, 1, length($load)-1);
  13. }
  14. /Queries/ {
  15. printf fmt, ($2-Queries)/diff;
  16. Queries=$2
  17. }
  18. ' "$@"

执行: sh analyze.sh 5-sec-status-2020-10-28_10-status > status-per-5-seconds

安装gnuplot绘图工具,针对获取性能数据通过图片来呈现,便于发现系统存在的的若干问题。

先执行gnuplot进行画图环境

  1. set encoding utf8
  2. set xlabel "time"
  3. set ylabel "value"
  4. set term pdfcairo lw 2 font "simsun,8"
  5. set output "qps2.pdf"
  6. plot "status-per-5-seconds" using 5 w lines title "fanqps"
  7. set title "fanqps"
  8. set output

在原目录生成了qps2.pdf文件,关于gnuplot用法请自行查询官网gnuplot

2.4 常用MySQL性能测试工具

2.4.1 sysbench的使用

sysbench是一款比较流行的性能测试工具,支持lua脚本。直接yum install sysbench,如果遇到冲突问题请先安装MySQL-shared和MySQL-shared-compat等其他组件。

sysbench用法
sysbench —help

  • 1.CPU性能测试
    sysbench cpu —cpu-max-prime=20000 run
  • 2.I/O基准测试
    sysbench fileio —file-total-size=10G prepare
    sysbench fileio —file-total-size=10G —file-test-mode=rndrw —time=300 —request=0 run
    sysbench fileio —file-total-size=10G cleanup
  • 3.OLTP测试
    sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua —oltp-table-size=1000000 —oltp-tables-count=10 —mysql-db=test —mysql-user=root —mysql-password=111111 prepare
    sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua —oltp-table-size=1000000 —oltp-tables-count=10 —mysql-db=test —mysql-user=root —mysql-password=111111 —time=60 —oltp-read-only=on —requests=0 —threads=8 run
    sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua —oltp-table-size=1000000 —oltp-tables-count=10 —mysql-db=test —mysql-user=root —mysql-password=111111 cleanup

2.4.2 mysqlslap

mysqlslap的用法
mysqlslap —help
指定查询语句用于测试数据库性能
编辑select_query.sql,定义一个脚本文件
select from sbtest1;
select
from sbtest2;
mysqlslap —user=root —password=111111 —concurrency=1 —number-of-queries=10 —create-schema=test —query=”select_query.sql” –delimiter=”;”

2.4.3 linux常用的性能监控工具

除了传统的top工具外,pidstat用于哪些程序占用了IO资源

  1. pidstat -d 3

2.MySQL基准测试 - 图1