IP架构
sysbench部署服务器:172.17.100.107
压测服务器:172.17.100.100(虚拟机)
配置:4核8G
数据磁盘:100G
MySQL部署目录:/usr/local/mysql
前置工作
#关闭SElinux
sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux
setenforce=0
防火墙配置172.17.100.0/24网段通畅,3306端口开放
##############################
因为此前在部署sysbench的时候已经完成了gcc,libtool,openssl的部署,此处不确定是否需要完成相关动态库的部署,该部分的部署调试参照前文的前置工作部分:MySQL压测--sysbench安装与使用
##############################
下载
原安装路径下载
wget http://imysql.com/wp-content/uploads/2014/09/tpcc-mysql-src.tgz
叶总修改后的版本下载
http://imysql.com/…tpcc-mysql-src-yejr-20141010.zip
##############################
两个版本的对比就是叶总对表主键列进行了自增处理,以及取消了外键;
具体区别可以参看叶总的相关文章
##############################
安装
cd /usr/local/tpcc-yejr-mysql/src
make
如果没有报错的话,会在/usr/local/tpcc-yejr-mysql/ 路径下生成tpcc_load、tpcc_start
前一个用来灌数据,后一个用来压测
(个人习惯)修改初始化表脚本名
mv /usr/local/tpcc-yejr-mysql/create_table-aidpk.sql /usr/local/tpcc-yejr-mysql/create_table.sql
压测部分(采用叶总版本)
初始化数据库环境
建库
mysqladmin -h 172.17.100.100 -utpcc -ptpcc create tpcc
建表
mysql -utpcc -ptpcc -h 172.17.100.100 tpcc < /usr/local/tpcc-yejr-mysql/create_table.sql
灌测试数据
语法:
./tpcc_load TCP/IP dbname user "password" N
N:创建的仓库数量
TCP/IP:如果不是通过远程连接的话,tpcc默认会读取/var/lib/mysql/mysql.sock,这样需要做一个软链接
dbname:数据库名,也就是tpcc了
user:账号
password:密码
本次测试创建100个warehouse
./tpcc_load 172.17.100.100 tpcc tpcc "tpcc" 100
(没有采用并行脚本,以本机的硬件水平,本次创建100个仓库花费在2个小时以上...崩溃)
(文末附并行导入脚本,据说效率提升10倍以上)
完成数据灌入,占用空间23G
执行压测
语法:./tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time -i report_interval -f report_file
./tpcc_start -h 172.17.100.100 -P 3306 -d tpcc -u tpcc -p tpcc -w 100 -c 64 -r 600 -l 3600 -i 10 -f tpcc_64threads_`date +%Y%m%d%H%M%S`.log
静候结果...
压测完成
tpcc压测完成
附录(并行导入脚本)
######################################################################
#!/bin/bash
# Configration
MYSQL=/usr/local/mysql/bin/mysql
TPCCLOAD=./tpcc_load
TABLESQL=./create_table.sql
# CONSTRAINTSQL=./add_fkey_idx.sql
IP=172.17.100.100
DEGREE=`getconf _NPROCESSORS_ONLN`
SERVER=localhost
DATABASE=tpcc
USER=tpcc
PASS=tpcc
WAREHOUSE=100
# Load
set -e
$MYSQL -h $IP -u $USER -p$PASS -e "DROP DATABASE IF EXISTS $DATABASE"
$MYSQL -h $IP -u $USER -p$PASS -e "CREATE DATABASE $DATABASE"
$MYSQL -h $IP -u $USER -p$PASS $DATABASE < $TABLESQL
# $MYSQL -u $USER -p$PASS $DATABASE < $CONSTRAINTSQL
echo 'Loading item ...'
$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 1 1 $WAREHOUSE > /dev/null
set +e
STATUS=0
trap 'STATUS=1; kill 0' INT TERM
for ((WID = 1; WID <= WAREHOUSE; WID++)); do
echo "Loading warehouse id $WID ..."
(
set -e
# warehouse, stock, district
$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 2 $WID $WID > /dev/null
# customer, history
$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 3 $WID $WID > /dev/null
# orders, new_orders, order_line
$TPCCLOAD $SERVER $DATABASE $USER $PASS $WAREHOUSE 4 $WID $WID > /dev/null
) &
PIDLIST=(${PIDLIST[@]} $!)
if [ $((WID % DEGREE)) -eq 0 ]; then
for PID in ${PIDLIST[@]}; do
wait $PID
if [ $? -ne 0 ]; then
STATUS=1
fi
done
if [ $STATUS -ne 0 ]; then
exit $STATUS
fi
PIDLIST=()
fi
done
for PID in ${PIDLIST[@]}; do
wait $PID
if [ $? -ne 0 ]; then
STATUS=1
fi
done
if [ $STATUS -eq 0 ]; then
echo 'Completed.'
fi
exit $STATUS
######################################################################
参考文档:
做图部分:运维之美-tpcc
实验部分:老叶茶馆-tpcc
后续:优化后的压测对比