MYSQL 从performance_schema说起,但不止于PS ,sys库可以成为语句分析的AWS吗?(3)...

本文介绍了如何使用MySQL 8的SYS库进行性能分析和监控,包括设置configuration、使用statement_performance_analyzer存储过程以及监控全表扫描等问题。通过创建snapshot并保存数据,定期分析语句性能,帮助提升数据库效率。

d2f5f05b25f8a5a66627317708817254.png

继续前两期,从performance_schema 中的一些细节,对MYSQL 8 开展性能分析的话题说起, 这是一个系列,对此感兴趣的同学可以在文字的下方找到之前的话题。 

本期开始从MYSQL的 SYS 库开始了,实际上SYS 库的开发是基于监控的思路引入的,之前MYSQL 5.X 被诟病的监控难的问题,在MYSQL 8 已经不复存在了,如果你还抱着你的MYSQL 5.7 你会发现,你对于MYSQL 已经OUT 了,或许说你根本就不会监控了,也不见得是一个笑话。

sys 库本身起源很早,在MYSQL 5.6 就已经通过插入的方式存在了,MYSQL 5.7 也是,从8.018 后sys schema 已经融入了MYSQL 本身的系统当中,所以操控MYSQL 尤其是MYSQL8 ,sys库的理解是一个必需品。

针对SYS 库的配置信息可以从sys.sys_config 中获得信息,需要注意的是,这里sys库中的配置并不是第一个被使用的,在MYSQL中还有与之配对的变量信息,系统会先读取变量信息,如果变量信息与sys_config 的信息不匹配,会以变量信息为准。

bef83db0e328e87ec942c1072f1fce05.png

通过下面的方式可以直接查询config 中对应的变量,如果为null 说明变量并未赋值,系统会读取config 中的值。

ff54303d784ec4d43044a2c4305eba09.png

这里最常修改的是statement_truncate_len  ,对于收集的信息肯能由于长度的不同导致无法正常显示,所以这个选择项可能会被调整,也可以变量调整。

update sys.sys_config set value = 128 where variable = 'statement_truncate_len' ;

0ab65bff1eb9fcd782cc80c578ae1451.png

这里仅提两个针对我们系统性能分析中关于语句的分析中有用的两个配置项,

statement_performance_analyzer.view

statement_performance_analyzer.limit

这个本身就要往深入里面说了,所以SYS 库的问题一期是说不完了,下面就开始下探到 statement_performance_analyzer() , 这个存储过程主要的作用就是馋死一个关于在MYSQL 服务器上执行语句的报告。

关于这个存储过程中的参数包含,snapshot , overall,   delta,  

create_tmp,  create_table , save ,cleanup


通过这个命令可以快速的获取 event_statements_summary_by_digest中的内容,通过做SNAPSHOT的方式,将表的信息写入snapshot 的表中。

命令中包含了,三个参数序列,动作,提取数据目的地,展示方式

下面我们就来做一个相关的练习

我们的目的,定期的截取MYSQL 8 数据库中的语句分析信息,并且将他们永久的存储,并定期分析这些语句的问题。

1  我们在我们设定的一个数据库里面创建一个临时表,并且通过临时表来记录我们的系统中的语句分析信息。

30ae7217793a090b8e31188564693f3a.png

create database  statement_analyze;
use statement_analyze
CALL sys.statement_performance_analyzer('create_tmp', 'statement_analyze.tmp_digests', NULL);

我们在 statement_analyze 数据库中建立了一个临时表,tmp_digests

此时我们建立一个基于当前系统的语句分析的 snapshot ,并将结果存储到临时表中。

CALL sys.statement_performance_analyzer('snapshot', NULL, NULL);

9f1e4f8b26ac03f491a2c0dcdf9da7c5.png

CALL sys.statement_performance_analyzer('save', 'statement_analyze.tmp_digests', NULL);

在获得数据后,我们就可以通过临时表来进行当前语句的数据分析,比如那些语句是最近的 TOP10 ,等等一些在传统数据库上可以做的事情,这里都可以做。

select SCHEMA_NAME,DIGEST_TEXT,sys.format_time(MAX_TIMER_WAIT),sys.format_time(QUANTILE_95),SUM_ROWS_EXAMINED,LAST_SEEN from statement_analyze.tmp_digests order by last_seen desc limit 2 \G

38afb1ba5c51eca6fe0c797a9d8ed4c3.png

然后我们可以每一个小时分析一次语句的性能状态与上一个小时的变化,

在一个小时后,我们再次执行

CALL sys.statement_performance_analyzer('snapshot', NULL, NULL);

CALL sys.statement_performance_analyzer('overall', NULL, 'with_runtimes_in_95th_percentile');

'with_runtimes_in_95th_percentile');

74d6ed74837a8b0aa104c6acd0f9adba.png

通过定期分析可以将当前的一些语句的运行情况进行展示和分析。下方是针对

with_runtimes_in_95th_percentile:

使用statements_with_runtimes_in_95th_percentile视图


analysis:

使用statement_analysis视图


with_errors_or_warnings:

使用statements_with_errors_or_warnings视图


with_full_table_scans:

使用 statements_with_full_table_scans视图.


with_sorting:

使用statements_with_sorting视图

with_temp_tables:

使用statements_with_temp_tables视图

下面我们对于全表扫描的问题进行处理

CALL sys.statement_performance_analyzer('delta', 'statement_analyze.tmp_digests', 'with_full_table_scans');

在操作完毕后,直接去我们的sys 库 中的表

select * from statements_with_full_table_scans order by last_seen,total_latency desc limit 2\G

710938cd81e89ad04decf8672edec80d.png

写到这里,其实基于上方的一些东西和选项,可以针对MYSQL 8 开始准备开发一个新的基于MYSQL的  语句分析多维度的  "AWS" 系统了,基础MYSQL 已经在sys 库已经给你搭建好了,剩下的就是知识+ACTION ,MYSQL 8 将无疑是 MYSQL 历史上最好管理的MYSQL 系统,一点都不会差于其他的数据库系统。

下期会继续在SYS库继续一些监控的内容
————————————————

432b8af63c483601a4e9ccea8b3ef40e.png

往期内容

MYSQL 从performance_schema说起,但不止于PS (2)

https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247494586&idx=1&sn=bb38f225060595fa19ff3e98e0835fed&chksm=cfbc8fe5f8cb06f316065573e52218563d51b645c3df5b84581bb0d461db255b3034663cfa33&token=959999716&lang=zh_CN#rd

MYSQL 从performance_schema说起,但不止于PS (1)

https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247494482&idx=1&sn=c6fd81b9a6303df9285147d9b87df5cd&chksm=cfbc8f0df8cb061b019945d3d523bb32f563edde3b2914a907e571a09461668a9b5f60561bda&token=1980463622&lang=zh_CN#rd

<think>我们正在讨论致远OA(A8 V5 企业版 V8.2SP1)中涉及的几个MySQL数据库模式:information_schema, performance_schema, sys。这些模式是MySQL自带的系统数据库,用于存储元数据、性能监控数据等。下面将分别解释它们的用途及其与致远OA的关系。 ### 1. **information_schema** - **用途**:提供对数据库元数据的访问,包括数据库、表、列、索引、权限等信息。它是一个只读的虚拟数据库,存储的是关于数据库对象的信息。 - **在致远OA中的应用**: - 管理员可以通过查询`information_schema`来获取致远OA数据库的结构信息,例如检查表是否存在(如之前遇到的`ctp_user`表问题)、查看表结构、索引等。 - 示例查询(检查表是否存在): ```sql SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = &#39;seeyon&#39; AND TABLE_NAME = &#39;ctp_user&#39;; ``` 如果返回结果为空,则说明表不存在(可能是被删除或版本差异)[^1]。 ### 2. **performance_schema** - **用途**:收集数据库服务器运行时的性能数据,包括事件(如SQL语句执行、锁等待、I/O操作等),用于监控MySQL服务器的性能。 - **在致远OA中的应用**: - 当致远OA系统出现性能问题时(如响应慢),DBA可以通过`performance_schema`分析SQL执行效率、锁竞争情况等。 - 示例:查看执行时间最长的SQL语句: ```sql SELECT SQL_TEXT, MAX_TIMER_WAIT FROM performance_schema.events_statements_summary_by_digest ORDER BY MAX_TIMER_WAIT DESC LIMIT 10; ``` ### 3. **sys** - **用途**:基于`performance_schema`和`information_schema`构建,提供更易读的视图和存储过程,简化性能监控和诊断。 - **在致远OA中的应用**: - 提供直观的性能报告,例如查看内存使用情况、I/O负载等。 - 示例:查看内存使用情况: ```sql SELECT * FROM sys.memory_global_total; ``` ### 4. **mysql** - **用途**:存储MySQL自身的系统数据,如用户权限、时区、日志配置等。 - **在致远OA中的应用**: - 管理致远OA数据库用户权限(如`ctp_user`表的访问权限)。 - 示例:修改用户权限(恢复误删账户后可能需要): ```sql GRANT SELECT, UPDATE ON seeyon.* TO &#39;oa_user&#39;@&#39;localhost&#39;; ``` ### 各模式间关系 - **依赖关系**: - `sys`模式依赖于`performance_schema`和`information_schema`,它是对两者的封装和简化。 - `performance_schema`提供底层性能数据,`information_schema`提供元数据。 - **协同工作**: - 当需要优化致远OA数据库时: 1. 用`information_schema`检查表结构(如索引缺失)。 2. 用`performance_schema`定位慢查询。 3. 用`sys`快速生成诊断报告。 ### 操作建议 - **启用性能监控**(若未开启): ```ini # MySQL配置文件 my.cnf [mysqld] performance_schema=ON ``` - **定期清理历史数据**(避免`performance_schema`占用过多内存): ```sql TRUNCATE TABLE performance_schema.events_statements_history_long; ``` §§相关问题§§ 1. 如何利用`sys`模式诊断致远OA数据库性能问题? 2. 在`information_schema`中如何查询致远OA表的字段详细信息? 3. MySQL 8.0中`performance_schema`有哪些关键改进? 4. 如何配置`performance_schema`以最小化性能影响? [^1]: MySQL官方文档:information_schema表 [^2]: MySQL性能优化指南 [^3]: 致远OA数据库维护手册</think>### 致远OA A8 V5企业版V8.2SP1中数据库系统模式解析 在致远OA A8 V5企业版V8.2SP1中,`information_schema`、`performance_schema`、`sys` 是MySQL数据库的**系统级数据库(模式)**,与OA业务数据库(如`seeyon`)相互独立但协同工作。以下是它们的关系和用途: --- ### 1. **核心关系示意图** ```mermaid graph LR A[OA应用层] --> B((业务数据库 seeyon)) A --> C[information_schema] A --> D[performance_schema] A --> E[sys] D --> E[sys] C --> D ``` --- ### 2. **各模式用途详解** | 模式名称 | 用途 | 致远OA应用场景示例 | |----------------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------| | **`information_schema`** | 存储**元数据**:<br>- 数据库/表/列结构<br>- 权限信息<br>- 约束信息 | 1. 验证表是否存在(如`ctp_user`)[^1]<br>2. 检查字段类型是否匹配<br>3. 修复表结构异常 | | **`performance_schema`** | 收集**性能数据**:<br>- SQL执行统计<br>- 锁等待事件<br>- 资源消耗监控 | 1. 分析慢查询优化性能<br>2. 诊断死锁问题<br>3. 监控连接池使用率 | | **`sys`** | **性能诊断工具集**:<br>- 基于`performance_schema`的易读视图<br>- 预设分析报告 | 1. 生成内存使用报告<br>2. 查看索引效率<br>3. 快速定位I/O瓶颈 | > 📌 **关键说明**: > - `sys` 本质是`performance_schema`的**高级封装**,通过视图简化性能分析(如`sys.session`视图替代`performance_schema.events_waits_current`) > - OA业务数据存储在独立数据库(通常为`seeyon`或`a8v5`),与这三个系统模式**物理隔离** --- ### 3. **协同工作机制** 1. **运维监控场景** ```sql /* 步骤1:通过sys快速定位问题 */ SELECT * FROM sys.memory_global_total; -- 查看总内存消耗[^3] /* 步骤2:用performance_schema深入分析 */ SELECT EVENT_NAME, COUNT_STAR FROM performance_schema.events_waits_summary_global_by_event_name ORDER BY COUNT_STAR DESC LIMIT 10; -- 统计高频等待事件 /* 步骤3:用information_schema验证表结构 */ SELECT COLUMN_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME=&#39;ctp_user&#39;; -- 检查字段定义 ``` 2. **版本兼容性** - MySQL 5.7+ 默认启用`performance_schema` - MySQL 8.0+ 强化`sys`的**诊断能力**(如新增`sys.innodb_buffer_stats_by_table`)[^3] --- ### 4. **运维建议** 1. **启用配置** 在`my.cnf`中确保: ```ini [mysqld] performance_schema=ON # 默认开启[^4] ``` 2. **安全权限** OA连接用户需授权(非`root`): ```sql GRANT SELECT ON sys.* TO &#39;oa_user&#39;@&#39;%&#39;; GRANT SELECT ON performance_schema.* TO &#39;oa_user&#39;@&#39;%&#39;; ``` 3. **性能开销** | 模式 | CPU开销 | 内存开销 | 建议 | |---------------------|---------|----------|-------------| | `performance_schema` | 中 | 高 | 生产环境开启 | | `sys` | 低 | 低 | 随时使用 | > ⚠️ 注:`information_schema`为**只读虚拟表**,几乎无性能开销[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值