《MysqL实例MysqL优化之定位效率较低的sql》要点:
本文介绍了MysqL实例MysqL优化之定位效率较低的sql,希望对您有用。如果有疑问,可以联系我们。
MysqL实例一般通过以下两种方式定位执行效率较低的 sql 语句.
MysqL实例通过慢查询日志定位那些执行效率较低的 sql 语句,用 --log-slow-querIEs[=file_name] 选项启动时,MysqLd 会 写一个包含所有执行时间超过 long_query_time 秒的 sql 语句的日志文件,通过查看这个日志文件定位效率较低的 sql .
MysqL实例慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processList 命令查看当前 MysqL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 sql 的 执行情况,同时对一些锁表 *** 作进行优化.
MysqL实例下面我们举例说明一下,如何通过慢查询日志定位执行效率底的 sql 语句:
开启慢查询日志:
log-slow-querIEs
MysqL实例在 my.cnf 配置文件中增加上述配置项并重启 MysqL 服务,这时 MysqL 慢查询功能生效.慢查询 日志将写入参数 DATADIR (数据目录)指定的路径下,默认文件名是 host_name-slow.log .
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取.
MysqL实例下例中演示了慢查询日志的设置和读取过程.
1,首先查询一下 long_query_time 的值 .
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
MysqL实例2,为了方便测试,将修改慢查询时间为 5 秒.
query OK,0 rows affected (0.02 sec)
MysqL实例3,依次执行下面两个查询语句.
第一个查询因为查询时间低于 5 秒而不会出现在慢查询日志中:
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)
MysqL实例第二个查询因为查询时间大于 5 秒而应该出现在慢查询日志中:
+----------+
| count(*) |
+----------+
| 6552961 |
+----------+
1 row in set (11.07 sec)
MysqL实例4,查看慢查询日志.
# Time: 081026 19:46:34
# User@Host: root[root] @ localhost []
# query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961
select count(*) from t_user;
MysqL实例从上面日志中,可以发现查询时间超过 5 秒的 sql,而小于 5 秒的则没有出现在此日志中.
MysqL实例如果慢查询日志中记录内容很多,可以使用 MysqLdumpslow 工具( MysqL 客户端安装自带)来对慢查询日志进行分类汇总.
下例中对日志文件 MysqL_master-slow.log 进行了分类汇总,只显示汇总后摘要结果:
Reading MysqL slow query log from MysqL_master-slow.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2),root[root]@MysqL_master
select count(N) from t_user;
MysqL实例对于 sql 文本完全一致,只是变量不同的语句,MysqLdumpslow 将会自动视为同一个语句进行统计,变量值用 N 来代替.
这个统计结果将大大增加用户阅读慢查询日志的效率,并迅速定位系统的 sql 瓶颈.
MysqL实例注意:慢查询日志对于我们发现应用中有性能问题的 sql 很有帮助,建议正常情况下,打开此日志并经常查看分析.
总结以上是内存溢出为你收集整理的Mysql实例mysql优化之定位效率较低的SQL全部内容,希望文章能够帮你解决Mysql实例mysql优化之定位效率较低的SQL所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)