登陆

mysql DBA日常监控--计算SQL信息+计算目标+计算等候事情

admin 2019-10-31 323人围观 ,发现0个评论

概述

今日首要介绍怎么经过Performance-Schema得到DBA关怀的数据,比方哪个SQL履行次数最多,哪个表拜访最频频,哪个锁最热等信息。经过充分使用Performanmysql DBA日常监控--计算SQL信息+计算目标+计算等候事情ce-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;

能够看mysql DBA日常监控--计算SQL信息+计算目标+计算等候事情到履行次数最多的SQL是INSERT INTO `t_ocs_group_production_temporary` VALUES (...) ,FIRST_SEEN和LAST_SEEN别离显现了句子第一次履行和最终一次履行的时刻点。

2、均匀呼应时刻最多的sql

SELECT
DIGEST_TEXT,
AVG_TIMER_WAIT,
COUNT_STAR,
FIRST_SEmysql DBA日常监控--计算SQL信息+计算目标+计算等候事情EN,
LAST_SEEN
FROM
`performance_schema`.events_statements_summary_by_digest
ORDER BY
AVG_TIMER_WAIT DESC;

能够看到均匀呼应时刻最长的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;

4、扫描记载数最多的sql

SELECT
DIGEST_mysql DBA日常监控--计算SQL信息+计算目标+计算等候事情TEXT,
SUM_ROWS_EXAMINED,
COUNT_STAR,
FIRST_SEEN,
LAST_SEEN
FROM
`performance_schema`.events_statements_summary_by_digest
ORDER BY
SUM_ROWS_EXAMINED DESC;

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
Smysql DBA日常监控--计算SQL信息+计算目标+计算等候事情UM_CREATED_TMP_TABLES desc,SUM_CREATED_TMP_DISK_TABLES desc

6、回来成果集最多的SQL

SELECT
DIGEST_TEXT,
SUM_ROWS_SENT,
COUNT_STAR,
FIRST_SEEN,
LAST_SEEN
FROM
`performance_schema`.events_statements_summary_by_digest
ORDER BY
SUM_ROWS_SENT desc;

经过上述目标咱们能够直接取得某类SQL的逻辑IO(SUM_ROWS_EXAMINED),CPU耗费(SUM_SORT_ROWS),网络带宽(SUM_ROWS_SENT)的比照,但还无法得到某类SQL的物理IO耗费,以及某类SQL拜访数据的buffer教父3命中率。


二、计算信息(目标维度)

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;

经过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;

经过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;

经过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;

经过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;

经过events_waits_summary_global_by_event_name表,能够获取到体系运转到现在,耗费时刻最多的事情,当然还能够依据其它维度排序,比方均匀等候时刻,从成果来看wait/io/table/sql/handler这个事情耗费的累计时刻最长。


后边会共享更多devops和DBA方面的内容,感兴趣的朋友能够重视下~

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP