MYSQL performance_schema 不显示信息 和调整 performance_schema 的配置

随着问问题的同学越来越多,公众号内部私信回答问题已经很困难了,所以建立了一个群,关于各种数据库的问题都可以,目前主要是 POSTGRESQL, MYSQL ,MONGODB ,POLARDB ,REDIS 等,期待你的加入,加群请添加微信liuaustin3.8745ef736989b6093199095503a89c92.png

最近在某云使用了MYSQL RDS 产品,说实话不怎么满意,和他家的其他产品比较我到时更原因使用 PG 的产品和云原生产品,那才是业界良心。为什么说不原因,主要是PS 方面让我们初次使用就感觉,不十分良好,2天了PS 里面部分的表还没有数据展示,沟通找问题,最终问题还是我们自己解决了大部分。

本着,还的靠自己的思路,这里的重新整理一下PS 中的各种信息的显示开关,与本次问题的为什么不显示的部分。

PS 主要的功能

1 收集详细的mysql 运行信息

2  收集活跃的线程信息

3  查看数据库负载和事件通过PS 查看数据库在那个事件方面产生瓶颈

要打开PS 第一个开关就是 performance_schema ,这个值是不能进行动态设置的,必须在配置文件中进行设置。如果你想在系统内部动态的进行调整,会报错。

| performance_schema    | ON    |

fd8c82cce6f05a411cc8ceecebddecbe.png

a54cb27bf80a13dae9e5ec0e7d6ebcc7.png

如果你打开开关后,还无法使用PS的第一个问题是,无法分配缓存导致的PS 无法工作。在安装数据库后,这部分实际上是应该自动进行设置的,但是这个云厂商不知道是因为什么将这个部分全部设置为0 ,原因我们也大概知道,就是通过他的某项功能来收费,而将原有的MYSQL的功能给禁用了。

怎么查看他到底禁用了没有,通过 show   variables like 'performance%class%';  如果此时你看到的下面的位置的信息,全部是0 那么恭喜你,你就是被人家下了 科技与狠活了。这里没有办法,坑你就因为你不懂,你就去花钱买人家的 monitor 服务。我们自然是不人头的,下面给出如下值调整的 “姿势”。

1  performance_schema_max_cond_classes = 256

2  performance_schema_max_file_classes = 80

3  performance_schema_max_memory_classes = 320

4  performance_schema_max_mutex_classes =200

5  performance_schema_max_rwlock_classes = 80

6  performance_schema_max_socket_classes = 20

7  performance_schema_max_stage_classes = 200

8  performance_schema_max_statement_classes = 256

9  performance_schema_max_thread_classes =  200

99e6f3ba21172031c507f87c365ecf0e.png

以上的调整值建议用文字的标注的数值,截图的数值的主机内存太小,导致分配的值太低。(内存低于8G,用截图的值),这些值实际上如果禁用过,是需要写到 my.cnf中进行固话的,但实际上我们也不建议固化。

此时,基本上你的performance_schema  中就应该有数据了。但基于调整PS 中一些用不上的数据,尽量减少性能的消耗的问题,所以我们有了下面的东西。

在打开开关后,实际上剩下的开关与以下的几个表有关

setup_actors                        

setup_actors 主要的功能是设置那些 ,这里针对主机,用户来进行过滤那些用户的线程需要进行信息的留存。   默认是100条    

de7230b7469b70c45c253f2a7c4ac2c5.png

这里可以通过performance_schema_setup_actors_size来查看到底留存多行,这里最大值是 1048576, 这里一般来说,我们是要针对一些系统的用户进行屏蔽的,比如监控账号,备份账号,等,这里可以根据管理方式酌情处理。

f4a7eff8f8361a1aceaedbedf3e913e7.png

setup_consumers  中存在的那些记录需要进行存储,这里我们总结了一下statements  系列的是必须要进行存储的。

f86b5742faafd8f608da54dd4eb0d56b.png

mysql> update setup_consumers set enabled = 'yes' where name like '%statements%';

Query OK, 2 rows affected (0.00 sec)

Rows matched: 5  Changed: 2  Warnings: 0

mysql> update setup_consumers set enabled = 'yes' where name like '%waits%';

Query OK, 3 rows affected (0.00 sec)

Rows matched: 3  Changed: 3  Warnings: 0

mysql> update setup_consumers set enabled = 'yes' where name like '%transactions%';

Query OK, 1 row affected (0.00 sec)

Rows matched: 3  Changed: 1  Warnings: 0

4ca372cd2f7db7123843aba44167528f.png

setup_instruments  针对需要获取信息的设备的开关信息 ,的信息主要关于那些MYSQL 的项目被包含在需要进行信息收集的部分。这里我们将stage部门全部关闭,主要的原因是消耗的资源较大,系统越繁忙消耗越大。

update setup_instruments set enabled = 'no' where name like 'stage%';

update setup_instruments set enabled = 'no' where name like '%myisam%';

update setup_instruments set enabled = 'YES' where name like 'wait/io/file/innodb/%';

update setup_instruments set enabled = 'NO' where name like 'statement%';

update setup_instruments set enabled = 'NO' where name like 'statement%update%';

update setup_instruments set enabled = 'YES' where name like 'statement%update%';

update setup_instruments set enabled = 'YES' where name like 'statement%delete%';

update setup_instruments set enabled = 'YES' where name like 'statement%insert%';

 update setup_instruments set enabled = 'YES' where name like 'statement%select%';

update setup_instruments set enabled = 'NO' where name like 'wait%';

 update setup_instruments set enabled = 'yes',TIMED = 'yes'  where name like 'wait/io/file/innodb/innodb%';

 update setup_instruments set enabled ='yes' where name = 'statement/abstract/Query';

update setup_instruments set enabled ='yes' where name = 'statement/abstract/new_packet';

最后的两个UPDATE 本身,是必须进行相关的开启的,否则语句将无法进行统计,根据官方文档中的说明

1  statement/abstract/new_packet 主要的功能是收集所有的语句,所有的语句在进行更细的过滤和分析。

2  在确认是语句的同时,需要对语句进行进行更细粒度的过滤的确认他是一个我们认为的QUERY,所以我们必须打开 statement/abstract/Query

e38c2c28c2cfe5bf2fab75ded55c5322.png

https://dev.mysql.com/doc/refman/5.7/en/performance-schema-statement-tables.html

9b5fa726a37486d7d7aa8a25175af3e9.png

42c94f9d84f3f8e7670d88e1359ecec5.png

setup_objects   针对收取信息的OBJECT的设置

ef85ca47dc845d7da1f7ac3de43c20f3.png

setup_threads   针对MYSQL当中收集的线程信息,以及是否进行历史信息的留存。

c2ca0942df3df902db4b939ca80076f6.png

在经过调试后,MYSQL RDS 的PS 信息收集和展示终于正常了。

e44de87dff4a7919c00367a542cf5279.png

<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 = 'seeyon' AND TABLE_NAME = 'ctp_user'; ``` 如果返回结果为空,则说明表存在(可能是被删除或版本差异)[^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 'oa_user'@'localhost'; ``` ### 各模式间关系 - **依赖关系**: - `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='ctp_user'; -- 检查字段定义 ``` 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 'oa_user'@'%'; GRANT SELECT ON performance_schema.* TO 'oa_user'@'%'; ``` 3. **性能开销** | 模式 | CPU开销 | 内存开销 | 建议 | |---------------------|---------|----------|-------------| | `performance_schema` | 中 | 高 | 生产环境开启 | | `sys` | 低 | 低 | 随时使用 | > ⚠️ 注:`information_schema`为**只读虚拟表**,几乎无性能开销[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值