@wxf
2018-01-26T09:21:24.000000Z
字数 3776
阅读 822
【实战课】MySql性能管理及架构设计
基准测试是针对系统设置的一种压力测试,用于评估服务器的处理能力。
mysqlslap工具是mysql自带的基准测试工具不需要安装。
mysqlslap --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=sbtest -uroot -p
sysbench一款常用其非常全面的测试工具,使用灵活。
安装步骤
# 下载地址
https://github.com/akopytov/sysbench/archive/0.5.zip
# 解压包
unzip sysbench-0.5.zip
# 在sysbench-0.5中运行 ./autogen.sh
cd sysbench-0.5
./autogen.sh
# 配置参数信息
./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
# 编译安装
make && make install
错误解决
sysbench 0.5中使用sysbench --help
报错
[root@mvxl0781 bin]# sysbench --help
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
# 环境变量配置文件
vi /etc/profile
# 添加mysql的环境变量配置信息
export LD_LIBRARY_PATH=/usr/local/mysql/lib
# 设置立即生效
source /etc/profile
CPU性能测试(单核CPU性能)
sysbench --test=cpu --cpu-max-prime=10000 run
# --test 表示测试类型
# --cpu-max-prime 表示在CPU中计算的最大整数值
文件I/O性能测试
sysbench可以测试不同I/O负载下的性能。
# 查看系统内存
free -m
# 查看磁盘空间
df -lh
# 生成测试数据
sysbench --test=fileio --file-total-size-2G prepare
sysbench --test=fileio --num-threads=8 --init-rng-on --file-total-size=2G --file-test-mode=rndrw --report-interval=2 run
数据库性能测试
sysbench --test=/usr/local/sysbench-0.5/sysbench/tests/db/oltp.lua --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-db=imooc --mysql-user=root --mysql-password=ystdLinux! --oltp-tables-count=10 --mysql-socket=/usr/local/mysql/data/mysql.sock prepare
sysbench --test=/usr/local/sysbench-0.5/sysbench/tests/db/oltp.lua --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-db=imooc --mysql-user=root --mysql-password=ystdLinux! --oltp-tables-count=10 --mysql-socket=/usr/local/mysql/data/mysql.sock run
获取测试结构的脚本
Get_Test_info.sh
#!/bin/bash
INTERVAL=5
PREFIX=/home/imooc/benchmarks/$INTERVAL-sec-status
RUNFILE=/home/imooc/benchmarks/running
echo "1" > $RUNFILE
MYSQL=/usr/local/mysql/bin/mysql
$MYSQL -e "show global variables" >> mysql-variables
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
analyze.sh
#!/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
}
' "$@"
参考资料:sysbench 0.5 基准测试