2.1 基准测试完成的工作内容
- 1.验证系统的Bug
- 2.测试当前系统的压力负载
- 3.模拟高于当前的压力负载,为未来提供必要的策略
2.2 基准测试的策略
主要分成系统的整体测试和单独组件测试,系统的整体测试主要包含服务器、网络、数据库、应用程序等。单独组件测试只需要关注部分的组件,通过验证获取组件的性能数据。
2.3 编写获取MySQL性能测试脚本
下面是一个收集MySQL的shell脚本 mysqlbenchmark.sh
#!/bin/sh
INTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/home/benchmarks/running
mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW GLOBAL VARIABLES' >> mysql-variables
while test -e $RUNFILE; do
file=$(date +%F_%I)
sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
sleep $sleep
ts="$(date +"TS %s.%N %F %T")"
loadavg="$(uptime)"
echo "$ts $loadavg" >> $PREFIX-${file}-status
mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW GLOBAL STATUS' >> $PREFIX-${file}-status &
echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &
echo "$ts $loadavg" >> $PREFIX-${file}-processlist
mysql -uroot -p111111 -h127.0.0.1 -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist &
echo $ts
done
echo Exiting because $RUNFILE does not exist.
执行: sh mysqlbenchmark.sh
下面是一个分析MySQL数据的shell脚本 analyze.sh
#!/bin/sh
awk '
BEGIN {
printf "#ts date time load QPS";
fmt = " %.2f ";
}
/^TS/ { # The timestamp lines begin with 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
}
' "$@"
执行: sh analyze.sh 5-sec-status-2020-10-28_10-status > status-per-5-seconds
安装gnuplot绘图工具,针对获取性能数据通过图片来呈现,便于发现系统存在的的若干问题。
先执行gnuplot进行画图环境
set encoding utf8
set xlabel "time"
set ylabel "value"
set term pdfcairo lw 2 font "simsun,8"
set output "qps2.pdf"
plot "status-per-5-seconds" using 5 w lines title "fanqps"
set title "fanqps"
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资源
pidstat -d 3