性能分析之1:profiles及Query Profiling Using Performance Schema

如题所述

分析SQL耗时所在,使用MySQL提供的profiles功能,通过`show profiles`查看当前会话中SQL语句执行的资源消耗情况,以辅助SQL调优。默认状态下,此功能关闭,保存最近15次的运行结果,最大保存数量为100次,设置为0可完全禁用。可使用`profiling`会话变量控制profiles功能的开启与关闭。

`SHOW PROFILE`和`SHOW PROFILES`语句用于显示分析信息,但已被废弃,官方推荐使用`Query Profiling Using Performance Schema`方法。

要开启profiles,可设置`profiling`会话变量为1或ON。`SHOW PROFILES`会显示最近执行语句的列表,大小由`profiling_history_size`会话变量控制,默认为15,最大值为100。设置为0可禁用分析。

分析SQL时,所有除了SHOW PROFILE和SHOW PROFILES之外的语句都会被分析,即使它们包含格式错误,如`SHOW PROFILING`,也都会被记录。分析结果包括Status和Duration信息,帮助了解SQL执行状态和耗时。

使用`show profile`字段解释分析SQL时的状态和建议,如`system lock`、`sending data`、`Sorting result`、`Table lock`、`create sort index`等,每种状态都有对应优化建议。例如,`Sending Data`通常是因为数据量大,建议使用索引或`LIMIT`减少数据量。

使用`INFORMATION_SCHEMA.PROFILING`表获取分析信息,但此表已被弃用,推荐使用`Query Profiling Using Performance Schema`。此方法使用Performance Schema语句事件和阶段事件提供与`SHOW PROFILES`和`SHOW PROFILE`相等的分析数据。

使用`setup_actors`表限制历史事件的收集,仅对特定用户进行监控和事件收集,以减少运行时开销和历史表中数据量。`setup_instruments`确保启用语句和阶段检测,`setup_consumers`确保`events_statements*`和`events_stages*`用户被启用。之后,运行需要分析的SQL语句,通过`events_statements_history_long`表识别`EVENT_ID`,并查询`events_stages_history_long`表获取阶段事件信息,实现与`SHOW PROFILES`类似的功能。
温馨提示:内容为网友见解,仅供参考
无其他回答

性能分析之1:profiles及Query Profiling Using Performance Schema
`SHOW PROFILE`和`SHOW PROFILES`语句用于显示分析信息,但已被废弃,官方推荐使用`Query Profiling Using Performance Schema`方法。要开启profiles,可设置`profiling`会话变量为1或ON。`SHOW PROFILES`会显示最近执行语句的列表,大小由`profiling_history_size`会话变量控制,默认为15,最大值为100。设置为...

Mysql Server 层混杂信息字典表 | 全方位认识 information_schem...
最后,我们探讨 PROFILING 表,查询语句性能分析信息。需要在会话变量 profiling=1 时记录,否则不记录。不再推荐使用,未来版本将删除,建议使用 Performance Schema 替代。该表为 Memory 引擎的临时表,信息包括:QUERY_ID、SEQ、STATE、DURATION 等。同时,我们还有 CHARACTER_SETS 表查询可用字符集,COLLAT...

如何使用oprofile对软件做profiling
Operf不再象legacy mode那样需要OProfile kernel driver,它直接和Linux Kernel Performance Events Subsystem打交道。使用operf,就可以用普通用户的身份来profiling用户的应用程序了,当然如果需要对整个系统来profiling 的时候还是需要root权限的。 如果硬件不支持OProfile使用performance counters,OProfile就只能工作在Timer Mode下...

相似回答
大家正在搜