搜集mysql在某一段时间内执行了多少sql语句的方法

最近开发提出一个需求,想在他们指定的时间内统计一下业务系统到底执行了多少SQL语句包括查询语句。

其中最终结果只有一个,就是需要纯净无污染的qps和tps数据。

因为次在做类似的查询统计时,类似set之类的设置环境变更的语句在统计时太多。当时统计出来的这类sql的语句量即然达到19亿条之多,而正常的业务查询sql,最大的查询量也就6000万左右。

业务上怀疑是框架导致的问题,于是在修改后,提出要求进行测试。

于是在些进行了一些方案验证,验证过程如下:

(1) 对所涉及的参数进行修改,如下所示;

slow_query_log = on

long_query_time=0

// 开启 记录没有使用索引查询语句
log-queries-not-using-indexes = on

(2) 对数据库进行重新启动,然后查询如下值,发现一切都是从头开始了;

show global status where variable_name in('com_select','com_insert','com_delete','com_update');

show global status where variable_name in('questions','uptime','com_commit','com_rollback');

(3) 对binlog日志和slow日志进行清理,让它们归0;

reset master; 

> slow.log

(4) 开始执行压力测试;

(5) 进行结果统计,通过对慢日志中执行的sql过滤,就能把最近一段时间内的所有sql查询出来。

cat slow-query.log |grep ^[^#] 

但是SET语句也是非常多的,所以还需要进一步过滤。


发布了145 篇原创文章 · 获赞 21 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/wxc20062006/article/details/79786253