最近开发提出一个需求,想在他们指定的时间内统计一下业务系统到底执行了多少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语句也是非常多的,所以还需要进一步过滤。