查看原文
其他

MySQL 诊断分析低效 SQL 的方法

泊涯 twt企业IT社区 2022-07-03

性能诊断分析是一种利用工具手段,通过采用实际监测,而不是“自我臆测 ”来帮助项目组进行诊断。

可以通过以下方式定位执行效率较低的 SQL 语句:

1. MYSQL慢日志分析

MYSQL可以通过慢查询日志定位那些执行效率较低的 sql 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 写一个包含抓取所有执行时间超过long_query_time设定秒数的 SQL 语句的日志文件。

慢日志配置,linux 一般在my.cnf,如果是wind服务一般在my.ini,

2. 时时查看线程状态

有时开启慢日志监控有时会影响MYSQL自身性能,可以 使用 show processlist查看当前MYSQL的线程, 因为命令慢查询日志在查询结束以后才纪录,所以在应用业务层上反映执行效率出现问题的时候,再查慢查询日志并不能精准的定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态,是否锁表等等,可以实时的查看 SQL 执行情况, 同时对一些锁表操作进行优化。

3. EXPLAIN分析

通过EXPLAIN 分析低效 SQL的执行计划:

该EXPLAIN语句提供有关MySQL如何执行语句的信息。 EXPLAIN作用有 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。EXPLAIN会返回SELECT语句中使用的每个表的行信息 。它按照MySQL在处理语句时读取它们的顺序列出输出中的表。如果MySQL使用嵌套循环连接方法解析所有连接。这意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表中找到匹配的行,依此类推。处理完所有表后,MySQL会通过表列表输出所选列和回溯,直到找到有更多匹配行的表。从该表中读取下一行,并继续下一个表。

EXPLAIN输出列如下:

如果发现语法问题,例如全表扫描等可以通过建立索引等优化处理。

一旦确定了性能瓶颈的根本原因,请采取适当的纠正措施,例如:

1、调整服务器参数(缓存大小,内存等)

2、通过不同的方式调整查询

3、调整数据库模式(表,索引等)

4、调整代码


作者:泊涯(郭柏雅),测试领域专家。


相关阅读:

MySQL数据库服务CPU高问题分析与优化


点击阅读原文关注社区"MySQL"技术主题,将会不断更新优质资料、文章,您也可以前往提出疑难问题,与同行切磋交流。


下载 twt 社区客户端 APP

与更多同行在一起

高手随时解答你的疑难问题

轻松订阅各领域技术主题

浏览下载最新文章资料


长按识别二维码即可下载

或到应用商店搜索“twt”


长按二维码关注公众号

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存