Mysql qps 数据统计和分析
1.工作准备
1.1 mysql相关 配置准备
#打开查询日志
Set global general_log = 1;
Set global general_log_file =’/data/mysqldata/data/localhost1.log’
注意:log_output这个参数需要设置为file,如果为table就不会记录到文件了
#打开满查询日志(默认是开的)
Set gloabl log_slow_queries = 1;
#修改满查询阀值(默认1s改成0.5s)
Set global long_query_time = 0.5;
#打开未使用索引查询记录
Set global log_queries_not_using_indexes = 1;
以上配置是,打开相关日志记录的参数,慢查询,和不适用索引查询的sql
统计QPS
2.1 QPS= select + update+ insert+delete
这里我们只统计数据库每秒执行的select,update,insert和delete数量(增量数据)。
因为数据库里面这些参数对应的值都是当前值, 而不是每秒的增量,所以,我们需要自己写脚本去搜集
Select ------>Com_select
Update ------>Com_update
Insert ------>Com_insert
Delete ------>Com_delete
2.2 去qps增量值保存到文件
这里我们采用mysqladmin -u7roaddba -p -r -i 1 exttended-status来动态增量获取上面对应参数的值。
这里-r 是去增量值,-i 是刷新取值频率,这里是每秒
在mysql服务器,系统层面执行
mysqladmin -u7roaddba -p -r -i 1 ext |awk -F"|" "BEGIN{ count=0; }"'{ if($2 ~ /Variable_name/ && ++count == 1){\
print "---------- MySQL Command Status -- --";\
print "---Time---|select insert update delete";\
}\
else if ($2 ~ /Com_select /){com_select=$3;}\
else if ($2 ~ /Com_insert /){com_insert=$3;}\
else if ($2 ~ /Com_update /){com_update=$3;}\
else if ($2 ~ /Com_delete /){com_delete=$3;}\
else if ($2 ~ /Uptime / && count = 2){\
printf(" %s ",strftime("%Y-%m-%d %H:%M:%S"));\
printf(",%6d ,%6d ,%6d ,%6d\n",com_select,com_insert,com_update,com_delete);\
}}' |tee -a a.csv
这里会吧上面的几个指标值,按照‘,’ 分割来写入文件a.csv中保存下来
看下a.csv中的内容
3,收集慢查询和general log日志文件
3.1 将服务器的general log日志和慢查询日志下载到本地保存
如:
这里的慢查询日志名是 slow-query.log
General log 日志名是 localhost.log
差不多5个小时,可能general log的日志文件就会填充到1G 大小以上
4,处理和分析阶段
4.1 将qps 抓取的数据,导入到本地空闲的mysql服务器中
这里我们导入到test库中
创建表
Create table qps(ctime datetime,
svalue int(11),
uvalue int(11),
ivalue int(11),
dvalue int(11));
将搜集qps的文件a.csv复制到mysql的数据目录下的test目录中
Mysql> load data infile‘a.csv’into qp