zoukankan      html  css  js  c++  java
  • mysql性能优化学习笔记(2)如何发现有问题的sql


    一、使用mysql慢查询日志对有效率问题的sql进行监控
          1)开启慢查询
          show variables like ‘slow_query_log’;//查看是否开启慢查询日志
          set global slow_query_log_file=‘/mysql/‘; //设置慢查询日志的位置
          set global log_queries_not_using_indexes=on;//设置没有使用索引的sql语句
          set global long_query_time=1;//设置超过1秒的sql语句进行记录。
         注意:这里设置了long_query_time后,会发现设置不成功,可能是一个bug,需要重新开启一个终端,再查询一下设置,会发现生效了。


          2)查看慢查询日志的格式
                   # Time: 151115  6:35:08  
           # User@Host: root[root] @ localhost []
           # Query_time: 0.007896  Lock_time: 0.006150 Rows_sent: 200  Rows_examined: 200
           SET timestamp=1447540508;
           select * from actor;

         3)工具一:mysqldumpslow
          mysqldumpslow -t 3 /var/lib/mysql/localhost-centos6-slow.log
          前三条的日志
          格式:
          Count: 1  Time=0.00s (0s)  Lock=0.01s (0s)  Rows=200.0 (200), root[root]@localhost
          select * from actor


         4)工具二:pt-query-digest工具
            安装:
                       [root@localhost-centos6 ~]# wget percona.com/get/pt-query-digest
                        [root@localhost-centos6 ~]# chmod u+x pt-query-digest
                        [root@localhost-centos6 ~]# mv /root/pt-query-digest /usr/bin/ 
            用法:pt-query-digest slow-log > show_report.log //输出到文件
            
                 pt-query-digest slow-log | more
            该工具需要深入学习……


         5)如何通过慢查询日志寻找问题
            1)查询次数多,且每次查询占用时间长的sql
                      通常为pt-query-digest分析的前几个查询
                      2)I/O大的sql
                       注意:pt-query-digest中得Rows examine项
                      3)未命中索引的sql
                         注意:pt-query-digest中得Rows examine和Rows send对比
            f)如何分析sql语句
                    使用explain查询sql执行计划


                     mysql> explain select * from customer;
    +----+-------------+----------+------+---------------+------+---------+------+------+-------+
    | id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows | Extra |
    +----+-------------+----------+------+---------------+------+---------+------+------+-------+
    |  1 | SIMPLE      | customer | ALL  | NULL          | NULL | NULL    | NULL |  671 |       |
    +----+-------------+----------+------+---------------+------+---------+------+------+-------+
    1 row in set (0.01 sec)

           解释:
            table:表名;
            type:连接的类型,const、eq_reg、ref、range、index和ALL;const:主键、索引;eq_reg:主键、索引的范围查找;ref:连接的查找(join),range:索引的范围查找;index:索引的扫描;
            possible_keys:可能用到的索引;
            key:实际使用的索引;
            key_len:索引的长度,越短越好;
            ref:索引的哪一列被使用了,常数较好;
            rows:mysql认为必须检查的用来返回请求数据的行数;
            extra:using filesort、using temporary(常出现在使用order by时)时需要优化。

    码代码不易,码文字更不易,转载请注明出处,多谢! 不仅仅是记录,也是分享
  • 相关阅读:
    聊聊 API Gateway 和 Netflix Zuul
    现行统编中学数学教科书有多烂
    线程池的成长之路
    Quick Guide to Microservices with Spring Boot 2.0, Eureka and Spring Cloud
    以太坊、Hyperledger Fabric和Corda,哪个更好?
    【SFA官方翻译】Spring WebFlux和Spring Cloud进行响应式微服务开发
    goroutine背后的系统知识
    goroutine与调度器
    MySQL命令,一篇文章替你全部搞定
    微服务架构技术栈选型手册(万字长文)
  • 原文地址:https://www.cnblogs.com/haodaquan/p/4986562.html
Copyright © 2011-2022 走看看