group by order by顺序_详解mysql数据库统计分析--events_statements_summary_by_digest

概述

今天主要介绍如何通过Performance-Schema得到DBA关心的数据,比如哪个SQL执行次数最多,哪个表访问最频繁,哪个锁最热等信息。通过充分利用Performance-Schema表的数据,让DBA更了解DB的运行状态,也更有助于排查定位问题。

这里主要借助了events_statements_summary_by_digest ,这个表保存着许多关键指标,抓取了与每条标准化语句有关的延迟、错误和查询量信息。


一、统计信息(SQL维度)

关于SQL维度的统计信息主要集中在events_statements_summary_by_digest表中,通过将SQL语句抽象出digest,可以统计某类SQL语句在各个维度的统计信息(比如:执行次数,排序次数,使用临时表等)

1、执行次数最多的SQL

SELECT DIGEST_TEXT, COUNT_STAR, FIRST_SEEN, LAST_SEEN FROM `performance_schema`.events_statements_summary_by_digest ORDER BY COUNT_STAR DESC;
e41a02a4ce074c2fb24a26b45b734625

可以看到执行次数最多的SQL是INSERT INTO `t_ocs_group_production_temporary` VALUES (...) ,FIRST_SEEN和LAST_SEEN分别显示了语句第一次执行和最后一次执行的时间点。

2、平均响应时间最多的sql

SELECT DIGEST_TEXT, AVG_TIMER_WAIT, COUNT_STAR, FIRST_SEEN, LAST_SEEN FROM `performance_schema`.events_statements_summary_by_digest ORDER BY AVG_TIMER_WAIT DESC;
0172d95e961a4d04aab6904e086e2e9f

可以看到平均响应时间最长的sql是SELECT * FROM `lcp_mq_record` ,这个是一张日志表。

3、排序记录数最多的sql

SELECT DIGEST_TEXT,SUM_SORT_ROWS, COUNT_STAR, FIRST_SEEN, LAST_SEEN FROM `performance_schema`.events_statements_summary_by_digest ORDER BY SUM_SORT_ROWS DESC;
5c40365653cf47a6aaaa8eebb3e43a74

4、扫描记录数最多的sql

SELECT DIGEST_TEXT, SUM_ROWS_EXAMINED, COUNT_STAR, FIRST_SEEN, LAST_SEEN FROM `performance_schema`.events_statements_summary_by_digest ORDER BY SUM_ROWS_EXAMINED DESC;
e7cd180988cc49529b2eda70b70ebe85

5、使用临时表最多的sql

SELECT DIGEST_TEXT, SUM_CREATED_TMP_TABLES, SUM_CREATED_TMP_DISK_TABLES, COUNT_STAR, FIRST_SEEN, LAST_SEEN FROM `performance_schema`.events_statements_summary_by_digest ORDER BY SUM_CREATED_TMP_TABLES desc,SUM_CREATED_TMP_DISK_TABLES desc
b95ade92f7314bba92a15c187c492bce

6、返回结果集最多的SQL

SELECT DIGEST_TEXT, SUM_ROWS_SENT, COUNT_STAR, FIRST_SEEN, LAST_SEEN FROM `performance_schema`.events_statements_summary_by_digestORDER BY SUM_ROWS_SENT desc;
515ba343649544cdbad67a335d58b532

通过上述指标我们可以间接获得某类SQL的逻辑IO(SUM_ROWS_EXAMINED),CPU消耗(SUM_SORT_ROWS),网络带宽(SUM_ROWS_SENT)的对比,但还无法得到某类SQL的物理IO消耗,以及某类SQL访问数据的buffer命中率。


二、统计信息(对象维度)

1、哪个表物理IO最多?

SELECT file_name, event_name, SUM_NUMBER_OF_BYTES_READ, SUM_NUMBER_OF_BYTES_WRITE FROM `performance_schema`.file_summary_by_instance ORDER BY SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE DESC;
17405176dcf74bc7bbaec8a8a77f244b

通过file_summary_by_instance表,可以获得系统运行到现在,哪个文件(表)物理IO最多,这可能意味着这个表经常需要访问磁盘IO,从结果来看perf_stat库里面的is_global_variables的数据文件访问最多。

2、哪个表逻辑IO最多?

SELECT object_schema, object_name, COUNT_READ, COUNT_WRITE, COUNT_FETCH, SUM_TIMER_WAIT FROM `performance_schema`.table_io_waits_summary_by_table ORDER BY sum_timer_wait DESC;
e53b813233014eccabdda1e2ce88d9b5

通过table_io_waits_summary_by_table表,可以获得系统运行到现在,哪个表逻辑IO最多,亦即最“热”的表,从结果来看fsl_prod库里面的t_ocs_employee_attendace表访问次数最多。

3、哪个索引访问最多?

SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME, COUNT_FETCH, COUNT_INSERT, COUNT_UPDATE, COUNT_DELETE FROM `performance_schema`.table_io_waits_summary_by_index_usage ORDER BY SUM_TIMER_WAIT DESC;
52ac51aab7434664a7f65b63dde75acc

通过table_io_waits_summary_by_index_usage表,可以获得系统运行到现在,哪个表的具体哪个索引(包括主键索引,二级索引)使用最多,从结果来看,我们知道t_ocs_employee_attendace表访问最多,并且都是通过t_ocs_production_lines_n1索引访问。

4、哪个索引从来没有使用过?

SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME FROM `performance_schema`.table_io_waits_summary_by_index_usage WHERE INDEX_NAME IS NOT NULL  AND COUNT_STAR = 0  AND OBJECT_SCHEMA <> 'mysql' ORDER BY OBJECT_SCHEMA, OBJECT_NAME;
260bf2ee30614b37b417fbb04c74727a

通过table_io_waits_summary_by_index_usage表,我们还可以获得系统运行到现在,哪些索引从来没有被用过。由于索引也会占用大量的空间,我们可以利用这个统计信息,结合一定的时间策略将无用的索引删除。上面的结果显示,fsl_prod库act_hi_actinst表的ACT_IDX_HI_ACT_INST_END索引从来没有被使用过。


三、统计信息(等待事件维度)

1、哪个等待事件消耗的时间最多?

SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, AVG_TIMER_WAIT FROM `performance_schema`.events_waits_summary_global_by_event_name WHERE event_name != 'idle' ORDER BY SUM_TIMER_WAIT DESC;
759b00173cde454f937191d5a4f070cd

通过events_waits_summary_global_by_event_name表,可以获取到系统运行到现在,消耗时间最多的事件,当然还可以根据其它维度排序,比如平均等待时间,从结果来看wait/io/table/sql/handler这个事件消耗的累计时间最长。


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

e6878148990a42dcac67c5da1bc1c686
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值