MySQL 内置的监控工具介绍及使用篇(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 内置的监控工具介绍及使用篇(二)

简单配置及使用

虽然说 performance_schema 服务默认情况下是开启的,但是它里面的一些属性并不是开启的,执行如下语句👇

SELECT * FROM setup_instruments;

ENABLED 代表这个属性是否开启,TIMED 代表计时器是否开启,为了能够完整地监控我们的信息,都把这些开启一下

  • 打开等待事件的采集器配置项开关,需要修改setup_instruments配置表中对应的采集器配置项
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES' where name like 'wait%';
  • 打开等待事件的保存表配置开关,修改setup_consumers配置表中对应的配置项
UPDATE setup_consumers SET ENABLED = 'YES'where name like '%wait%';
  • 当配置完成之后可以查看当前 server 正在做什么,可以通过查询 events_waits_current 表来得知,该表中每个线程只包含一行数据,用于显示每个线程的最新监视事件
mysql> select * from events_waits_current\G
*************************** 1. row ***************************
      THREAD_ID: 13
       EVENT_ID: 485
   END_EVENT_ID: 485
     EVENT_NAME: wait/synch/mutex/innodb/buf_dblwr_mutex
         SOURCE: 
    TIMER_START: 6364820648454270
      TIMER_END: 6364820648844465
     TIMER_WAIT: 390195
          SPINS: NULL
  OBJECT_SCHEMA: NULL
    OBJECT_NAME: NULL
     INDEX_NAME: NULL
    OBJECT_TYPE: NULL
OBJECT_INSTANCE_BEGIN: 60264520
NESTING_EVENT_ID: NULL
NESTING_EVENT_TYPE: NULL
      OPERATION: lock
NUMBER_OF_BYTES: NULL
          FLAGS: NULL
  • 该信息表示线程id为 13 的线程正在等待 buf_dblwr_mutex 锁,等待时间为 30880
    属性说明:
    id:事件来自哪个线程,事件编号是多少
    event_name:表示检测到的具体的内容
    source:表示这个检测代码在哪个源文件中以及行号
    timer_start:表示该事件的开始时间
    timer_end:表示该事件的结束时间
    timer_wait:表示该事件总的花费时间
    注意:_current 表中每个线程只保留一条记录,一旦线程完成工作,该表中不会再记录该线程的事件信息
select thread_id,event_id,event_name,timer_wait from events_waits_history order by thread_id limit 21;

history 表中记录每个线程应该执行完成的事件信息,但每个线程的事件信息只会记录 10 条,再多就会被覆盖,*_history_long表中记录所有线程的事件信息,但总记录数量是 10000,超过就会被覆盖掉

SELECT EVENT_NAME,COUNT_STAR FROM events_waits_summary_global_by_event_name  ORDER BY COUNT_STAR DESC LIMIT 10;

summary 表提供所有事件的汇总信息,该组中的表以不同的方式汇总事件数据(如:按用户,按主机,按线程等等)。例如:要查看哪些 instruments 占用最多的时间,可以通过对 events_waits_summary_global_by_event_name 表的 COUNT_STAR 或SUM_TIMER_WAIT 列进行查询(这两列是对事件的记录数执行COUNT(*)、事件记录的 TIMER_WAIT 列执行SUM 统计而来)

select * from file_instances limit 20; 

instance 表记录了哪些类型的对象会被检测。这些对象在被server使用时,在该表中将会产生一条事件记录,例如,file_instances表列出了文件I/O操作及其关联文件名

实践操作

基本了解了表的相关信息之后,可以通过这些表进行实际的查询操作来进行实际的分析

  1. 哪类的 SQL 执行最多?
SELECT DIGEST_TEXT,COUNT_STAR,FIRST_SEEN,LAST_SEEN FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  1. 哪类 SQL 的平均响应时间最多?
SELECT DIGEST_TEXT,AVG_TIMER_WAIT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC;
  1. 哪类 SQL 排序记录数最多?
SELECT DIGEST_TEXT,SUM_SORT_ROWS FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC;
  1. 哪类 SQL 扫描记录数最多?
SELECT DIGEST_TEXT,SUM_ROWS_EXAMINED FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC;
  1. 哪类 SQL 使用临时表最多?
SELECT DIGEST_TEXT,SUM_CREATED_TMP_TABLES,SUM_CREATED_TMP_DISK_TABLES FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC;
  1. 哪类 SQL 返回结果集最多?
SELECT DIGEST_TEXT,SUM_ROWS_SENT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC;
  1. 哪个表物理 IO 最多?
    逻辑IO是操作系统发起的IO,这个数据可能会放在磁盘上,也可能会放在内存里(文件系统的 Cache)
    物理IO是设备驱动发起的IO,这个数据最终会落在磁盘上
SELECT file_name,event_name,SUM_NUMBER_OF_BYTES_READ,SUM_NUMBER_OF_BYTES_WRITE FROM file_summary_by_instance ORDER BY SUM_NUMBER_OF_BYTES_READ + SUM_NUMBER_OF_BYTES_WRITE DESC;
  1. 哪个表逻辑 IO 最多?
SELECT object_name,COUNT_READ,COUNT_WRITE,COUNT_FETCH,SUM_TIMER_WAIT FROM table_io_waits_summary_by_table ORDER BY sum_timer_wait DESC
  1. 哪个索引访问最多?
SELECT OBJECT_NAME,INDEX_NAME,COUNT_FETCH,COUNT_INSERT,COUNT_UPDATE,COUNT_DELETE FROM table_io_waits_summary_by_index_usage ORDER BY SUM_TIMER_WAIT DESC
  1. 哪个索引从来没有用过?
SELECT OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME FROM 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;
  1. 哪个等待事件消耗时间最多?
SELECT EVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT,AVG_TIMER_WAIT FROM events_waits_summary_global_by_event_name WHERE event_name != 'idle' ORDER BY SUM_TIMER_WAIT DESC
  1. 剖析某条 SQL 执行情况,包括 statement 信息、stege 信息、wait 信息
SELECT EVENT_ID,sql_text FROM events_statements_history WHERE sql_text LIKE '%count(*)%';
  1. 查看每个阶段的时间消耗
SELECT event_id,EVENT_NAME,SOURCE,TIMER_END - TIMER_START FROM events_stages_history_long WHERE NESTING_EVENT_ID = 1553;
  1. 查看每个阶段的锁等待情况
SELECT event_id,event_name,source,timer_wait,object_name,index_name,operation,nesting_event_id FROM events_waits_history_longWHERE nesting_event_id = 1553;
  1. MySQL Server 每秒执行的 Query 总量,计算方式如下:
Questions=SHOW GLOBAL STATUS LIKE 'Questions';
 Uptime = SHOW GLOBAL STATUS LIKE 'Uptime';
 QPS=Questions/Uptime

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 存储 监控
MySQL 内置的监控工具介绍及使用篇(一)
MySQL 内置的监控工具介绍及使用篇
2122 0
|
SQL 缓存 监控
MySQL 内置的监控工具介绍及使用篇(三)
MySQL 内置的监控工具介绍及使用篇(三)
201 0
|
SQL 关系型数据库 MySQL
开发同学的福利--mysql监控工具sqlprofiler,类似sqlserver的profiler工具
原文:开发同学的福利--mysql监控工具sqlprofiler,类似sqlserver的profiler工具   最近无意发现了mysql的客户端监控工具“Nero Profile SQL”,刚开始还不知道怎么使用,经过半小时摸索,现将使用步骤写下来。
2280 0
|
监控 关系型数据库 MySQL
MySQL 淘宝网开源监控工具orzdba安装、使用
转载:http://blog.51cto.com/arthur376/1888931 orzdba是淘宝DBA团队开发出来的一个perl监控脚本,主要功能是监控mysql数据库,也有一些磁盘和cpu的监控选项,好不好用就见仁见智,毕竟各公司需求不尽相同.
1461 0
|
监控 关系型数据库 MySQL
|
存储 监控 关系型数据库
|
监控 关系型数据库 MySQL
|
监控 关系型数据库 MySQL
Mtop,Mysql Top,一个Mysql的监控工具
没有输出就是模块已经安装了,有错误就是相应的模块没有安装。可以在上面给出的地址下载相应模块的最新版本。
2242 0
|
25天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
55 3
|
25天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
61 3