MySQL中information_schema和performance_schema

本文深入介绍了MySQL中的information_schema和performance_schema两个重要数据库。information_schema提供数据库元数据,如表、列、权限等信息,而performance_schema则用于收集性能数据,帮助分析SQL执行情况和系统资源使用。通过示例查询,展示了如何利用这些信息进行SQL性能优化和系统监控。

mysql information_schema 信息相关 performance_schema 性能相关 库

MySQL中information_schema是什么

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

information_schema数据库表说明:

  • SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。

  • TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。

  • COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

  • STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。

  • USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。

  • SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。

  • TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。

  • COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。

  • CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。

  • COLLATIONS表:提供了关于各字符集的对照信息。

  • COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。

  • TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。

  • KEY_COLUMN_USAGE表:描述了具有约束的键列。

  • ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

  • VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。

  • TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表

performance_schema实践操作

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

  • 1、哪类的SQL执行最多?
    SELECT DIGEST_TEXT,COUNT_STAR,FIRST_SEEN,LAST_SEEN FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  • 2、哪类SQL的平均响应时间最多?
    SELECT DIGEST_TEXT,AVG_TIMER_WAIT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  • 3、哪类SQL排序记录数最多?
    SELECT DIGEST_TEXT,SUM_SORT_ROWS FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  • 4、哪类SQL扫描记录数最多?
    SELECT DIGEST_TEXT,SUM_ROWS_EXAMINED FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  • 5、哪类SQL使用临时表最多?
    SELECT DIGEST_TEXT,SUM_CREATED_TMP_TABLES,SUM_CREATED_TMP_DISK_TABLES FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  • 6、哪类SQL返回结果集最多?
    SELECT DIGEST_TEXT,SUM_ROWS_SENT FROM events_statements_summary_by_digest ORDER BY COUNT_STAR DESC
  • 7、哪个表物理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
  • 8、哪个表逻辑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
  • 9、哪个索引访问最多?
    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
  • 10、哪个索引从来没有用过?
    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;
  • 11、哪个等待事件消耗时间最多?
    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
  • 12-1、剖析某条SQL的执行情况,包括statement信息,stege信息,wait信息
    SELECT EVENT_ID,sql_text FROM events_statements_history WHERE sql_text LIKE ‘%count(*)%’;
  • 12-2、查看每个阶段的时间消耗
    SELECT event_id,EVENT_NAME,SOURCE,TIMER_END - TIMER_START FROM events_stages_history_long WHERE NESTING_EVENT_ID = 1553;
  • 12-3、查看每个阶段的锁等待情况
    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;
<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] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值