作者:秦福朗
爱可生 DBA 团队成员,负责我的项目日常问题解决及公司平台问题排查。酷爱 IT,喜爱在互联网里畅游,善于摄影、厨艺,不会厨艺的 DBA 不是好司机,didi~
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
引言
用过 Oracle 数据库的同学都晓得,在 Oracle 有个性能:AWR(全称为 Automatic Workload Repository),主动负载信息库。它收集对于特定数据库的操作统计信息和其余统计信息,Oracle 以固定的工夫距离(默认为 1 个小时)为其所有重要的统计信息和负载信息执行一次快照,并将快照寄存入 AWR 中,为 DBA 们剖析数据库提供了十分好的便当条件。尽管 MySQL 没有这么强的性能,但 MySQL 有一个相似的,名叫 diagnostics 的存储过程,提供了相相似的性能。
diagnostics() 存储过程是利用 MySQL 本身的 information_schema,performance_schema、sys 等元数据信息及性能数据信息的库表函数等,对以后服务器状态进行诊断,提供给 DBA 一份能够用于剖析数据库状态的报告。
根本蕴含信息
diagnostics() 收集的数据次要蕴含以下信息:
- 来自 metrics 视图的信息;
- 来自其余相干的 sys schema 视图的信息,比方检测第 95 百分位数的查问视图;
- 如果是 NDB Cluster 的 MySQL 服务器,则还会有 ndbinfo schema 的信息;
- 主从复制状态信息
一些 sys schema 的视图被计算为初始(可选)、overall 和 delta:
- 初始视图是 diagnostics() 过程开始时的视图内容。这个输入与用于 delta 视图的起始值雷同。如果 diagnostics.include_raw 配置选项为 ON,则初始视图会被蕴含在报告中。
- overall 视图是 diagnostics() 过程完结时的视图内容。这个输入与用于 delta 视图的完结值雷同。overall 视图总是被蕴含在报告内。
- delta 视图是 procedure 执行开始到完结的差别。最小值和最大值别离是完结视图的最小值和最大值。它们不肯定反映监控期间的最小值和最大值。除了 metrics 视图外,Delta 仅计算第一个和最初一个输入之间的差值。
留神:
这个存储过程通过操作 sql_log_bin 零碎变量的会话值,在执行过程中禁用二进制日志。这是一个受限制的操作,所以这个存储过程须要有足够的权限来设置受限制的会话变量。
命令示例
形式 1:
创立一个诊断报告,应用 current Performance Schema 设置,每 30 秒启动一次迭代,最多运行 120 秒:
mysql> CALL sys.diagnostics(120, 30, 'current');
要在 diagnostics() 过程运行时将其输入内容捕捉到文件中,可应用 MySQL 客户端 tee 文件名和 notee 命令:
mysql> tee diag.out;
mysql> CALL sys.diagnostics(120, 30, 'current');
mysql> notee;
此形式生成表格款式如下:
形式 2:
shell> mysql -uroot -p -S /opt/mysql/data/6666/mysqld.sock -H -e "CALL sys.diagnostics(120, 30,'current');" >report.html
此形式生成网页款式如下:
参数
CALL sys.diagnostics(in_max_runtime, in_interval, 'current');
- in_max_runtime(INT UNSIGNED):最大数据采集工夫,单位为秒。默认值为 60 秒,自定义需应用大于 0 的值。
- in_interval(INT UNSIGNED):数据采集之间的休眠工夫,单位为秒。默认值为 30 秒,自定义需应用大于 0 的值。
-
in_auto_config ENUM(‘current’, ‘medium’, ‘full’): 要应用的 Performance Schema 配置。容许的值有:
- current:应用以后的 instrumen 和 consumers 设置。
- medium:启用局部 instrumen 和 consumers。
- full:启用所有 instrumen 和 consumers。
留神:
无关 Performance Schema 模式下的 instrumen 和 consumer 的概念与根本应用原理可自行查阅材料,本文不再赘述。
启用的 instrumen 和 consumer 越多,对 MySQL 服务器性能影响越大。要小心应用 medium 设置,尤其是 full 设置,对性能影响较大。没特殊要求应用 current 即可。
应用 medium 或 full 设置须要 super 权限,如果抉择了 current 以外的设置,则会在程序完结时复原以后设置。
配置选项
diagnostics() 操作能够应用上面的配置选项或者其对应的用户定义变量:
以下参数需新增或批改 sys.sys_config,具体用法可理解 MySQL 官网文档 sys_config 一节。
- debug, @sys.debug
如果该选项为 ON,则产生调试输入。默认值为 OFF。
UPDATE `sys`.`sys_config` SET `value` = 'ON' WHERE `variable` = 'debug';
- diagnostics.allow_i_s_tables, @sys.diagnostics.allow_i_s_tables
如果这个选项为 ON,那么 diagnostics() 过程就被容许在 INFORMATION_SCHEMA.TABLES 表上执行表扫描。如果有很多表,这可能会有较高的代价。默认值是 OFF。
UPDATE `sys`.`sys_config` SET `value` = 'ON' WHERE `variable` = 'diagnostics.allow_i_s_tables';
- diagnostics.include_raw, @sys.diagnostics.include_raw
如果这个选项为 ON,则 diagnostics() 过程的输入包含查问 metrics 视图的原始输入。默认值是 OFF。
UPDATE `sys`.`sys_config` SET `value` = 'ON' WHERE `variable` = 'diagnostics.include_raw';
- statement_truncate_len, @sys.statement_truncate_len
format_statement() 函数返回的语句的最大长度。较长的语句会被截断到这个长度。默认值是 64。
UPDATE `sys`.`sys_config` SET `value` = '32' WHERE `variable` = 'statement_truncate_len';
报告信息
(1)MySQL 服务器根本信息
(2)根本配置信息
- 参数配置
- Performance Schema 下的 instrumen 与 consumer 配置状况
(3)sys schema 初始状态
(4)每次迭代的信息
和命令给定的迭代周期与次数无关
(5)Schema 信息
(6)Overall 状态信息
(7)Delta 状态信息
因篇幅长度,以上只是列出局部信息,具体信息能够自行实际理解,文档开端附上一份报告链接,可下载审阅。
结语
diagnostics() 蕴含的信息很多,可实现“一键”数据库性能信息状态诊断并输入报告,帮忙 DBA 在理论工作中便捷地剖析数据库状态。
附链接:
sys_config:https://dev.mysql.com/doc/ref…
诊断报告示例:
链接:https://pan.baidu.com/s/1XEV2… 提取码:3306