一、使用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时)时需要优化。

mysql性能优化学习笔记(2)如何发现有问题的sql的更多相关文章

  1. mysql性能优化学习笔记

    mysql性能优化 硬件对数据库的影响 CPU资源和可用内存大小 服务器硬件对mysql性能的影响 我们的应用是CPU密集型? 我们的应用的并发量如何? 数量比频率更好 64位使用32位的服务器版本 ...

  2. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  3. mysql性能优化学习笔记(1)优化目的、方向及数据库准备

    前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...

  4. mysql性能优化学习笔记-存储引擎

    mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言 ...

  5. mysql性能优化学习笔记(6)数据库配置优化&硬件优化

    一.操作系统配置优化:          1. 网络方面,修改/etc/sysctl.conf文件,增加tcp支持的队列数,减少断开连接时,资源的回收.          2. 打开文件数的限制.修改 ...

  6. mysql性能优化学习笔记(4)索引的优化

    一.选择合适的索引列     1.在where,group by,order by,on从句中出现的列     2.索引字段越小越好(因为数据库的存储单位是页,一页中能存下的数据越多越好 )      ...

  7. mysql性能优化学习笔记(3)常见sql语句优化

    一.max()优化mysql> explain select max(payment_date) from payment;+----+-------------+---------+----- ...

  8. mysql性能优化学习笔记(5)数据库结构优化

    一.选择合适的数据类型    1.使用可存下数据的最小的数据类型    2.使用简单地数据类型,Int<varchar    3.尽可能使用not null定义字段    4.尽量少用text, ...

  9. Pandas 性能优化 学习笔记

    摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...

随机推荐

  1. (转)MVC语法-@helpers和@functions(Razor内定义函数)

    (转)MVC语法-@helpers和@functions(Razor内定义函数) 转自:http://www.mikesdotnetting.com/Article/173/The-Differenc ...

  2. study notes: high performance linux server programming

    1:linux网络API分为:socker地址API,socker基础API,网络信息API 1,socker地址API:包含IP地址和端口(ip, port).表示TCP通信的一端. 2,socke ...

  3. Android 桌面生成快捷方式

    Android生成桌面快捷方式的几种方法: //------------以下为动态替换桌面应用Icon的一种解决方案------------------- // 1.获取本地目录图片的Bitmap ; ...

  4. jquery 实现简单拖拽

    $.fn.drag = function(obj) { var dragging = false; var oDrag = $(obj); oDrag.mousedown(function(e) { ...

  5. 表达式 - PHP手册笔记

    PHP是一种面向表达式的语言.表达式的定义可以描述为,任何有值的东西. PHP支持全等运算符===(值和类型均相同)和非全等运算符!==(值或者类型不同). PHP的三元条件运算符貌似和C语言不太一样 ...

  6. Words-specialty

    1-100   101-200   community n.社区; 共同体; 社会团体; [生态] 群落 overview n.概观; 总的看法; 回顾,复习 transforming vi.改变,使 ...

  7. js对象中什么是可枚举性(enumerable)?

    说到枚举,可能很多人都会想到枚举类型,但在javascript对象中有一个属性为可枚举性,他是什么呢? 概念 可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之 ...

  8. spark快速入门之最简配置 spark 1.5.2 hadoop 2.7 配置

    配置的伪分布式,ubuntu14.04上 先配置hadoop,参见这个博客,讲的很好 http://www.powerxing.com/install-hadoop/, 但是我在配的过程中还是遇到了问 ...

  9. linux命令之mv

    linux下的mv即move的意思 该命令的一般形式: mv [选项] 参数1 参数2 选项: -b                如果已存在相同文件名,则覆盖前进行备份 -f             ...

  10. 数据挖掘之分类算法---knn算法(有matlab例子)

    knn算法(k-Nearest Neighbor algorithm).是一种经典的分类算法.注意,不是聚类算法.所以这种分类算法 必然包括了训练过程. 然而和一般性的分类算法不同,knn算法是一种懒 ...