近期有个开发团队抱怨我们平台包括的mysql cluster不行,总是报mysql的”heartbeat Error“。分析了他们收集的日志。没有发现mysql cluster节点之间的网络有问题,倒是发现了一个非常有意思的现象,在mysql的slow log里面发现了大量的慢查询。基本上都是要1秒钟以上,非常明显这样的耗时高的慢查询会影响系统行为。指出这点让开发团队去优化他们的应用,非常好奇他们居然不知道有这些东西能够分析。

。。。

。。

数据库响应慢问题最多的就是查询了。如今大部分数据库都提供了性能分析的帮助手段。

比如Oracle中会帮你直接找出慢的语句,而且提供优化方案。在MySQL中就要自己开启慢日志记录加以分析(记录能够保存在表或者文件里。默认是保存在文件里,我们系统使用的就是默认方式)。

先看看MySQL慢查询日志里面的记录长什么样的:

  1. Time Id Command Argument
  2. # Time: 141010 9:33:57
  3. # User@Host: root[root] @ localhost [] Id: 1
  4. # Query_time: 0.000342 Lock_time: 0.000142 Rows_sent: 3 Rows_examined: 3
  5. use test;
  6. SET timestamp=1412904837;
  7. select * from t;

这个日志应该非常好理解了,第一个#记录时间戳,第二个#记录运行命令的用户和地址信息,第三个#记录运行查询的时间、锁的时间、返回行数、被扫描的行数。

接着后面记录真正运行的SQL语句。

还能够通过下面命令看看cvs存储格式每一个字段意义。

  1. SHOW CREATE TABLE mysql.slow_log;

接下来说说怎样获取和分析慢日志吧。

查看MySQL慢日志參数

进入启动好的MySQL,运行下面命令

  1. mysql> show variables like '%slow_query%';
  2. +---------------------------+----------------------------------------+
  3. | Variable_name | Value |
  4. +---------------------------+----------------------------------------+
  5. | slow_query_log | OFF |
  6. | slow_query_log_file | /usr/local/mysql/data/cloudlu-slow.log |
  7. +---------------------------+----------------------------------------+

这里告诉我们慢日志的日志存放位置,慢日志是否有开启。

那么什么样的查询须要被日志呢?在MySQL中,没有index的查询以及超过指定时间同一时候超过指定扫描行数的查询须要记录在慢日志查询里面。

那么它们的參数又是怎么查看的呢?

没有index的查询记录开关

  1. mysql> show global variables like '%indexes%';
  2. +----------------------------------------+-------+
  3. | Variable_name | Value |
  4. +----------------------------------------+-------+
  5. | log_queries_not_using_indexes | OFF |
  6. | log_throttle_queries_not_using_indexes | 0 |
  7. +----------------------------------------+-------+

第一个參数表示是否开启记录没有index的查询,第二个參数用来做日志记录的流量控制,一分钟能够记录多少条。默认0是表示不限制。

超过指定时长的查询开关

  1. mysql> show global variables like '%long_query%';
  2. +-----------------+-----------+
  3. | Variable_name | Value |
  4. +-----------------+-----------+
  5. | long_query_time | 10.000000 |
  6. +-----------------+-----------+
  7. 1 row in set (0.00 sec)

就一个參数指定超过多少时长的查询须要被记录

超过指定行数的扫描查询开关

  1. mysql> show variables like '%min_examined_row_limit%';
  2. +------------------------+-------+
  3. | Variable_name | Value |
  4. +------------------------+-------+
  5. | min_examined_row_limit | 0 |
  6. +------------------------+-------+
  7. 1 row in set (0.00 sec)

默认是0,代表不如今扫描行数

设置开启MySQL慢日志參数

进入MySQL,输入下面命令或者在MySQL的启动配置文件中面改动或者给MySQL加入启动參数。进入MySQL后的改动例如以下:

  1. set global long_query_time=0.1;
  2. set global log_queries_not_using_indexes=on;
  3. set global slow_query_log = on;

这里要斟酌的有2点,第一是超过什么时长的日志是有问题的,这个由系统需求来决定。第二是没有使用indexes的日志每分钟要记录多少条。要防止日志太多对性能产生影响。

下篇:MySQL5.6 怎样优化慢查询的SQL语句 -- SQL优化

Note: MySQL还有2个slow log的參数(log_slow_slave_statements 和 log_slow_admin_statements)。大家能够參考MySQL slow Query log官方文档链接

MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍的更多相关文章

  1. MySQL5.6 怎样优化慢查询的SQL语句 -- SQL优化

    上篇:MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍 在实际的日志分析中,通常慢日志的log数量不少,同一时候同样的查询被记录的条数也会非常多.这里就须要怎样从慢日志查询中找到最有问题 ...

  2. ASP.NET实现列表页连接查询 拼接sql语句 绑定grivdView

    ASP.NET实现列表页连接查询 拼接sql语句 如图效果: 基本需求:1.当页面第一次加载的时候默认查询一个月时间(或者说是登陆者所属权限的所有数据)的数据绑定到gridView 2.添加查询条件时 ...

  3. 查询拼接SQL语句,多条件模糊查询

    多条件查询,使用StringBuilder拼接SQL语句,效果如下: 当点击按钮时代码如下: private void button1_Click(object sender, EventArgs e ...

  4. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  5. oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)

    先列上我的数据库表格: c_date(Date格式)     date_type(String格式) 2011-01-01                   0 2012-03-07         ...

  6. mysql按年度、季度、月度、周、日统计查询的sql语句

    本文介绍一些mysql中用于查询的sql语句,包括按年度.季度.月度.周.日统计查询等,有需要的朋友,可以参考下. 一.年度查询 查询 本年度的数据   SELECT * FROM blog_arti ...

  7. MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  8. 第二十篇ORM查询与SQL语句

    ORM查询与SQL语句 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情 ...

  9. SQL语句利用日志写shell

    outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...

随机推荐

  1. Oracle————存储过程与函数

    存储过程存储过程参数模式包括IN.OUT. IN OUT. IN(默认参数模式):表示当存储过程别调用时,实参值被传递给形参:形参起变量作用,只能读该参数,而不能修改该参数.IN模式参数可以是变量或表 ...

  2. ionic小白的学习路之目录结构分析、创建组件、创建页面、页面跳转

    一. 目录结构分析 hooks:编译cordova 时自定义的脚本命令,方便整合到我们的编译系统和版本控制系统中. node_modules :node 各类依赖包. resources :andro ...

  3. linux下tomcat服务的相关命令

    一:Linux下tomcat服务的启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下的bin目录(cd usr/loca ...

  4. sqlserver差异备份3117

    1.出现错误"3117" 2.完整备份/选项/不对数据库执行任何操作 3.数据库显示"正在还原" 4.差异备份/选项/回滚 5.数据库完整备份与差异备份成功

  5. 我的MySql掉队了

    本来今天高高兴兴,突然: raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)&qu ...

  6. Java Web中的编码解析

    在springmvc工程web.xml中配置中文编码 <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name&g ...

  7. POJ 3659 Cell phone Network (树的最小点覆盖, 树形DP)

    题意: 给定一棵树,每个点可以覆盖自己和相邻的点, 求最少要多少个点覆盖图 #include <cstdio> #include <cstring> #include < ...

  8. [mvc]MVC_Model

    1,Model的职责: Model只负责与数据处理相关的工作. 2,开发Model的基本观念 采用ORM信息访问技术开发 ORM是将结构化的关系型数据,映射成面向对象模型.对于EF来说,就是关系型数据 ...

  9. maven+Spring环境搭建

    一,项目结构图 二,applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  10. Action中result的各种转发类型

    Action中result的各种转发类型 1,dispatcher:默认值 ,内部定向 <result>/WEB-INF/page/employeeAdd.jsp</result&g ...