语句剖析

events_stages_[current|history|history_long] 表包含剖析信息,例如 MySQL 在创建临时表、更新或等待锁时花费了多少时间。

要启用剖析,需要启用上述消费者表以及匹配'stage/%'模式的插桩。启用后可以找到类似“查询执行的哪个阶段花费了非常长的时间”等问题的答案。

启动插桩

代表不同性能问题的阶段:

stage/sql/%tmp%

所有与临时表相关的内容。

stage/sql/%lock%

所有与锁相关的内容。

stage/%/Waiting for %

所有与等待资源相关的内容。

stage/sql/Sending data

这个阶段应该与语句统计中的 ROWS_SENT 进行比较。如果 ROWS_SENT 很小,那么在这个阶段花费大量时间的语句可能意味着必须创建一个临时文件或表来解析中间结果,这通常是查询优化不良的症状。

stage/sql/freeing items stage/sql/cleaning up stage/sql/closing tables stage/sql/end

这些都是释放资源的阶段。

如果发现查询在这些阶段花费了很长时间,那么很可能是由于高并发行而遇到资源争用。你需要检查CPU、I/O和内存使用情况,以及硬件和MySQL选项是否足够处理应用程序创建的并发性。

默认情况下,上述插桩都未启用,因此需要执行以下语句:

UPDATE setup_instruments
SET enabled = 'YES'
WHERE name LIKE 'stage/sql/%tmp%'
   OR name LIKE 'stage/sql/%lock%'
   OR name LIKE 'stage/%/Waiting for %'
   OR name LIKE 'stage/sql/Sending data'
   OR name LIKE 'stage/sql/freeing items'
   OR name LIKE 'stage/sql/cleaning up'
   OR name LIKE 'stage/sql/closing tables'
   OR name LIKE 'stage/sql/end';

启动消费者表

默认情况下,这三张消费者表都未启用。

UPDATE setup_consumers
SET enabled = 'YES'
WHERE name LIKE 'events_stages_%';

查询消费者表,获取信息

SELECT * FROM events_stages_history;

最后更新于