mysql latency timer_MySQL日常监控及sys库的使用【转】

一、统计信息(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;

2d376bcdc3098329f3e051f26459d3ed.png

可以看到执行次数最多的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;

6e27255d03df4bf0b0fd6e4bcfaf4493.png

可以看到平均响应时间最长的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;

22f7782429219609aff6b232a149b170.png

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;

32ab3feddb67df4bad166c77c46c64d0.png

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

60d5d88cb07646a620e5248aeda7320d.png

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;

0c6966c235febe4e4ee8fffc71c07654.png

通过上述指标我们可以间接获得某类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;

c7d19186efa3dfa8276d9c6c6eb5c384.png

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

de80e586a380ebabd583daaf091c2bf7.png

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

236cf02c4a39a75c393f3048210e0b55.png

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

c3dcd9b5e6402b404ff69985c2c6a0da.png

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

4a62e558bed10f4166988a7e901f7f5b.png

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

概述

MySQL5.7的新特性中,非常突出的特性之一就是sys库,不仅可以通过sys库完成MySQL信息的收集,还可以用来监控和排查问题。下面介绍一些常用的用法。

一、用户、连接类

1、查看每个客户端IP过来的连接消耗资源情况。

select * from sys.host_summary;

45f8a244d0d15b6dc0dfe88848bcaa2c.png

2、查看每个用户消耗资源情况

select * from sys.user_summary;

bc52e21dd15e9cc7546b0ac708ce563c.png

3、查看当前连接情况(有多少连接就应该有多少行)

select host,current_connections,statements from sys.host_summary;

b92716b9deb6d1c98913a59c6707cafb.png

4、查看当前正在执行的SQL

和执行show full processlist的结果差不多

select conn_id,pid,user,db,command,current_statement,last_statement,time,lock_latency from sys.session

e1af79cc795404905cc13e5b052182f8.png

二、SQL 和io类

1、查看发生IO请求前5名的文件。

select * from sys.io_global_by_file_by_bytes order by total limit 5;

fc8ea40d2cf8f32e18829322274cd471.png

三、buffer pool 、内存

1、查看总共分配了多少内存

select * from sys.memory_global_total;

select * from sys.memory_global_by_current_bytes;

d49e0118ffc32ee72e35f9778dd53a9d.png

2、每个库(database)占用多少buffer pool

select * from sys.innodb_buffer_stats_by_schema order by allocated desc;

2c8fc8530a379c7b211276cbac3030e5.png

pages是指在buffer pool中的page数量;pages_old指在LUR 列表中处于后37%位置的page。

当出现buffer page不够用时,就会征用这些page所占的空间。37%是默认位置,具体可以自定义。

3、统计每张表具体在InnoDB中具体的情况,比如占多少页?

注意和前面的pages的总数都是相等的,也可以借用sum(pages)运算验证一下。

select * from sys.innodb_buffer_stats_by_table;

bed5b0ff96944b4d187fba5ed187e31d.png

4、查询每个连接分配了多少内存

利用session表和memory_by_thread_by_current_bytes分配表进行关联查询。

SELECT

b.USER,

current_count_used,

current_allocated,

current_avg_alloc,

current_max_alloc,

total_allocated,

current_statement

FROM

sys.memory_by_thread_by_current_bytes a,

sys.SESSION b

WHERE

a.thread_id = b.thd_id;

520eb8a8b2c9e79de59249b7c288e157.png

四、字段、索引、锁

1、查看表自增字段最大值和当前值,有时候做数据增长的监控,可以作为参考。

select * from sys.schema_auto_increment_columns;

fe28371cba1562a30cf1d6069a76ecd1.png

2、MySQL索引使用情况统计

select * from sys.schema_index_statistics order by rows_selected desc;

547fc934f1ca3fe372d07c47034eef51.png

3、MySQL中有哪些冗余索引和无用索引

若库中展示没有冗余索引,则没有数据;当有联合索引idx_abc(a,b,c)和idx_a(a),那么idx_a就算冗余索引了。

select * from sys.schema_redundant_indexes;

3f137cebf5b543564f0a2b0abb6a2df2.png

4、查看INNODB 锁信息

在未来的版本将被移除,可以采用其他方式

select * from sys.innodb_lock_waits

ea0090bccdf7e8f0287a7ad79775ff0e.png

5、查看库级别的锁信息,这个需要先打开MDL锁的监控:

--打开MDL锁监控

update performance_schema.setup_instruments set enabled='YES',TIMED='YES' where name='wait/lock/metadata/sql/mdl';

select * from sys.schema_table_lock_waits;

681eb5afeaa543337723f937d9513a4e.png

五、线程类

1、MySQL内部有多个线程在运行,线程类型及数量

select user,count(*) from sys.`processlist` group by user;

a38683a3029ff9d0e71474c92d95c287.png

六、主键自增

查看MySQL自增id的使用情况

SELECT

table_schema,

table_name,

ENGINE,

Auto_increment

FROM

information_schema.TABLES

WHERE

TABLE_SCHEMA NOT IN ( "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "MYSQL", "SYS" )

f3939a5d0bf03b261cace0e76945dc47.png

mysql DBA日常监控--统计SQL信息+统计对象+统计等待事件

https://www.toutiao.com/i6733922916485825035/

一文看懂mysql sys库常见用法--实现数据库信息的收集及监控

https://www.toutiao.com/i6733911133750559245/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值