sys 库简介
sys 库的使用需要 DBA 具有以下权限:
- 对所有 sys 表和视图具有 SELECT 权限
- 对所有 sys 存储过程和函数具有 EXECUTE 权限
- 对 sys_config 表具有 INSERT、UPDATE 权限
- 对某些特定的 sys 系统库存储过程和函数需要额外权限,如 ps_setup_save () 存储过程,需要临时表相关的权限
sys 库下有两种表:
- 字母开头:适合人阅读,显示是格式化的数
- x$ 开头:适合工具采集数据,原始类数据
sys 库可以支持查看以下方向的信息:
- host:以 IP 分组相关的统计信息
- innodb:innodb buffer 相关信息
- io:数据内不同维度展的 IO 相关的信息
- memory:以 IP,连接,用户,分配的类型分组及总的占用显示内存的使用
- metrics:DB 的内部的统计值
- processlist:线程相关的信息 (包含内部线程及用户连接)
- schema:表结构相关的信息,例如:自增,索引,表里的每个字段类型,等待的锁等等
- session:用户连接相关的信息
- statement:基于语句的统计信息(重点)
- statements:出错的语句,进行全表扫描,运行时间超长,排序相等(重点)
- user:和 host 开头的相似,只是以用户分组统计
- wait:等待事件,比较专业,难看懂。
- waits:以 IP,用户分组统计出来的一些延迟事件,有一定的参考价值。
sys 库是一个非常有用的工具,可以帮助 DBA 快速定位和解决 MySQL 的性能问题。但是 sys 库也有一些局限性,比如:
- sys 库只能查询当前实例的性能数据,不能跨实例或跨集群查询
- sys 库只能查询当前时间段的性能数据,不能查询历史数据或趋势分析
- sys 库只能提供一些基本的性能指标和统计信息,不能提供深入的诊断和优化建议
因此,在使用 sys 库时,DBA 还需要结合其他工具和方法,比如:
- 使用 MySQL Enterprise Monitor 或者 Percona Monitoring and Management 等监控工具,可以实现跨实例或跨集群的性能监控和报警,并提供历史数据和趋势分析
- 使用 MySQL Enterprise Advisor 或者 Percona Toolkit 等优化工具,可以实现对 SQL 语句和索引等方面的深入诊断和优化建议,并提供自动化修复功能
总之,sys 库是 MySQL 5.7 版本提供给 DBA 的一个非常专业且强大的系统库,可以帮助 DBA 更好地了解 MySQL 的运行情况,并快速发现和解决一些常见问题.
sys库 配置
sys库的配置表是sys_config,它用于存储sys库的一些配置参数,比如是否启用诊断功能、是否显示二进制日志文件名等。sys_config表有三个字段:variable_name、variable_value和set_time。variable_name是配置参数的名称,variable_value是配置参数的值,set_time是配置参数设置的时间。可以通过查询sys_config表来查看或修改sys库的配置参数,例如:
-- 查看sys库的所有配置参数
SELECT * FROM sys.sys_config;
-- 修改sys库的配置参数
UPDATE sys.sys_config SET variable_value = 'ON' WHERE variable_name = 'diagnostics.include_raw';
-- 添加新的配置参数
INSERT INTO sys.sys_config (variable_name, variable_value) VALUES ('my_custom_variable', 'some_value');
sys库 常用sql
- 查询每个数据库占用的内存大小:
sql
SELECT schema_name, sys.format_bytes(sum(current_allocated)) AS current_allocated
FROM sys.schema_table_statistics_with_buffer
GROUP BY schema_name;
- 查询每个用户执行的语句数量和平均延迟:
SELECT user, statements, statement_avg_latency
FROM sys.user_summary_by_statement_type;
- 查询出错或警告的语句:
SELECT db, query, errors, warnings
FROM sys.statements_with_errors_or_warnings;
- 查询进行全表扫描的语句:
SELECT db, query, full_scan, exec_count
FROM sys.statements_with_full_table_scans;
- 查询运行时间超过 95% 分位数的语句:
SELECT db, query, total_latency, rows_sent
FROM sys.statements_with_runtimes_in_95th_percentile;