掌握MySQL性能监控 · performance_schema 使用快速入门

请在此添加图片描述

performance_schema 使用快速入门

在数据库性能调优的过程中,performance_schema 是一个非常有用的工具,它可以帮助我们深入分析 MySQL 内部的性能表现。通过合理使用 performance_schema,我们可以发现数据库中的性能瓶颈并做出优化。本文将以 MySQL 5.8 为例,详细介绍如何使用 performance_schema。

检查数据库是否支持 performance_schema

在 MySQL 5.8 中,performance_schema 默认已启用,可以直接开始使用它。但是,为了确保其正常工作,首先我们需要检查当前数据库实例是否支持 performance_schema

可以使用以下两种方法来确认:

使用 INFORMATION_SCHEMA.ENGINES 表查询

SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE = 'PERFORMANCE_SCHEMA';

请在此添加图片描述

使用 SHOW ENGINES 命令

SHOW ENGINES;

请在此添加图片描述

在查询结果中,若 PERFORMANCE_SCHEMASupport 字段值为 YES,则表明该功能在当前数据库中可用。

如果执行 SHOW ENGINES,结果如下:

+--------------------+---------+------------------------+
| Engine             | Support | Comment                |
+--------------------+---------+------------------------+
| PERFORMANCE_SCHEMA | YES     | Performance Schema     |
+--------------------+---------+------------------------+

这意味着 performance_schema 已启用,可以开始使用它来分析数据库性能。

启用或关闭 performance_schema

虽然 MySQL 5.8 默认启用 performance_schema,但在某些情况下,可能需要手动启用或关闭它。这可以通过配置文件或 SQL 语句来完成。

在配置文件中启用或关闭 **performance_schema**打开 MySQL 的配置文件 my.cnf,添加以下配置来显式

启用:performance_schema=ON 或关闭:performance_schema=OFF

启动 MySQL 后查看启用状态 启动 MySQL 之后,可以通过下面的语句确认 performance_schema 是否成功启用:

SHOW VARIABLES LIKE 'performance_schema';

请在此添加图片描述

如果返回值为 ON,则说明 performance_schema 已成功启用;如果为 OFF,则表示功能未启用。

SQL 语句临时修改 performance_schema 的状态(而不是永久修改配置文件),可以使用以下命令:

SET GLOBAL performance_schema = ON;

示例:执行以下 SQL 语句:SHOW VARIABLES LIKE ‘performance_schema’;

+-------------------+-------+
| Variable_name      | Value |
+-------------------+-------+
| performance_schema | ON    |
+-------------------+-------+

这里的 ON 表示 performance_schema 已启用。

performance_schema 表的分类

performance_schema 是由一系列表组成的,这些表主要用于收集数据库运行过程中的各种性能数据。为了更方便地使用,这些表按照不同维度进行分类。了解这些表的分类和用途,可以帮助在实际使用中迅速找到所需的信息。

以下是常用的 performance_schema 表分类:

语句事件记录表

  • events_statements_current:记录当前执行的 SQL 语句。
  • events_statements_history:记录最近执行过的 SQL 语句,最多保存 10 条历史记录。
  • events_statements_history_long:记录更长时间的 SQL 语句历史,最多保存 10000 条记录。
  • 相关 summary 表:这些汇总表提供了 SQL 语句的执行情况摘要,可以根据用户、主机、线程等维度进行分析。

等待事件记录表

  • 这些表用于记录等待事件的详细信息,如线程在等待 I/O 操作或锁时的情况。与语句事件记录表类似,也有 currenthistory 表。

阶段事件记录表

  • 记录 SQL 语句执行过程中各个阶段的细节,如优化、执行、提交等阶段的情况。

事务事件记录表

  • 专门记录与事务相关的事件,如事务开始、提交、回滚等操作。

示例:可以通过以下 SQL 查询语句,找出占用执行时间最长的 SQL 语句:

SELECTDIGEST_TEXT,COUNT_STAR,SUM_TIMER_WAIT
FROMPERFORMANCE_SCHEMA.events_statements_summary_by_digest
ORDER BYSUM_TIMER_WAIT DESC
LIMIT 5;

这个查询可以帮助快速定位哪些 SQL 语句是系统的性能瓶颈,特别是哪些 SQL 语句执行得最慢、执行次数最多。

请在此添加图片描述

注意:

如果在查询时收到“Table ‘PERFORMANCE_SCHEMA.events_statements_summary_by_digest’ doesn’t exist”的错误消息,可能有以下几个原因:

  • performance_schema 未启用

确保 performance_schema 已经启用。可以通过以下命令检查其状态:

SHOW VARIABLES LIKE 'performance_schema';

如果返回结果显示 ValueOFF,则需要启用它。可以通过编辑 MySQL 配置文件或在运行时使用 SQL 命令来启用它。

  • 采集器未启用

即使 performance_schema 已启用,某些表也可能因为相关的采集器未启用而不可用。需要确保相关的采集器和消费者已经启用。例如,要启用语句事件的采集器,可以运行以下命令:

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%';
  • 消费者未启用

同样,确保相关的消费者也已经启用。例如,要启用语句事件的消费者,可以运行以下命令:

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_statements_summary_by_digest%';
  • MySQL 版本问题

确保使用的 MySQL 版本支持 events_statements_summary_by_digest 表。这个表在较新的 MySQL 版本中才可用。可以通过以下命令检查 MySQL 版本:

SELECT VERSION();

performance_schema 的配置与使用

默认情况下,MySQL 不会启用所有的事件采集器(instruments)和数据消费者(consumers)。需要手动配置,以便收集所需的性能数据。

**启用采集器:**如果希望监控某个特定的事件(比如等待事件),可以通过以下 SQL 语句来打开相关采集器:

UPDATE PERFORMANCE_SCHEMA.setup_instruments
SET ENABLED = 'YES',TIMED = 'YES'
WHERENAME LIKE 'wait/%';

**启用数据保存:**同样,还需要打开消费者来保存相关的事件数据:

UPDATE PERFORMANCE_SCHEMA .setup_consumers
SET ENABLED = 'YES'
WHERENAME = 'events_waits_current';

**查询事件表:**配置完成后,可以通过查询事件表来查看性能数据。例如,查看当前的等待事件:

SELECT * FROM performance_schema.events_waits_current;

请在此添加图片描述

示例:如果想查看所有等待事件的汇总信息,可以运行以下 SQL 查询:

SELECTEVENT_NAME,COUNT_STAR,SUM_TIMER_WAIT
FROMPERFORMANCE_SCHEMA .events_waits_summary_global_by_event_name
ORDER BYSUM_TIMER_WAIT DESC;

请在此添加图片描述

这将列出所有等待事件,并按等待时间总和排序,帮助识别哪些操作是导致性能瓶颈的主要原因。

小结

performance_schema 是 MySQL 提供的强大性能监控工具,特别是在 MySQL 5.8 中,它默认启用且功能强大。通过合理配置 performance_schema,可以详细了解数据库的运行状况,识别性能瓶颈并优化系统。无论是分析 SQL 语句、等待事件还是事务执行情况,performance_schema 都能提供精确的数据支持,是进行数据库性能调优的利器。

最后,虽然 performance_schema 提供了大量的性能数据,但我们通常不会直接操作这些表,而是借助 sys schema 下的视图来获取性能报告。sys schema 的数据主要来源于 performance_schema 和 INFORMATION_SCHEMA,因此熟悉 performance_schema 是高效使用 sys schema 的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143273.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

STM32快速复习(十二)FLASH闪存的读写

文章目录 一、FLASH是什么?FLASH的结构?二、使用步骤1.标准库函数2.示例函数 总结 一、FLASH是什么?FLASH的结构? 1、FLASH简介 (1)STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&…

XML映射器-动态sql

01-动态sql 1.实现动态条件SQL 第一种方法在sql语句中加入where 11其他条件都加and就行,这样就可以根据if条件来判断要传递的参数可以有几个 第二种方法用where标签给if语句包起来 where标签的作用如下图 第三种方法用trim标签解释如下图 用choose也可以实现条件查询如下图,…

pycharm连接远程linux服务器上的docker进行深度学习训练

实习过程中由于GPU都在服务器上,编辑代码很麻烦。并且服务器上配置了docker的环境,所以用pycharm连接远程服务器的docker进行深度学习,这样在本地调用远程服务器的GPU和环境,更方便一点,将这个过程记录下来&#xff0c…

高效开发,从暗藏玄机的文件系统开始—合宙Air201资产定位模组LuatOS

超低功耗、精准定位、快速量产——迷你小巧的合宙Air201,正给越来越多的行业客户带来高效开发体验。 4G-Cat.1模组的文件系统关乎数据传输速度、存储效率,以及数据安全性等等诸多因素,在应用开发中极为重要。 本期,我们来学习合…

QT 带箭头的控件QPolygon

由于对当前项目需要绘制一个箭头控件&#xff0c;所以使用了QPainter和QPolygon来进行绘制&#xff0c;原理就是计算填充&#xff0c;下面贴出代码和效果图 这里简单介绍下QPolygon QPolygon是继承自 QVector<QPoint>那么可以很简单的理解为&#xff0c;他就是一个点的…

比特币10年价格数据(2014-2024)分析(进阶2_时间序列分析)

数据入口&#xff1a;【每周挑战】比特币10年价格数据可视化和量化分析 - Heywhale.com 本数据集包含 2014 - 2024 的比特币美元价格数据&#xff0c;具体包含比特币每日的开盘价、最高价、最低价、收盘价以及成交量等关键信息。数据说明如下&#xff1a; 字段说明Date日期&a…

MES管理系统在智能制造中的重要应用

在智能制造的浪潮席卷之下&#xff0c;MES管理系统犹如一位精通生产艺术的智者&#xff0c;以其独到的洞察力和卓越的能力&#xff0c;引领着制造业向更加智能化、高效化的未来迈进。它不仅仅是一个数据汇聚的容器&#xff0c;更是信息处理的引擎、决策制定的伙伴&#xff0c;以…

游戏开发引擎__游戏场景(灯光,摄像机)

1.灯光 重要参数介绍 类型: 控制灯光的类型&#xff0c;有“定向”“点”“区域”和“聚光”4种模式。颜色: 控制灯光的颜色。模式: 控制灯光的光照模式&#xff0c;有“实时”“混合”和“烘焙”3种模式。强度: 控制灯光的明亮程度。间接乘数: 改变间接光的强度。阴影类型: …

亚信电子于IAS 2024展出最新IO-Link主站设备软件协议栈解决方案

亚信电子即将于IAS 2024展示最新的亚信IO-Link主站/设备软件协议栈、集成亚信IO-Link主站软件协议栈的AX58400 EtherCAT转IO-Link网关&#xff0c;以及AXM57104A TSN PCIe千兆以太网卡解决方案。 [台湾新竹讯, 2024年9月18日] 亚信电子&#xff08;ASIX Electronics Corporat…

Golang | Leetcode Golang题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; func addStrings(num1 string, num2 string) string {add : 0ans : ""for i, j : len(num1) - 1, len(num2) - 1; i > 0 || j > 0 || add ! 0; i, j i - 1, j - 1 {var x, y intif i > 0 {x int(num1[i] - 0)}if j &g…

二叉树的层序遍历(含十道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历 二叉树层序遍历模板 我们之前讲过了关于二叉树的深度优先遍历的文章&#xff1a;前中后序遍历的递归法和迭代法。 接下来我们再来介绍二叉树的另一种遍历方式&#xff1a;层序遍历。 层序遍历一个二叉树。就是从左到右一层…

1.1 软件测试 + AI

欢迎大家订阅【软件测试】学习专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言一、软件测试二、人工智能的引入 前言 人工智能的引入为软件测试带来了巨大的变革&#xff0c;不仅提升了测试效率和准确性&#xff0c;也为软件质量的保障提供了新的手段。通…

微信小程序开发自带的自定义Navigation-bar避坑

最近新开了一个小程序项目&#xff0c;用了新版本的微信小程序开发工具。在模拟器上开发一直都很顺利&#xff0c;开发完成之后&#xff0c;要上到真机上进行测试&#xff0c;发现在华为的鸿蒙上&#xff0c;样式有点不对了。 居然NavigationBar被遮住了一半&#xff0c;发现在…

Spark-ShuffleWriter-UnsafeShuffleWriter-钨丝内存分配

一、上下文 《Spark-ShuffleWriter-UnsafeShuffleWriter》中提到在进行Page内存分配时&#xff0c;调用了一行代码 MemoryBlock page memoryManager.tungstenMemoryAllocator().allocate(acquired); 这里就会走MemoryManager的钨丝内存分配&#xff0c;下面我们来详细看下 …

MySQL高阶1831-每天的最大交易

题目 编写一个解决方案&#xff0c;报告每天交易金额 amount 最大 的交易 ID 。如果一天中有多个这样的交易&#xff0c;返回这些交易的 ID 。 返回结果根据 transaction_id 升序排列。 准备数据 Create table If Not Exists Transactions (transaction_id int, day date, …

python筛选出不合格密码的用户

有如下数据&#xff1a;筛选出不合格密码的用户&#xff0c;对出现至少四个连续数值为不合格密码&#xff0c;例如"1234"、"8765"为不合格密码 用户名密码X12345678Y87654321O10293847P39485726Q28475639R19283746S91827364T56473829U83746592V28374659W7…

新手教学系列——基于统一页面的管理后台设计(一)

在现代企业级应用中,后台管理系统往往是核心组成部分,特别是随着业务规模的扩展,如何在多个后端服务模块的基础上实现统一的登录验证、权限控制和页面管理,成为许多开发者面对的挑战。本文将以实际项目为例,详细讲解如何设计一个多模块的后台管理系统,满足不同服务模块的…

superset 解决在 mac 电脑上发送 slack 通知的问题

参考文档: https://superset.apache.org/docs/configuration/alerts-reports/ 核心配置: FROM apache/superset:3.1.0USER rootRUN apt-get update && \apt-get install --no-install-recommends -y firefox-esrENV GECKODRIVER_VERSION0.29.0 RUN wget -q https://g…

leetcode:字符串中的第一个唯一字符

#include <unordered_map> class Solution { public:int firstUniqChar(string s) {unordered_map<char, int> HashMap;string::iterator it s.begin();int i 0;//标记元素下标while (it ! s.end())//初始化哈希表{if (HashMap.count(*it) > 0)//原先hash表中…

saltstack远程执行

一、saltstack远程执行 一、saltstack远程执行&#xff1a;目标-targeting 详解见&#xff1a;https://www.cnblogs.com/phennry/p/5416408.html 1、查看认证主机情况 2、具体匹配 Globing :   *, 正则:      指定-E参数&#xff0c;正则表达式匹配多个 List&#xff1a…