优化sql语句是优化数据库的一个很重要的方面,那么怎么发现那些耗时耗资源的sql语句呢,开启Mysql慢查询!

1.查看是否开启慢查询,默认情况下是关闭的。你的mysql最好在5.1版本以上

mysql> show variables like "%slow%";

  1. +---------------------+---------------------------------------------------------
  2. ------------------+
  3. |Variable_name|Value
  4. |
  5. +---------------------+---------------------------------------------------------
  6. ------------------+
  7. | log_slow_queries | OFF
  8. |
  9. | slow_launch_time |2
  10. |
  11. | slow_query_log | OFF
  12. |
  13. | slow_query_log_file | D:\software\wamp\wamp\bin\mysql\mysql5.5.20\data\WIN-23J
  14. S4C29BV4-slow.log |
  15. +---------------------+---------------------------------------------------------
  16. ------------------+

2.命令行开启mysql慢查询:

  1. mysql>setglobal slow_query_log=on;
  2. Query OK,0 rows affected (0.09 sec)

或者修改mysql配置文件开启mysql慢查询:(记得重启mysql)

Windows下开启MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上:
log-slow-queries = F:\MySQL\log\mysqlslowquery.log
long_query_time = 2

Linux下启用MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上:
log-slow-queries=/data/mysqldata/slowquery.log
long_query_time=2

3.分析mysql慢查询日志:
mysql慢查询日志类似这样的:

  1. /usr/local/mysql/libexec/mysqld,Version:5.1.26-rc-log (Source distribution). started with:
  2. Tcp port:3306Unix socket:/tmp/mysql.sock
  3. TimeIdCommandArgument
  4. # Time: 100814 13:28:30
  5. # User@Host: root[root] @ localhost []
  6. # Query_time: 10.096500 Lock_time: 0.045791 Rows_sent: 1 Rows_examined: 2374192
  7. SET timestamp=1281763710;
  8. select count(distinct ad_code)as x from ad_visit_history where ad_code in(select ad_code from ad_list where media_id=15);
  9. # Time: 100814 13:37:02
  10. # User@Host: root[root] @ localhost []
  11. # Query_time: 10.394134 Lock_time: 0.000091 Rows_sent: 1 Rows_examined: 2374192
  12. SET timestamp=1281764222;
  13. select count(distinct ad_code)as x from ad_visit_history where ad_code in(select ad_code from ad_list where media_id=15);
  14. # Time: 100814 13:37:16
  15. # User@Host: root[root] @ localhost []
  16. # Query_time: 4.608920 Lock_time: 0.000078 Rows_sent: 1 Rows_examined: 1260544
  17. SET timestamp=1281764236;
  18. select count(*)as cou from ad_visit_history where ad_code in(select ad_code from ad_list where id=41) order by id desc;

看日志可以看出它记录了mysql慢查询语句的执行时间、锁定时间等等。
(1)用mysql自带的mysql自带的慢查询分析工具mysqldumpslow

参数可–help查看
# -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;
#  ac , at , al , ar 表示相应的倒叙;
# -t:返回前面多少条的数据;
# -g:包含什么,大小写不敏感的;
mysqldumpslow -s r -t 10  /slowquery.log     #slow记录最多的10个语句
mysqldumpslow -s t -t 10 -g "left join"  /slowquery.log     #按照时间排序前10中含有"left join"的

(2)第三方分析工具mysqlsla
安装:

  1. wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
  2. tar zvxf mysqlsla-2.03.tar.gz
  3. cd mysqlsla-2.03
  4. perl Makefile.PL
  5. make
  6. make install
  7. mysqlsla /data/mysqldata/slow.log

使用:

  1. [root@phpddt.com mysqlsla-2.03]# mysqlsla /var/lib/mysql/slow-queries.log
  2. Auto-detected logs as slow logs
  3. Reportfor slow logs:/var/lib/mysql/slow-queries.log
  4. 160 queries total,17 unique
  5. Sortedby't_sum'
  6. GrandTotals:Time1 s,Lock0 s,Rows sent 3.79k,RowsExamined380.47k
  7. ______________________________________________________________________ 001 ___
  8. Count:1(0.62%)
  9. Time:1 s total,1 s avg,1 s to 1 s max (100.00%)
  10. LockTime(s):0 total,0 avg,0 to 0 max (0.00%)
  11. Rows sent :10 avg,10 to 10 max (0.26%)
  12. Rows examined :10.46k avg,10.46k to 10.46k max (2.75%)
  13. Database:
  14. Users:
  15. root@localhost :100.00%(1) of query,100.00%(160) of all users
  16. Queryabstract:
  17. SET timestamp=N; SELECT *,SUM(hits) AS SUM FROM typecho_ranks INNER JOIN typecho_contents ON typecho_contents.cid = typecho_ranks.cid WHERE (month(date)= month(now())) GROUP BY typecho_ranks.cid ORDER BY SUM(hits) DESC LIMIT N;
  18. Query sample:
  19. SET timestamp=1381248477;
  20. SELECT *,sum(`hits`)as`sum` FROM typecho_ranks INNER JOIN typecho_contents ON typecho_contents.`cid`= typecho_ranks.`cid` WHERE (MONTH(`date`)= MONTH(now())) GROUP BY typecho_ranks.`cid` ORDER BY sum(`hits`) DESC LIMIT 10;
  21. ______________________________________________________________________ 002 ___
  22. Count:1(0.62%)
  23. Time:0 total,0 avg,0 to 0 max (0.00%)
  24. LockTime(s):0 total,0 avg,0 to 0 max (0.00%)
  25. Rows sent :25 avg,25 to 25 max (0.66%)
  26. Rows examined :25 avg,25 to 25 max (0.01%)
  27. Database: stblog
  28. Users:
  29. root@localhost :100.00%(1) of query,100.00%(160) of all users
  30. Queryabstract:
  31. SELECT * FROM (settings);
  32. Query sample:
  33. SELECT *
  34. FROM (`settings`);

分析格式如下:

总查询次数 (queries total), 去重后的sql数量 (unique)
输出报表的内容排序(sorted by)
最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.
Count, sql的执行次数及占总的slow log数量的百分比.
Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.
95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.
Lock Time, 等待锁的时间.
95% of Lock , 95%的慢sql等待锁时间.
Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.
Rows examined, 扫描的行数量.
Database, 属于哪个数据库
Users, 哪个用户,IP, 占到所有用户执行的sql百分比
Query abstract, 抽象后的sql语句

Query sample, sql语句 

 

开启Mysql慢查询来优化mysql的更多相关文章

  1. (转)MySQL慢查询分析优化 + MySQL调优

    .long_query_time的默认值为10,意思是运行10S以上的语句. .临时设置开启慢查询日志 mysql> show variables like '%slow_query_log%' ...

  2. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  3. MySql学习—— 查询性能优化 深入理解MySql如何执行查询

    本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...

  4. MySQL子查询的优化

    本文基于MySQL5.7.19测试 创建四张表,pt1.pt2表加上主键 mysql> create table t1 (a1 int, b1 int); mysql> create ta ...

  5. MySQL之查询性能优化(四)

    优化特定类型的查询 COUNT()的作用 COUNT()是一个特殊函数,有两个非常不同的作用:它可以统计某个列值的数量,也可以统计行数.在统计列值时要求列值是非空的(不统计NULL). 如果在COUN ...

  6. MySQL之查询性能优化(三)

    MySQL查询优化器的局限性 MySQL的万能“嵌套循环”并不是对每种查询都是最优的.不过还好,MySQL查询优化只对少部分查询不适用,而且我们往往可以通过改写查询让MySQL高效地完成工作. 关联子 ...

  7. MySQL之查询性能优化(二)

    查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.MySQL执行一个查询的过程,根据图1-1,我们可以看到当向MySQL发送一个请求时, ...

  8. MySQL之查询性能优化(一)

    为什么查询速度会慢 通常来说,查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段, ...

  9. 使用聚集索引和非聚集索引对MySQL分页查询的优化

    内容摘录来源:MSSQL123 ,lujun9972.github.io/blog/2018/03/13/如何编写bash-completion-script/ 一.先公布下结论: 1.如果分页排序字 ...

随机推荐

  1. phonegap学习入门

    phonegap 开发入门 PhoneGap官方网站上有详细的入门示例教程,这里,我针对使用PhoneGap进行Android移动应用的开发对其官网的Get Started进行一些介绍.补充. Ste ...

  2. HTML&CSS基础学习笔记1.33-元素选择器

    元素选择器 最常见的 CSS 选择器是元素选择器.换句话说,文档的元素就是最基本的选择器: p { text-indent:10px; color:blue; } 什么情况下使用元素选择器,一般我们这 ...

  3. Android Studio 模拟器 不要皮肤,效果更好

    新建或者编辑虚拟机时,皮肤选择"No Skin"即可,第二张图片就是无皮肤的效果,看着更爽啊.

  4. Scut:脚本引擎

    Scut 可以执行 C#.Python.Lua 三种类型的脚步,Scut 是如何加载并传递参数的呢? 首先值得注意的是:Scut 在编译时就会将逻辑层脚本源码复制到bin/Script的目录下. 1. ...

  5. Tomcat基础教程(一)

    Tomcat, 是Servlet和JSP容器,其是实现了JSP规范的servlet容器.它在servlet生命周期内包容,装载,运行,和停止servlet容器. Servlet容器的三种工作模式: 1 ...

  6. WordPress网站更换老鹰主机详细操作

    眼看着之前买的虚拟主机就要到期了,本着节约至上的美德,就和同事一起买了老鹰主机.因为第一次网站的配置是一个朋友帮忙的,所以现在想完全自己动手操作,毕竟之后的博客维护还是得靠自己.下面就来和我一起学习怎 ...

  7. Delphi GDI或图像处理的博客

    http://blog.csdn.net/w1028489713/article/category/1918251

  8. zoj 1010 Area【线段相交问题】

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 http://acm.hust.edu.cn/vjudge/ ...

  9. 【HDOJ】4982 Goffi and Squary Partition

    题意就是整数划分,选出和为n的K个整数,其中K-1个数的和为完全平方数S.选择整数时需要从1,2,3..连续选择,当选择整数与n-S相等时,需要跳过n-S,即选择n-S+1.如此选择K-2个数,从而可 ...

  10. Hbase 计数器

    Hbase计数器可以用于统计用户数,点击量等信息 基本操作 可以使用incr操作计数器,incr语法格式如下: incr '<table>', '<row>', '<co ...