MySQL 5.7 performance_schema库和sys库常用SQL

本文分享了MySQL数据库性能监控的实用SQL语句,包括检查无主键表、临时表创建者、未正确关闭的连接、DDL元数据锁跟踪及执行进度等。同时介绍了sys库用于监控表访问量、数据库连接、冗余与未使用索引、自增ID监控及磁盘IO文件的方法。

performance_schema库常用SQL:

查看没有主键的表:

    SELECT DISTINCT t.table_schema, t.table_name

      FROM information_schema.tables AS t

      LEFT JOIN information_schema.columns AS c ON t.table_schema = c.table_schema 

AND t.table_name = c.table_name AND c.column_key = "PRI"

     WHERE t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema')

       AND c.table_name IS NULL AND t.table_type != 'VIEW';


例如:

mysql> SELECT DISTINCT t.table_schema, t.table_name

    ->       FROM information_schema.tables AS t

    ->       LEFT JOIN information_schema.columns AS c ON t.table_schema = c.table_schema 

AND t.table_name = c.table_name  AND c.column_key = "PRI"

    ->      WHERE t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema')

    ->        AND c.table_name IS NULL AND t.table_type != 'VIEW';


+--------------+---------------------------+

| table_schema | table_name                |

+--------------+---------------------------+

| S85          | dsf                       |

| test         | innodb_lock_monitor       |

| test         | innodb_monitor            |

| test         | innodb_table_monitor      |

| test         | innodb_tablespace_monitor |

| zhwp102      | t_orgpriority             |

| zhwp102      | t_task_ext                |

| zhwp102      | t_web_common              |

| zhwp111      | t_orgpriority             |

| zhwp111      | t_task_ext                |

| zhwp111      | t_web_common              |

| zhwp111      | t_weibo                   |

| zhwp_prod    | t_orgpriority             |

| zhwp_prod    | t_task_ext                |

| zhwp_prod    | t_web_common              |

| zhwp_prod    | t_weibo                   |

| zhwpzj111    | t_orgpriority             |

| zhwpzj111    | t_task_ext                |

| zhwpzj111    | t_web_common              |

| zhwpzj111    | t_weibo                   |

+--------------+---------------------------+

20 rows in set (1 min 27.55 sec)


没有主键:

mysql> desc S85.dsf;    

+------------+----------------------+------+-----+-------------------+-------+

| Field      | Type                 | Null | Key | Default           | Extra |

+------------+----------------------+------+-----+-------------------+-------+

| sourceDay  | date                 | YES  |     | NULL              |       |

| sourceTime | datetime             | NO   |     | CURRENT_TIMESTAMP |       |

| affections | smallint(5) unsigned | NO   |     | 1                 |       |

+------------+----------------------+------+-----+-------------------+-------+

3 rows in set (0.00 sec)


查看是谁创建的临时表


    SELECT user, host, event_name, count_star AS cnt, sum_created_tmp_disk_tables AS tmp_disk_tables, 

sum_created_tmp_tables AS tmp_tables

      FROM performance_schema.events_statements_summary_by_account_by_event_name

     WHERE sum_created_tmp_disk_tables > 0

        OR sum_created_tmp_tables > 0 ;



没有正确关闭数据库连接的用户

    SELECT ess.user, ess.host

         , (a.total_connections - a.current_connections) - ess.count_star as not_closed

         , ((a.total_connections - a.current_connections) - ess.count_star) * 100 /

           (a.total_connections - a.current_connections) as pct_not_closed

      FROM performance_schema.events_statements_summary_by_account_by_event_name ess

      JOIN performance_schema.accounts a on (ess.user = a.user and ess.host = a.host)

     WHERE ess.event_name = 'statement/com/quit'

       AND (a.total_connections - a.current_connections) > ess.count_star ;


DDL元数据锁跟踪

1.打开跟踪:

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE 

NAME = 'wait/lock/metadata/sql/mdl';

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE

 NAME = 'global_instrumentation';

2.查询metadata lock:

select  * from performance_schema.metadata_locks;

select  * from performance_schema.metadata_locks where LOCK_STATUS like 'PENDING%';

select ID from information_schema.processlist where Info  like '%20190416%' \G

SELECT OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME,LOCK_STATUS,processlist_id 

    FROM performance_schema.metadata_locks mdl

    INNER JOIN performance_schema.threads thd ON mdl.owner_thread_id = thd.thread_id 

    WHERE processlist_id <> @@pseudo_thread_id;


3.关闭跟踪:

UPDATE performance_schema.setup_instruments SET ENABLED = 'NO' WHERE 

NAME = 'wait/lock/metadata/sql/mdl';    

   

DDL执行进度跟踪

1.打开跟踪:

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';

2.查看DDL执行进度:

SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED,(WORK_COMPLETED/WORK_ESTIMATED)*100 

as COMPLETED FROM performance_schema.events_stages_current;


sys库常用SQL:

查看表访问量

select table_schema,table_name,sum(io_read_requests+io_write_requests) io from sys.schema_table_statistics 

group by table_schema,table_name order by io desc limit 10;


查看数据库连接情况

select * from sys.processlist \G

select * from sys.session limit 10 \G

select * from sys.x$processlist \G

select * from sys.x$session \G


查看冗余索引

select table_schema,table_name,redundant_index_name,redundant_index_columns,dominant_index_name,

dominant_index_columns  from sys.schema_redundant_indexes;


查看未使用索引

select * from sys.schema_unused_indexes;


表自增ID监控

select * from sys.schema_auto_increment_columns limit 10;


查看实际消耗磁盘IO的文件

select file,avg_read+avg_write as avg_io from sys.io_global_by_file_by_bytes order by avg_io desc limit 10;


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2641633/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15498/viewspace-2641633/

<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、付费专栏及课程。

余额充值