30.1.1使用MySQL性能模式

查询分析器数据通过监视MySQL Server 5.6.14或更高版本自动收集和显示,不需要任何额外的插件。此功能由性能模式语句摘要特性(性能模式语句摘要),在MySQL 5.6中添加。

请注意

MySQL 5.6.14之前的MySQL服务器版本被禁用,原因是在从代理收集数据时可能触发语句摘要中的崩溃错误。

从Performance Schema收集查询分析器数据,提供关于语句如何生成结果集的数据:

  • 锁定时间

  • 检查了多少行,返回了多少行

  • 创建了多少个临时表,是否在磁盘上创建了临时表

  • 是否进行距离扫描,以及以什么形式进行

  • 是否进行了排序,对多少行进行了排序,以及排序采取了什么形式

MySQL Enterprise Monitor Agent轮询performance_schema.events_statements_summary_by_digest表(默认情况下每分钟一次),并持续计算快照窗口期间公开的每个规范化语句的增量。这取决于性能模式设置中启用了“statements_digest”使用者performance_schema.setup_consumers, MySQL 5.6中默认启用:

SELECT * FROM performance_schema。setup_consumers WHERE name = 'statements_digest';+-------------------+---------+ | 启用名字|  | +-------------------+---------+ | statements_digest |是的  | +-------------------+---------+

如果没有启用,那么用以下方法启用它:

更新performance_schema。setup_consumers SET enabled = 'YES' WHERE name = 'statements_digest';
请注意

MySQL Enterprise Monitor Agent没有截断performance_schema.events_statements_summary_by_digest表,因为有可能有其他进程/工具使用该数据。正因为如此,Query Analyzer中每个规范化语句报告的Max Latency统计数据实际上是MySQL Server启动以来的最大值,或者是自TRUNCATE TABLE performance_schema.events_statements_summary_by_digest被处决。

请注意

默认情况下,可用于摘要计算的最大空间是1024字节;超过此长度的查询将被截断。

从MySQL 5.7.8及更高版本、5.6.26及更高版本开始,可以在服务器启动时通过设置performance_schema_max_digest_length系统变量。在MySQL 5.6.24、5.6.24、5.7.6和5.7.7中,使用max_digest_length代替。对于5.7.6之前的MySQL 5.7版本,不能修改该值。对于5.6.24之前的MySQL 5.6版本也不能更改。

performance_schema.events_statements_summary_by_digest表是Performance Schema内内存中的一个大小表,它的大小是自动配置的。查看当前大小。

查询全局变量:performance_schema_digests_size;+---------------------------------+-------+ | Variable_name |值  | +---------------------------------+-------+ | performance_schema_digests_size | 5000  | +---------------------------------+-------+

如果应用程序执行的规范化语句多于这个数目,那么就可能开始丢失一些语句插装。您可以使用Performance_schema_digest_lost系统变量:

查询全局状态:Performance_schema_digest_lost;+--------------------------------+-------+ | Variable_name |值  | +--------------------------------+-------+ | Performance_schema_digest_lost | 0  | +--------------------------------+-------+

如果检测到该计数器变量正在增长,则考虑增加performance_schema_digests_size系统变量。还有一种可能是,您的语句概要文件随着时间的推移发生了变化,您现在执行的语句与最初跟踪的语句不同(这在非常长时间运行的实例中尤其有可能)。在这种情况下,您可以简单地使用TRUNCATE TABLEperformance_schema.events_statements_summary_by_digest,查询分析器集合将再次自动启动。

当启用“示例查询”特性时,Query Analyzer会尝试通过在快照间隔中执行LEFT JOIN,并在performance_schema.events_statements_summary_by_digest表到performance_schema.events_statements_history_long表格使用此方法并不保证总是提供示例语句,因为默认情况下events_statements_history_long表是最近执行的1000条语句的循环缓冲区。以这种方式从Performance Schema收集数据,以最小化被监视实例上的负载,而不是轮询performance_schema.events_statements_history_long表太高了,要频繁尝试和收集统计数据。

请注意

已知先验值的快照的一小部分(大约2MB数据)保留在内存中,其余的被假脱机保存到磁盘。线轴被储存在MYSQL_AGENT_HOME美元/ spool / queryAnalysis。

“示例查询”特性要求events_statements_history_long表在performance_schema.setup_consumers(在MySQL 5.6中默认禁用):

SELECT * FROM performance_schema。Setup_consumers where name = 'events_statements_history_long';+--------------------------------+---------+ | 启用名字|  | +--------------------------------+---------+ | events_statements_history_long |没有  | +--------------------------------+---------+

如果没有启用,那么用以下方法启用它:

更新performance_schema。setup_consumers SET enabled = 'YES' WHERE name = 'events_statements_history_long';

当“示例查询”和“示例解释”被启用时,MySQL Enterprise Monitor Agent会尝试为每个被发现的示例语句运行一个Explain,并且运行的时间超过了“自动解释阈值”。由于Performance Schema公开规范化语句的方式,由于MySQL Server内的内存问题,截断任何长度超过1024字节的规范化语句意味着EXPLAIN可能失败,因为被截断的语句在运行EXPLAIN时不能正确解析。