MySQL 诊断分析低效 SQL 的方法
性能诊断分析是一种利用工具手段,通过采用实际监测,而不是“自我臆测 ”来帮助项目组进行诊断。
可以通过以下方式定位执行效率较低的 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"技术主题,将会不断更新优质资料、文章,您也可以前往提出疑难问题,与同行切磋交流。
下载 twt 社区客户端 APP
与更多同行在一起
高手随时解答你的疑难问题
轻松订阅各领域技术主题
浏览下载最新文章资料
长按识别二维码即可下载
或到应用商店搜索“twt”