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

数据库响应慢问题最多的就是查询了。现在大部分数据库都提供了性能分析的帮助手段。例如Oracle中会帮你直接找出慢的语句,并且提供优化方案。在MySQL中就要自己开启慢日志记录加以分析(记录可以保存在表或者文件中,默认是保存在文件中,我们系统使用的就是默认方式)。

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

Time Id Command Argument

# Time: 141010 9:33:57

# User@Host: root[root] @ localhost [] Id: 1

# Query_time: 0.000342 Lock_time: 0.000142 Rows_sent: 3 Rows_examined: 3

use test;

SET timestamp=1412904837;

select * from t;

这个日志应该很好理解了,第一个#记录时间戳,第二个#记录执行命令的用户和地址信息,第三个#记录执行查询的时间、锁的时间、返回行数、被扫描的行数。接着后面记录真正执行的SQL语句。还可以通过以下命令看看cvs存储格式每个字段意义。

SHOW CREATE TABLE mysql.slow_log;

接下来说说如何获取和分析慢日志吧。

查看MySQL慢日志参数

进入启动好的MySQL,执行以下命令

mysql> show variables like '%slow_query%';

+---------------------------+----------------------------------------+

| Variable_name | Value |

+---------------------------+----------------------------------------+

| slow_query_log | OFF |

| slow_query_log_file | /usr/local/mysql/data/cloudlu-slow.log |

+---------------------------+----------------------------------------+

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

那么什么样的查询需要被日志呢?在MySQL中, 没有index的查询

以及 超过指定时间同时超过指定扫描行数的查询

需要记录在慢日志查询里面。

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

没有index的查询记录开关

mysql> show global variables like '%indexes%';

+----------------------------------------+-------+

| Variable_name | Value |

+----------------------------------------+-------+

| log_queries_not_using_indexes | OFF |

| log_throttle_queries_not_using_indexes | 0 |

+----------------------------------------+-------+

第一个参数

表示是否开启记录没有index的查询,第二个

参数用来做日志记录的流量控制,一分钟可以记录多少条,默认0是表示不限制。

超过指定时长的查询开关

mysql> show global variables like '%long_query%';

+-----------------+-----------+

| Variable_name | Value |

+-----------------+-----------+

| long_query_time | 10.000000 |

+-----------------+-----------+

1 row in set (0.00 sec)

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

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

mysql> show variables like '%min_examined_row_limit%';

+------------------------+-------+

| Variable_name | Value |

+------------------------+-------+

| min_examined_row_limit | 0 |

+------------------------+-------+

1 row in set (0.00 sec)

默认是0,代表不现在扫描行数

设置开启MySQL慢日志参数

进入MySQL,输入以下命令或者在MySQL的启动配置文件里面修改或者给MySQL添加启动参数,进入MySQL后的修改如下:

set global long_query_time=0.1;

set global log_queries_not_using_indexes=on;

set global slow_query_log = on;

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

Note: MySQL还有2个slow log的参数(log_slow_slave_statements 和

log_slow_admin_statements),大家可以参考 MySQL slow Query log官方文档链接

mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句相关推荐

  1. 数据库优化专题---7、SQL语句优化

    数据库优化专题-1.表的主键用数字还是UUID 数据库优化专题-2.逻辑删除还是物理删除 数据库优化专题-3.千万记录如何快速分页 数据库优化专题-4.读多写少和读多写多 数据库优化专题-5.删改数据 ...

  2. oracle sql一直在执行吗,方法分享:查询Oracle正在执行和执行过的SQL语句

    摘要 腾兴网为您分享:方法分享:查询Oracle正在执行和执行过的SQL语句,雨课堂版,易星期货,信用白条,相机美颜等软件知识,以及oppo刷机精灵,爱乐奇少儿英语app,配对小游戏,爱婴斯坦,备份大 ...

  3. contentProvider实现groupby查询数据比如要用实现这么一个sql语句:SELEC

    contentProvider实现groupby查询数据比如要用实现这么一个sql语句:SELEC http://www.educity.cn/wenda/345846.html contentPro ...

  4. mysql 5.5 查询_mysql5.5数据库优化--定位慢查询

    什么是慢查询 mysql记录下查询超过指定时间的语句,被称为"慢查询": 启动慢查询日志 1.查询是否把索引的SQL记录到慢查询日志中 SHOW VARIABLES LIKE 'l ...

  5. 数据库优化:52 条 SQL 语句性能优化策略,果断收藏!

    1 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值 ...

  6. mysql sql优化入门_Mysql入门SQL 语句优化方法30例

    作者:VEPHP   时间 2017-09-27 <Mysql入门SQL 语句优化方法30例>要点: 本文介绍了Mysql入门SQL 语句优化方法30例,希望对您有用.如果有疑问,可以联系 ...

  7. oracle delete not in 优化,Oracle中的sql语句优化

    1.选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表driving table)将被最先处理,在 ...

  8. Mysql优化(一)—Sql语句

    第一篇是最基础,同样也是最重要的Sql语句的优化.就和炒菜一样,假如我们的原材料,例如青菜或者肉是坏了的,即便我们拥有手艺一流的厨子,品质保证的厨具,也不可能做出美味的佳肴.所以,不仅要有好厨师好厨具 ...

  9. MySQL慢查询日志:如何定位执行慢的sql语句

    参考: 数据库优化(一)Mysql慢查询的定位和分析 手把手教你定位线上MySQL慢查询问题,包教包会 ​​​​​​在进行sql性能优化之前,我们首先需要找到这些慢sql. 定位慢SQL相对来说很简单 ...

最新文章

  1. Fragment onViewCreated 的作用
  2. 通过RobotFramework简单的接口请求示例
  3. Endnote在latex中的应用的两种方法
  4. Android的启动脚本–init.rc
  5. Ubuntu16安装CUDA9.0+Anaconda+Tensorflow1.8GPU(2018.08.20最新)
  6. Crawler:关于爬虫的简介、安装、使用方法之详细攻略
  7. 为服务器端控件添加js.net
  8. centos提示找不到netstat 和 ifconfig命令的问题
  9. 踩内存是什么意思啊_abs防抱死制动系统是什么意思?
  10. python中for语句的使用_python中for in的用法
  11. SAP License:启动物料帐后不可更改物料价格的处理方法
  12. java dom4j 写xml文件_Java实现——Dom4j读写XML文件
  13. HDU 12O3 I NEED A OFFER!
  14. c语言机试编程下载,C语言机试编程题库
  15. 卡尔曼滤波,互补滤波,“Tsinghua”滤波
  16. (转)这是转型AI的励志故事,从非科班到拿下阿里云栖一等奖!
  17. 服务器如何防止DDoS攻击?
  18. 广西艺术学院2012年本科招生专业考试通知
  19. 基于Java+Swing+Mysql员工信息管理系统
  20. 服务器集群有哪些类型

热门文章

  1. 外部导入方式添加背景图_web前端基础:CSS的三种导入方式说明
  2. python运维处理序列_Python运维开发:02 序列
  3. 服务器系统怎么写,服务器操作系统语言写的
  4. OpenShift 4 - 应急响应Demo应用(AMQ+Knative+Quay+BPM+BDM+SSO)
  5. OpenShift 4之唤醒休眠的OpenShift应用
  6. 使用Web API和React创建用户注册和登录
  7. vue引入全局静态变量_vue-cli4 全面配置(持续更新)
  8. 计算机组装与维护推荐教材,计算机组装与维护(全国高等专科教育计算机类规划教材)...
  9. expandablelistview 折叠动画_这个机械手到底有几个自由度,31个机械原理、设计动画来了。。。...
  10. 双时隙的工作原理_双作用叶片泵工作原理是怎样的?作为8年工程师都没了解这么深...