MySQL数据库自带系统数据库功能介绍

文章目录

  • 一、mysql
    • [1. 核心特性](#1. 核心特性)
    • [2. 核心表](#2. 核心表)
    • [3. 权限管理说明](#3. 权限管理说明)
      • [3.1. 权限层次结构](#3.1. 权限层次结构)
      • [3.2. 权限类型](#3.2. 权限类型)
    • [4. 常用操作](#4. 常用操作)
      • [4.1. 查看所有用户](#4.1. 查看所有用户)
      • [4.2. 授予权限](#4.2. 授予权限)
      • [4.3. 查看特定用户的权限](#4.3. 查看特定用户的权限)
      • [4.4. 修改权限](#4.4. 修改权限)
      • [4.5. 删除用户权限](#4.5. 删除用户权限)
    • [5. 常见问题](#5. 常见问题)
      • [5.1. 无法登录](#5.1. 无法登录)
      • [5.2. 权限不生效](#5.2. 权限不生效)
      • [5.3. 密码重置](#5.3. 密码重置)
  • 二、information_schema
    • [1. 核心特性](#1. 核心特性)
    • [2. 核心视图](#2. 核心视图)
    • [3. 常用操作](#3. 常用操作)
      • [3.1. 查询所有数据库](#3.1. 查询所有数据库)
      • [3.2. 查询特定数据库的所有表](#3.2. 查询特定数据库的所有表)
      • [3.3. 查询表结构](#3.3. 查询表结构)
      • [3.4. 查询索引信息](#3.4. 查询索引信息)
      • [3.5. 查询外键关系](#3.5. 查询外键关系)
      • [3.6. 查询视图定义](#3.6. 查询视图定义)
      • [3.7. 数据库结构比较](#3.7. 数据库结构比较)
  • 三、performance_schema
    • [1. 核心特性](#1. 核心特性)
    • [2. 核心运行机制](#2. 核心运行机制)
    • [3. 核心表](#3. 核心表)
    • [4. 常用操作](#4. 常用操作)
      • [4.1. 检查是否已启用](#4.1. 检查是否已启用)
      • [4.2. 开启特定监控项](#4.2. 开启特定监控项)
      • [4.3. 配置监控粒度](#4.3. 配置监控粒度)
      • [4.4. 查看最耗时的SQL语句](#4.4. 查看最耗时的SQL语句)
      • [4.5. 查看最近执行的SQL详情](#4.5. 查看最近执行的SQL详情)
      • [4.6. 分析I/O瓶颈](#4.6. 分析I/O瓶颈)
      • [4.7. 监控长期运行事务](#4.7. 监控长期运行事务)
  • 四、sys
    • [1. 核心特性](#1. 核心特性)
    • [2. 主要内容](#2. 主要内容)
      • [2.1. 视图(Views)](#2.1. 视图(Views))
      • [2.2. 存储过程(Procedures)](#2.2. 存储过程(Procedures))
      • [2.3. 函数(Functions)](#2.3. 函数(Functions))
    • [3. 常用操作](#3. 常用操作)
      • [3.1. 排查慢查询](#3.1. 排查慢查询)
      • [3.2. 识别热点表](#3.2. 识别热点表)
      • [3.3. 分析锁等待](#3.3. 分析锁等待)
      • [3.4. 监控IO性能](#3.4. 监控IO性能)
      • [3.5. 查看使用临时表的查询](#3.5. 查看使用临时表的查询)
      • [3.6. 查看当前活动链接](#3.6. 查看当前活动链接)
      • [3.7. 查看内存使用情况](#3.7. 查看内存使用情况)
      • [3.8. 查看索引使用情况](#3.8. 查看索引使用情况)

MySQL自带的系统数据库是数据库管理的核心组成部分,主要包含mysqlinformation_schemaperformance_schemasys,它们不用于存储业务数据,而是用于存储系统元数据、权限信息和性能监控数据。这些系统数据库是MySQL正常运行和高效管理的关键。

一、mysql

mysql是 MySQL 的核心系统数据库,它是 MySQL 服务器运行的"大脑"。这个数据库存储了所有与用户权限系统配置元数据相关的信息,是 MySQL 正常运行的关键。

1. 核心特性

  • 用户权限管理:存储所有用户账户信息、权限分配及角色定义,是数据库安全控制的核心。
  • 系统配置存储:保存数据库的全局配置参数,如服务器变量、存储引擎设置等。
  • 元数据维护:记录数据库对象(如表、视图、存储过程等)的创建信息及关联关系。

2. 核心表

表分类 表名 用途 说明
用户权限管理 user 存储全局用户账户及权限信息 包含用户名、主机名、加密密码、全局权限(如SELECT_priv、INSERT_priv)等字段,是数据库安全控制的核心
数据库级权限 db 管理数据库级别的访问权限 指定用户对特定数据库的操作权限(如CREATE、DROP),权限粒度细化到数据库级别
表级权限 tables_priv 控制表级别的操作权限 记录用户对具体表的权限(如UPDATE、DELETE),支持更细粒度的权限管理
列级权限 columns_priv 实现列级别的访问控制 定义用户对表中特定列的权限(如仅允许修改某列数据),实现精细化权限管理
程序对象权限 procs_priv 管理存储过程/函数权限 存储用户对存储过程和函数的执行权限,控制程序对象的访问
代理权限 proxies_priv 管理代理用户权限 允许一个用户以另一个用户身份执行操作,支持权限代理机制
服务器配置 servers 存储服务器配置信息 记录MySQL服务器实例的配置参数,如服务器地址、端口等
事件调度器 event 管理事件调度器信息 包含事件名称、执行时间表达式、状态(ENABLED/DISABLED)等,用于定时任务管理
时区信息 time_zone 存储时区配置 包含时区名称、时区偏移量、是否启用等信息,支持多时区应用
时区转换 time_zone_leap_second 记录闰秒信息 存储闰秒发生时间及调整值,确保时间计算的准确性
时区名称映射 time_zone_name 时区名称与ID映射 关联时区名称与内部标识符,方便时区查询
时区偏移 time_zone_transition 时区转换历史 记录时区偏移量的历史变化,支持时间相关计算
插件管理 plugin 存储已安装插件信息 包含插件名称、状态(ACTIVE/INACTIVE)、版本、描述等,支持插件扩展
服务器变量 global_variables 存储全局服务器变量 包含变量名(如max_connections)、当前值、默认值等,影响服务器行为
会话变量 session_variables 存储会话级变量 与全局变量类似,但仅影响当前会话,支持个性化配置
帮助信息 help_topic 存储帮助主题信息 包含帮助主题ID、名称、描述等,支持内置帮助系统
帮助内容 help_relation 关联帮助主题与内容 映射帮助主题与详细内容的关联关系,构建帮助系统框架
帮助类别 help_category 管理帮助分类 定义帮助信息的分类体系,方便用户按类别查询帮助
慢查询日志 slow_log 记录慢查询信息 存储执行时间超过阈值的SQL语句,用于性能分析(需启用慢查询日志功能)

3. 权限管理说明

3.1. 权限层次结构

MySQL 的权限是分层管理的,从高到低依次为:

  • 全局权限user表):影响整个服务器。
  • 数据库级别权限db表):影响特定数据库。
  • 表级别权限tables_priv表):影响特定表。
  • 列级别权限columns_priv表):影响特定列。

3.2. 权限类型

权限类型 说明 作用范围
SELECT 查询数据 全局、数据库、表、列
INSERT 插入数据 全局、数据库、表、列
UPDATE 更新数据 全局、数据库、表、列
DELETE 删除数据 全局、数据库、表、列
CREATE 创建数据库/表 全局、数据库
DROP 删除数据库/表 全局、数据库
GRANT OPTION 授予权限 全局、数据库
CREATE TEMPORARY TABLES 创建临时表 全局、数据库
LOCK TABLES 锁定表 全局、数据库
CREATE VIEW 创建视图 全局、数据库
SHOW VIEW 查看视图 全局、数据库
EXECUTE 执行存储过程 全局、数据库、表

4. 常用操作

4.1. 查看所有用户

sql 复制代码
SELECT User, Host FROM mysql.user;

4.2. 授予权限

sql 复制代码
-- 授予用户对test数据库的SELECT权限
GRANT SELECT ON test.* TO 'user'@'localhost';

-- 授予用户对所有数据库的SELECT权限
GRANT SELECT ON *.* TO 'user'@'localhost';

-- 授予用户对特定表的权限
GRANT SELECT, INSERT ON test.users TO 'user'@'localhost';

-- 授予用户对特定列的权限
GRANT SELECT (name, email) ON test.users TO 'user'@'localhost';

4.3. 查看特定用户的权限

sql 复制代码
-- 查看用户权限
SHOW GRANTS FOR 'user'@'localhost';

-- 查看用户权限的详细信息
SELECT * FROM mysql.user WHERE User = 'user' AND Host = 'localhost';

4.4. 修改权限

sql 复制代码
-- 修改用户密码
ALTER USER 'user'@'localhost' IDENTIFIED BY 'new_password';

-- 重置密码
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('new_password');

-- 刷新权限
FLUSH PRIVILEGES;

4.5. 删除用户权限

sql 复制代码
-- 删除用户权限
REVOKE SELECT ON test.* FROM 'user'@'localhost';

-- 删除用户
DROP USER 'user'@'localhost';

5. 常见问题

5.1. 无法登录

  • 检查user表中的用户和密码
  • 确认Host字段是否匹配连接IP
  • 使用FLUSH PRIVILEGES刷新权限

5.2. 权限不生效

  • 确认是否执行了FLUSH PRIVILEGES
  • 检查权限是否在正确的表中(如db表 vs user表)

5.3. 密码重置

sql 复制代码
-- 停止MySQL服务
sudo systemctl stop mysql

-- 以跳过权限检查的方式启动
sudo mysqld_safe --skip-grant-tables &

-- 登录MySQL
mysql -u root

-- 重置密码
USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_password') WHERE User = 'root';

-- 重启MySQL服务
sudo systemctl restart mysql

二、information_schema

information_schema是 MySQL 的核心系统数据库,它提供了一个虚拟数据库,其中包含所有数据库的元数据信息。这个数据库不存储实际业务数据,而是提供关于数据库结构、表、列、索引、视图等的描述性信息。

1. 核心特性

  • 标准系统数据库:所有 MySQL 版本都支持。
  • 只读视图:不能直接修改数据,只能查询。
  • 动态生成的虚拟数据库:数据不存储在磁盘上,而是内部动态生成。
  • 元数据查询中心:数据库管理员和开发人员的"数据库百科全书"。
  • 标准 SQL 兼容:使用标准 SQL 查询获取元数据。

2. 核心视图

视图分类 视图名称 用途 说明
数据库元数据 SCHEMATA 查看数据库列表及属性 包含所有数据库名称、默认字符集、排序规则等信息
表元数据 TABLES 查看表及视图基本信息 包含表所属数据库、表名、存储引擎、创建时间、更新时间等
列元数据 COLUMNS 查看表列详细信息 包含列所属表、列名、数据类型、是否允许NULL、默认值、字符最大长度等
索引元数据 STATISTICS 查看表索引信息 包含索引所属表、索引名、列名、索引顺序、索引类型(如BTREE)等
权限管理 USER_PRIVILEGES 查看用户全局权限 包含用户账号、权限类型(如SELECT)、是否可授权等
存储过程/函数 ROUTINES 查看存储过程和函数 包含名称、类型(PROCEDURE/FUNCTION)、所属数据库、创建时间等
触发器 TRIGGERS 查看触发器信息 包含触发器所属表、事件类型(INSERT/UPDATE/DELETE)、触发时机(BEFORE/AFTER)等
事件调度器 EVENTS 查看事件调度器信息 包含事件名称、所属数据库、执行时间表达式、状态(ENABLED/DISABLED)等
字符集与排序 CHARACTER_SETS 查看支持的字符集 包含字符集名称、默认排序规则、描述等
排序规则 COLLATIONS 查看排序规则信息 包含排序规则名称、字符集、是否区分大小写、是否区分重音等
表约束 KEY_COLUMN_USAGE 查看表约束关系 包含约束类型(PRIMARY KEY/FOREIGN KEY)、关联表、关联列等
分区表 PARTITIONS 查看分区表信息 包含表名、分区名、分区方法(RANGE/HASH)、分区表达式等
插件管理 PLUGINS 查看已安装插件 包含插件名称、状态(ACTIVE/INACTIVE)、版本、描述等
服务器参数 GLOBAL_VARIABLES 查看全局服务器变量 包含变量名(如max_connections)、当前值、默认值等
会话参数 SESSION_VARIABLES 查看会话级变量 与GLOBAL_VARIABLES类似,但针对当前会话
引擎信息 ENGINES 查看存储引擎支持情况 包含引擎名称(如InnoDB)、支持状态(DEFAULT/YES/NO)、描述等
表空间 TABLESPACES 查看表空间信息 包含表空间名称、引擎、文件路径、空间大小等
锁信息 TABLE_CONSTRAINTS 查看表约束类型 包含表名、约束类型(PRIMARY KEY/UNIQUE/FOREIGN KEY)等
外键关系 REFERENTIAL_CONSTRAINTS 查看外键关联关系 包含父表、子表、关联列、更新/删除规则等
视图定义 VIEWS 查看视图定义详情 包含视图所属数据库、视图名、定义SQL语句、是否可更新等

3. 常用操作

3.1. 查询所有数据库

sql 复制代码
SELECT SCHEMA_NAME AS `Database`
FROM information_schema.SCHEMATA;

3.2. 查询特定数据库的所有表

sql 复制代码
SELECT TABLE_NAME AS `Table`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';

3.3. 查询表结构

sql 复制代码
SELECT 
    COLUMN_NAME AS `Column`,
    DATA_TYPE AS `Type`,
    IS_NULLABLE AS `Nullable`,
    COLUMN_KEY AS `Key`,
    COLUMN_DEFAULT AS `Default`,
    EXTRA AS `Extra`
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name';

3.4. 查询索引信息

sql 复制代码
SELECT 
    INDEX_NAME AS `Index`,
    COLUMN_NAME AS `Column`,
    SEQ_IN_INDEX AS `Seq`,
    NON_UNIQUE AS `NonUnique`
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name';

3.5. 查询外键关系

sql 复制代码
SELECT 
    CONSTRAINT_NAME AS `Constraint`,
    REFERENCED_TABLE_NAME AS `Referenced Table`,
    REFERENCED_COLUMN_NAME AS `Referenced Column`
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name'
AND REFERENCED_TABLE_NAME IS NOT NULL;

3.6. 查询视图定义

sql 复制代码
SELECT 
    TABLE_NAME AS `View`,
    VIEW_DEFINITION AS `Definition`
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = 'your_database_name';

3.7. 数据库结构比较

sql 复制代码
-- 比较两个数据库的表结构差异
SELECT 
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE AS source_type,
    (SELECT DATA_TYPE 
     FROM information_schema.COLUMNS 
     WHERE TABLE_SCHEMA = 'target_db' 
     AND TABLE_NAME = source.TABLE_NAME 
     AND COLUMN_NAME = source.COLUMN_NAME) AS target_type
FROM information_schema.COLUMNS source
WHERE TABLE_SCHEMA = 'source_db'
AND (SELECT DATA_TYPE 
     FROM information_schema.COLUMNS 
     WHERE TABLE_SCHEMA = 'target_db' 
     AND TABLE_NAME = source.TABLE_NAME 
     AND COLUMN_NAME = source.COLUMN_NAME) IS NULL
OR (SELECT DATA_TYPE 
    FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = 'target_db' 
    AND TABLE_NAME = source.TABLE_NAME 
    AND COLUMN_NAME = source.COLUMN_NAME) <> source.DATA_TYPE;

三、performance_schema

performance_schema是 MySQL 5.5 版本引入的核心性能监控工具,用于收集 MySQL 服务器运行时的底层事件信息 。它也是一个虚拟数据库 ,数据存储在内存中,重启后会丢失。它和慢查询日志不同,它提供的是实时、细粒度的性能数据,而不是事后分析的慢查询记录。

1. 核心特性

  • 低开销设计:采用轻量级检测点机制,默认配置下对性能影响小于5%,但启用大量监控项时可能增加开销。
  • 内存存储:所有数据保存在内存中,重启后数据丢失,不占用磁盘空间。
  • 事件驱动:以"事件"为单位记录资源消耗(如时间、次数),涵盖线程、语句、锁、I/O等关键指标。
  • 细粒度监控:比慢查询日志提供更详细的性能数据。
  • 实时性:可以实时监控数据库运行状态。
  • 可配置性:按需选择监控哪些事件。
  • 标准化SQL:数据存储在标准 MySQL 表中,便于使用 SQL 分析。

2. 核心运行机制

  • 事件分类与采集

    performance_schema通过"检测点"捕获服务器内部事件,事件类型包括:

    • 语句事件:SQL语句的执行(如解析、排序、执行)。
    • 等待事件:资源等待(如锁、I/O、线程同步)。
    • 阶段事件:SQL执行各阶段(如解析、优化、执行)。
    • 事务事件:事务的启动、提交、回滚。
    • 内存事件:内存分配与释放。
  • 存储引擎与表结构

    performance_schema使用专用存储引擎,表结构按功能分类:

    • 当前事件表 (如events_statements_current):记录当前活跃事件。
    • 历史事件表 (如events_statements_history):记录最近完成的事件(线程级)。
    • 长历史事件表 (如events_statements_history_long):记录全局历史事件。
    • 摘要表 (如events_statements_summary_by_digest):按语句摘要聚合统计数据。
    • 配置表 (如setup_instrumentssetup_consumers):动态控制监控项与数据存储。
  • 数据采集与存储

    • 事件数据通过检测点实时采集,存储在内存表中,支持SELECT查询。
    • 配置表(如setup_instruments)可启用/禁用特定事件采集,减少开销。

3. 核心表

表分类 表名 用途 说明
语句事件记录 events_statements_current 记录当前执行的SQL详细信息 如执行时间、扫描行数、锁等待等
语句事件记录 events_statements_history 记录最近完成的SQL历史 按线程分组,存储最近10条执行记录
语句事件记录 events_statements_history_long 全局SQL历史记录 存储所有线程的SQL执行情况,最多10000条
语句事件记录 events_statements_summary_by_digest SQL摘要聚合统计 按SQL指纹分组,统计执行次数、总耗时、平均耗时等
等待事件记录 events_waits_current 当前资源等待事件 如锁等待、I/O等待、线程同步等
等待事件记录 events_waits_history 最近完成的等待事件 按线程分组,存储最近10条等待记录
等待事件记录 events_waits_history_long 全局等待事件历史 存储所有线程的等待事件,最多10000条
等待事件记录 events_waits_summary_by_event_name 按事件名称聚合统计 如锁等待次数、总耗时、平均耗时等
阶段事件记录 events_stages_current 当前SQL执行阶段 如解析、优化、执行等阶段
阶段事件记录 events_stages_history 历史阶段事件 按线程分组,存储最近10条阶段记录
阶段事件记录 events_stages_history_long 全局阶段事件历史 存储所有线程的阶段事件,最多10000条
阶段事件记录 events_stages_summary_by_event_name 按阶段名称聚合统计 如解析阶段耗时、执行阶段耗时等
事务事件记录 events_transactions_current 当前执行的事务信息 如事务ID、状态、开始时间等
事务事件记录 events_transactions_history 最近完成的事务历史 按线程分组,存储最近10条事务记录
事务事件记录 events_transactions_history_long 全局事务历史 存储所有线程的事务记录,最多10000条
事务事件记录 events_transactions_summary_by_transaction 事务级别统计 如提交次数、回滚次数、事务耗时等
内存事件记录 memory_summary_by_account_by_event_name 按账户和事件统计内存 如分配次数、释放次数、内存使用量等
内存事件记录 memory_summary_by_host_by_event_name 按主机和事件统计内存 如内存分配、释放、使用量等
内存事件记录 memory_summary_by_thread_by_event_name 按线程和事件统计内存 如线程内存使用情况、内存泄漏检测等
内存事件记录 memory_summary_global_by_event_name 全局内存使用统计 如总分配量、总释放量、当前使用量等
文件I/O事件 file_summary_by_event_name 按事件统计文件I/O 如读写次数、耗时、数据量等
文件I/O事件 file_summary_by_instance 按文件实例统计I/O 如文件读写次数、耗时、数据量等
文件I/O事件 table_io_waits_summary_by_table 按表统计I/O等待 如表读写等待次数、耗时等
配置表 setup_instruments 配置事件采集项 启用/禁用特定事件监控,如锁、I/O、SQL执行等
配置表 setup_consumers 配置数据存储目标 控制是否记录历史、摘要或全局数据
配置表 setup_timers 配置计时器类型 如CPU时间、线程时间、墙钟时间等
配置表 setup_actors 配置用户/主机监控 设置用户和主机的监控权限
其他表 threads 服务器线程信息 如线程ID、类型、状态、CPU使用率等
其他表 users 用户信息 如用户名、主机、权限等
其他表 variables_by_thread 线程变量使用 如线程级变量值、默认值、是否修改等
其他表 mutex_instances 互斥同步对象实例 记录系统中使用互斥量对象的所有记录,name为wait/synch/mutex/*
其他表 rwlock_instances 读写锁同步对象实例 记录系统中使用读写锁对象的所有记录,name为wait/synch/rwlock/*
其他表 socket_instances 活跃会话对象实例 记录thread_id, socket_id, ip和port,用于关联应用与数据库

4. 常用操作

4.1. 检查是否已启用

sql 复制代码
SHOW VARIABLES LIKE 'performance_schema';
-- 默认值为 ON(MySQL 5.7+)

4.2. 开启特定监控项

sql 复制代码
-- 开启所有事件的监控(谨慎使用,可能影响性能)
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';

-- 按需开启特定监控(推荐)
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' 
WHERE NAME LIKE 'events_statements%'; -- 开启SQL语句监控

4.3. 配置监控粒度

sql 复制代码
-- 监控所有用户的SQL语句
UPDATE performance_schema.setup_actors SET ENABLED = 'YES', HISTORY = 'YES' 
WHERE USER = '%';

4.4. 查看最耗时的SQL语句

sql 复制代码
SELECT 
    DIGEST_TEXT AS 'SQL语句',
    COUNT_STAR AS '执行次数',
    SUM_TIMER_WAIT / 1e9 AS '总耗时(秒)',
    AVG_TIMER_WAIT / 1e9 AS '平均耗时(秒)'
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;

4.5. 查看最近执行的SQL详情

sql 复制代码
SELECT 
    EVENT_ID,
    SQL_TEXT AS 'SQL语句',
    TIMER_WAIT / 1e9 AS '耗时(秒)',
    LOCK_TIME / 1e9 AS '锁等待时间(秒)',
    ROWS_EXAMINED AS '扫描行数',
    ROWS_SENT AS '返回行数'
FROM performance_schema.events_statements_history
ORDER BY TIMER_WAIT DESC
LIMIT 10;

4.6. 分析I/O瓶颈

sql 复制代码
SELECT 
    EVENT_NAME AS '事件类型',
    COUNT_STAR AS '次数',
    SUM_TIMER_WAIT / 1e9 AS '总等待时间(秒)',
    AVG_TIMER_WAIT / 1e9 AS '平均等待时间(秒)'
FROM performance_schema.file_summary_by_event_name
WHERE EVENT_NAME LIKE '%read%'
ORDER BY SUM_TIMER_WAIT DESC;

4.7. 监控长期运行事务

sql 复制代码
SELECT 
    THREAD_ID,
    EVENT_ID,
    SQL_TEXT,
    TIMER_START,
    TIMER_WAIT / 1e9 AS '已运行时间(秒)'
FROM performance_schema.events_transactions_current
WHERE STATE = 'ACTIVE'
ORDER BY TIMER_WAIT DESC;

四、sys

sys是MySQL 5.7.7+ 引入的一个辅助库,旨在简化数据库管理员(DBA)和开发者的性能监控与诊断工作。它基于performance_schema和information_schema,通过视图、存储过程和函数的形式,提供更直观、易用的数据库性能和元数据信息。

sys 是 MySQL 的"性能分析助手",它将复杂的性能数据转换为易于理解的视图,让数据库管理员和开发人员能够快速识别和解决性能问题。

1. 核心特性

  • 简化性能监控

    • sys库封装了performance_schema的复杂表结构,提供预聚合的视图,直接展示关键性能指标(如查询执行时间、锁等待、IO延迟等)。
    • 例如,通过host_summary视图可快速查看各主机的连接数、内存使用、IO延迟等概览信息。
  • 快速诊断问题

    • 提供针对慢查询、热点表、锁等待等常见问题的专用视图,帮助定位性能瓶颈。
    • 例如,statements_with_runtimes_in_95th_percentile视图可识别执行时间最长的查询。
  • 统一元数据查询

    • 集成information_schema的信息,提供关于数据库对象(如表、索引、存储过程)的详细元数据视图。

2. 主要内容

2.1. 视图(Views)

sys库包含大量视图,按功能可分为以下几类:

  • 性能视图

    • statement_analysis:查询执行统计(次数、总延迟、平均延迟等)。
    • innodb_lock_waits:显示锁等待链,帮助解决死锁问题。
    • io_by_thread_by_latency:按线程统计IO延迟,识别高负载线程。
  • 元数据视图

    • schema_table_statistics:统计表的增删改查操作量及IO耗时。
    • schema_unused_indexes:识别未使用的冗余索引,优化表结构。
  • 系统状态视图

    • host_summary:主机级性能概览(连接数、内存使用、IO等)。
    • memory_by_thread_by_current_bytes:按线程统计内存使用情况。

视图命名规则 :大部分视图成对出现,带x$前缀的视图显示原始数据(如皮秒单位),不带前缀的视图显示经过单位换算的数据(如毫秒、秒)。 比如:host_summary_by_file_io(换算后)与x$host_summary_by_file_io(原始数据)。

2.2. 存储过程(Procedures)

用于动态配置performance_schema的监控项,例如:

  • ps_setup_enable_instrument('wait'):启用等待事件监控。
  • ps_setup_disable_consumer('history_long'):禁用历史长事件收集。
  • ps_setup_reset_to_default(TRUE):重置performance_schema为默认配置。

2.3. 函数(Functions)

提供格式化输出功能,例如:

  • format_bytes(bytes):将字节数转换为易读的单位(如KB、MB)。
  • format_time(microseconds):将微秒转换为时间字符串(如00:00:01.234)。

3. 常用操作

3.1. 排查慢查询

sql 复制代码
-- 查看执行时间最长的10个查询
SELECT * FROM sys.statement_analysis 
ORDER BY total_latency DESC 
LIMIT 10;

3.2. 识别热点表

sql 复制代码
-- 查看操作最频繁的表
SELECT * FROM sys.schema_table_statistics 
ORDER BY rows_fetched + rows_inserted + rows_updated + rows_deleted DESC 
LIMIT 10;

3.3. 分析锁等待

sql 复制代码
-- 查看当前锁等待链
SELECT * FROM sys.innodb_lock_waits;

3.4. 监控IO性能

sql 复制代码
-- 按主机统计文件IO延迟
SELECT * FROM sys.host_summary_by_file_io 
ORDER BY io_latency DESC;

3.5. 查看使用临时表的查询

sql 复制代码
SELECT 
    DIGEST_TEXT AS 'SQL语句',
    COUNT_STAR AS '执行次数',
    SUM_CREATED_TMP_DISK_TABLES AS '磁盘临时表次数',
    SUM_CREATED_TMP_TABLES AS '临时表总数'
FROM sys.statements_with_temp_tables
ORDER BY SUM_CREATED_TMP_TABLES DESC
LIMIT 10;

3.6. 查看当前活动链接

sql 复制代码
SELECT 
    ID, 
    USER, 
    HOST, 
    DB, 
    COMMAND, 
    TIME, 
    STATE, 
    INFO
FROM sys.processlist
ORDER BY TIME DESC;

3.7. 查看内存使用情况

sql 复制代码
SELECT 
    EVENT_NAME AS '内存事件',
    COUNT_STAR AS '次数',
    SUM_NUMBER_OF_BYTES_USED / 1024 / 1024 AS '总内存(MB)'
FROM sys.memory_global_by_current_bytes
ORDER BY SUM_NUMBER_OF_BYTES_USED DESC
LIMIT 10;

3.8. 查看索引使用情况

sql 复制代码
SELECT 
    TABLE_SCHEMA AS '数据库',
    TABLE_NAME AS '表名',
    INDEX_NAME AS '索引名',
    SEQ_IN_INDEX AS '索引顺序',
    COLUMN_NAME AS '列名',
    CARDINALITY AS '基数',
    NON_UNIQUE AS '是否唯一'
FROM sys.schema_index_statistics
ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME;
相关推荐
总有刁民想爱朕ha1 小时前
Windows Server 2019部署MySQL 8教程
数据库·windows·mysql
纪伊路上盛名在1 小时前
记1次BioPython Entrez模块Elink的debug
前端·数据库·python·debug·工具开发
CryptoRzz1 小时前
日本股票 API 对接实战指南(实时行情与 IPO 专题)
java·开发语言·python·区块链·maven
旧梦吟2 小时前
脚本网页 三人四字棋
前端·数据库·算法·css3·html5
谷哥的小弟2 小时前
Spring Framework源码解析——RequestContext
java·后端·spring·框架·源码
小光学长2 小时前
基于ssm的考研复习平台w0ws1848(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
天远Date Lab2 小时前
Java微服务实战:聚合型“全能小微企业报告”接口的调用与数据清洗
java·大数据·python·微服务
-大头.2 小时前
数据库高可用架构终极指南
数据库·架构
Elastic 中国社区官方博客2 小时前
Elasticsearch:构建一个 AI 驱动的电子邮件钓鱼检测
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索