#!/bin/sh
#开始前获取全局配置参数
#每五秒获取一次cpu load,MySQL全局信息,InnoDB引擎相关信息,线程信息
INTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/root/running
mysql -e 'show global variables'>>mysql-variables
#通过检测 /root/running文件是否存在作为是否进行获取信息的依据,可以在压测结束时删除此文件停止收集
while test -e $RUNFILE; do
file=$(date +%F_%H)
sleep=$(date +%s.%N |awk "{print $INTERVAL -(\$1 % $INTERVAL)}")
sleep $sleep
ts="$(date +"TS %s.%N %F %T")"
loadavg="$(uptime)" #通过uptime命令获取cpu load
echo "$ts $loadavg">> $PREFIX-${file}-status
mysql -e "show global status" >> $PREFIX-${file}-status & #获取MySQL全局信息
echo "$ts $loadavg">> $PREFIX-${file}-innodbstatus
mysql -e "show engine innodb status\G" >> $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 not exist
对上一步收集到的全局信息进行分析。
#!/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 hi_anaylyze.sh 5-sec-status-2018-02-22_14_status >>4plot.log (将分析后的结果记入4plot.log中)
同样使用gnupot进行绘图分析:
gunplot>plot '4plot' using 5 with lines title 'QPS', 4 with lines title 'load'
#using 5 表示使用第5列数据作图
#with lines 定义图中的趋势使用线来表示
#title 'QPS' 定义线的名称
#使用,(逗号)分割,进行多列数据的绘制
gnuplot绘图示例