当前位置: 首页 > news >正文

MySQL中Performance Schema库的详解(下)

昨天说了关于SQL语句相关的,今天来说说性能相关的,如果没有看过上篇请点传送门https://blog.csdn.net/2301_80479959/article/details/144693574?fromshare=blogdetail&sharetype=blogdetail&sharerId=144693574&sharerefer=PC&sharesource=2301_80479959&sharefrom=from_link

检查读写性能

Performance Schema中的statement类型的插桩对于理解工作负载是受读还是受写限制非常有用。

统计各类型语句的执行次数

select EVENT_NAME, count(EVENT_NAME) 
from events_statements_history_long group by EVENT_NAME;

SELECT查询的数量大于任何其他查询的数量。这表明该场景中的大多数查询都是读查询

语句延迟情况

SELECT EVENT_NAME, COUNT(EVENT_NAME) AS count, SUM(LOCK_TIME / 1000000) AS latency_ms 
FROM events_statements_history 
GROUP BY EVENT_NAME 
ORDER BY latency_ms DESC;#结果如下
+--------------------------+-------+------------+
| EVENT_NAME               | count | latency_ms |
+--------------------------+-------+------------+
| statement/sql/select     |     2 |   295.0000 |
| statement/com/Field List |     7 |     0.0000 |
| statement/sql/error      |     1 |     0.0000 |
+--------------------------+-------+------------+

读取和写入的字节数和行数

WITH rowS_read AS (SELECT SUM(VARIABLE_VALUE) AS rowS_readFROM global_statusWHERE VARIABLE_NAME IN ('Handler_read_first', 'Handler_read_key', 'Handler_read_next', 'Handler_read_last', 'Handler_read_prev', 'Handler_read_rnd', 'Handler_read_rnd_next')
),
rowS_written AS (SELECT SUM(VARIABLE_VALUE) AS rowS_writtenFROM global_statusWHERE VARIABLE_NAME = 'Handler_write'
)
SELECT *
FROM rowS_read, rowS_written\G
​
#结果如下
*************************** 1. row ***************************rowS_read: 18472 #表示自数据库启动以来,通过不同的处理器(handler)读取的行总数为18,472。rowS_written:    #24 表示自数据库启动以来,通过处理器写入的行总数为24。
1 row in set (0.01 sec)

检查元数据锁

performance_schema中的metadata_locks表包含关于当前由不同线程设置的锁的信息,以及处于等待状态的锁请求信息。通过这种方式,可以轻松确定哪个线程阻塞了DDL请求,你可以决定是终止该语句还是等待它完成执行。

要启用元数据锁监测,需要启用wait/lock/meta-data/sql/mdl插桩。

例如:

SELECT processlist_id, object_type, lock_type, lock_status, source
FROM metadata_locks
JOIN threads ON metadata_locks.owner_thread_id = threads.thread_id
WHERE object_schema = 'employees' AND object_name = 'titles'\G
​
#结果如下
*************************** 1. row ***************************
processlist_id: 4       #进程列表ID
object_type: TABLE      #对象类型
lock_type: EXCLUSIVE    #锁类型
lock_statuS: PENDING -- waits   #锁状态
source:mdl.cc:3263
*************************** 2. row ***************************
processlist_id: 5
object_type: TABLE
lock_type: SHARED_READ
lock_status: GRANTED -- holds
source:sql_parse.cc:5707
​
在ID为5的进程列表中可见的线程持有processlist_id=4的线程正在等待的锁

检查内存使用情况

使用sys schema

使用Sys schema中的视图可以更好地获取内存统计信息,可以按host、user、threadglobal进行聚合。memory_global_total视图包含一个单独的值

例如:

select * from sys.memory_global_total;
+-----------------+
| total_allocated |
+-----------------+
| 426.80 MiB      |
+-----------------+
1 row in set (0.00 sec)

视图memory_by_thread_by_current_bytes中的行是按照当前分配的内存降序排序的,所以很容易就能找到哪个线程占用了大部分内存

例如:

SELECT thread_id AS tid, user, current_allocated AS ca, total_allocated
FROM sys.memory_by_thread_by_current_bytes LIMIT 10;
​
#結果如下
+-----+--------------------------------------+------------+-----------------+
| tid | user                                 | ca         | total_allocated |
+-----+--------------------------------------+------------+-----------------+
|   1 | sql/main                             | 977.01 KiB | 4.72 MiB        |
|  48 | root@localhost                       | 942.46 KiB | 34.94 MiB       |
|  33 | innodb/clone_gtid_thread             | 410.10 KiB | 20.54 MiB       |
|  42 | sql/event_scheduler                  | 16.38 KiB  | 31.62 KiB       |
|  46 | sql/compress_gtid_table              | 13.80 KiB  | 16.78 KiB       |
|  25 | innodb/fts_optimize_thread           | 1.79 KiB   | 1.88 KiB        |
|  13 | innodb/page_flush_coordinator_thread | 1.38 KiB   | 5.91 KiB        |
|  40 | innodb/srv_worker_thread             | 1.29 KiB   | 14.29 KiB       |
|  38 | innodb/srv_worker_thread             | 1.29 KiB   | 9.74 KiB        |
|  34 | innodb/srv_purge_thread              | 1.26 KiB   | 1.35 KiB        |
+-----+--------------------------------------+------------+-----------------+
10 rows in set (0.03 sec)

检查最常见的错误

除了特定错误信息,performance_schema还提供摘要表,可以按用户、主机、账户、线程和错误号聚合错误信息。所有的聚合表都有类似于events_errors_summary_global_by_error表的结构:

例如:

use performance_schema
show create table events_errors_summary_global_by_error \G
​
#结果如下
*************************** 1. row ***************************Table: events_errors_summary_global_by_error
Create Table: CREATE TABLE `events_errors_summary_global_by_error` (`ERROR_NUMBER` int DEFAULT NULL,`ERROR_NAME` varchar(64) DEFAULT NULL,`SQL_STATE` varchar(5) DEFAULT NULL,`SUM_ERROR_RAISED` bigint unsigned NOT NULL,`SUM_ERROR_HANDLED` bigint unsigned NOT NULL,`FIRST_SEEN` timestamp NULL DEFAULT '0000-00-00 00:00:00',`LAST_SEEN` timestamp NULL DEFAULT '0000-00-00 00:00:00',UNIQUE KEY `ERROR_NUMBER` (`ERROR_NUMBER`)
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

可通过列ERROR_NUMBER、ERROR_NAMESQL_STATE来识别错误。SUM_ERROR_RAISED是错误发生的次数。SUM_ERROR_HANDLED是错误被处理的次数。FIRST_SEEN和LAST_SEEN是错误第一次发生和最后一次发生的时间戳。

有些聚合表有额外的列。表events_errors_summary_by_thread_by_error有一个名为THREAD_ID的列,标识了引发错误的线程,表events_errors_summary_by_host_by_error有一个名为HOST的列,依此类推。

例如:

检查performance_schema的相关信息

使用sys schema检查performance_schema中消耗内存最多的10个表

SELECT SUBSTRING_INDEX(event_name, '/', -1) AS event_name_part, current_alloc
FROM sys.memory_global_by_current_bytes
WHERE event_name LIKE 'memory/performance_schema/%'
LIMIT 10;
​
#结果如下
+---------------------------------------------------+---------------+
| event_name_part                                   | current_alloc |
+---------------------------------------------------+---------------+
| events_statements_summary_by_digest               | 39.67 MiB     |
| events_statements_history_long                    | 13.89 MiB     |
| events_errors_summary_by_thread_by_error          | 11.93 MiB     |
| events_statements_summary_by_thread_by_event_name | 9.79 MiB      |
| events_statements_summary_by_digest.digest_text   | 9.77 MiB      |
| events_statements_history_long.digest_text        | 9.77 MiB      |
| events_statements_history_long.sql_text           | 9.77 MiB      |
| table_handles                                     | 9.06 MiB      |
| memory_summary_by_thread_by_event_name            | 7.91 MiB      |
| events_errors_summary_by_host_by_error            | 5.96 MiB      |
+---------------------------------------------------+---------------+
10 rows in set (0.00 sec)

获取performance_schema的相关信息

mysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS \G
​
#结果如下
*************************** 1. row ***************************Type: performance_schemaName: events_waits_current.size
Status: 176
*************************** 2. row ***************************Type: performance_schemaName: events_waits_current.count
Status: 1536
*************************** 3. row ***************************Type: performance_schemaName: events_waits_history.size
Status: 176
*************************** 4. row ***************************Type: performance_schemaName: events_waits_history.count
Status: 2560
*************************** 5. row ***************************Type: performance_schemaName: events_waits_history.memory
Status: 450560

在输出中可以发现一些细节,比如消费者表中存储了多少特定事件,或者特定度量的最大值。最后一行包含Performance Schema当前占用的字节数。

小结

Performance Schema将语句指标存储在events_statements_currentevents_statements_historyevents_statements_history_long表中`

而sys提供了可用于查找有问题语句的视图,statements_with_errors_or_warnings列出了带有错误和警告的所有语句,statements_with_full_table_scans列出了需要全表扫描的所有语句

prepared_statements_instances表包含服务器中存在的所有预处理语句,metadata_locks表包含关于当前由不同线程设置的锁的信息,events_errors_summary_global_by_error表可以按用户、主机、账户、线程和错误号聚合错误信息

相关文章:

MySQL中Performance Schema库的详解(下)

昨天说了关于SQL语句相关的,今天来说说性能相关的,如果没有看过上篇请点传送门https://blog.csdn.net/2301_80479959/article/details/144693574?fromshareblogdetail&sharetypeblogdetail&sharerId144693574&sharereferPC&sharesource…...

【Rust自学】7.1. Package、Crate和定义Module

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.1.1. Rust的代码组织 代码组织主要包括: 那些细节可以对外暴露,而哪些细节是私有的在作用域内哪些名称有效… …...

【Git】-- 版本说明

Alpha:是内部测试版,一般不向外部发布,会有很多 Bug .一般只有测试人员使用。Beta:也是测试版,这个阶段的版本会一直加入新的功能。在 Alpha 版之后推出。RC:(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台…...

1919C. Grouping Increases

问题描述 序列 X X X&#xff0c;划分成两个字序列 A , B A,B A,B&#xff0c;其中惩罚是 A , B A,B A,B之中&#xff0c; A [ i ] < A [ i 1 ] , B [ i ] < B [ i 1 ] A[i] < A[i1], B[i] < B[i1] A[i]<A[i1],B[i]<B[i1]的个数 思路 拆分 X X X&#xf…...

Pion WebRTC 项目教程

Pion WebRTC 项目教程 webrtc Pure Go implementation of the WebRTC API [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/we/webrtc 1. 项目目录结构及介绍 Pion WebRTC 项目的目录结构如下&#xff1a; pion/webrtc ├── api ├── examples ├── inter…...

【安全编码】Web平台如何设计防止重放攻击

我们先来做一道关于防重放的题&#xff0c;答案在文末 防止重放攻击最有效的方法是&#xff08; &#xff09;。 A.对用户密码进行加密存储使用 B.使用一次一密的加密方式 C.强制用户经常修改用户密码 D.强制用户设置复杂度高的密码 如果这道题目自己拿不准&#xff0c;或者…...

VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)

网址连接&#xff1a;http://118.25.110.213:5200/#/login 账号/密码&#xff1a;renxiaoyong 1、VUE3部署本地。 1.1本地安装部署node.js 1.2安装vue脚手架 npm install -g vue/cli # 或者 yarn global add vue/cli1.3创建本地项目 vue create my-vue-project1.4安装依赖和插…...

Python爬虫(入门+进阶)

简介 围绕 Python 爬虫展开&#xff0c;包括四个章节。第一章从 Python 爬虫入门&#xff0c;涵盖爬虫概念、Requests 爬取、Xpath 解析、数据保存及入库等知识&#xff0c;并结合知乎、豆瓣、淘宝等案例讲解浏览器抓包及 Selenium 爬取动态网页。第二章介绍 Scrapy 框架&…...

保姆级教程Docker部署RabbitMQ镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、运行RabbitMQ容器 4、Compose运行RabbitMQ容器 5、开启界面插件 6、查看RabbitMQ运行状态 7、常见问题处理 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化管理…...

【RAII | 设计模式】C++智能指针,内存管理与设计模式

前言 nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。 上一节我们讲述了C移动语义相关的知识&#xff0c;本期我们来看看C中常用的几种智能指针&#xff0c;并看看他们在设计模式中的运…...

Linux复习3——管理文件系统2

修改文件权限命令 chmod 功能&#xff1a; chmod 命令主要用于修改文件或者目录的权限 只有文件所有者和超级用户可以修改文件或目录的权限 (1)使用数字表示法修改权限 所谓数字表示法是指将读取(r)、写入(w)和执行(x)分别以4、2、1来表示&#xff0c;没有授予的部分就表示…...

c++---------数据类型

基本数据类型 整数类型&#xff08;Integral Types&#xff09; int&#xff08;整型&#xff09; 这是最常用的整数类型&#xff0c;通常用于存储一般范围的整数值。在32位系统中&#xff0c;int类型一般占用4个字节&#xff0c;取值范围大约是 - 2147483648到2147483647。例如…...

前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计 在上一篇博文中&#xff0c;我们深入探讨了Flask框架&#xff0c;…...

鸿蒙系统文件管理基础服务的设计背景和设计目标

有一定经验的开发者通常对文件管理相关的api应用或者底层逻辑都比较熟悉&#xff0c;但是关于文件管理服务的设计背景和设计目标可能了解得不那么清楚&#xff0c;本文旨在分享文件管理服务的设计背景及目标&#xff0c;方便广大开发者更好地理解鸿蒙系统文件管理服务。 1 鸿蒙…...

要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量

要查询 user 表中 we_chat_open_id 列不为空的用户数量&#xff0c;你可以使用以下 SQL 查询语句&#xff1a; SELECT COUNT(*) FROM user WHERE we_chat_open_id IS NOT NULL AND we_chat_open_id ! ;解释&#xff1a; SELECT COUNT(*): 表示要计算符合条件的行数。FROM us…...

AI科研助手开发总结:向量与数据权限的应用(二)

一、前言 继上篇文章&#xff1a;AI科研助手开发总结&#xff1a;向量与数据权限的应用&#xff08;一&#xff09; 本章根据向量库内存储数据及权限&#xff0c;向量库统一维护和管理数据权限方案讨论。 二、方案分析-基于向量Fields 2.1 思路 结合橙语AI科研助手的业务场…...

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…...

HarmonyOS NEXT 实战之元服务:静态案例效果--航空出行

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …...

DP83848以太网移植流程,可以TCP通信

DP83848-EP 是一款高度可靠、功能丰富的强大器件,包含了增强型 ESD 保护、MII 和 RMII,从而在 MPU 选择方面实现最大的灵活性,所有这些特性都融入于 48 引脚 PQFP 封装中。 DP83848-EP 配备 集成子层以支持 10BASE-T 和 100BASE-TX 以太网协议,这些协议确保了与基于其他标…...

css 裁剪 clip-path

clip-path 是一个强大的 CSS 属性&#xff0c;用于裁剪元素的可视区域&#xff0c;支持多种形状裁剪。它可以用来创建复杂的裁剪效果&#xff0c;如圆形、多边形、路径等。 clip-path: none | shape | url(#clipPathId);none&#xff1a;不裁剪&#xff0c;显示完整内容。shap…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...