mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
最近有个开发团队抱怨我们平台包含的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语句相关推荐
- 数据库优化专题---7、SQL语句优化
数据库优化专题-1.表的主键用数字还是UUID 数据库优化专题-2.逻辑删除还是物理删除 数据库优化专题-3.千万记录如何快速分页 数据库优化专题-4.读多写少和读多写多 数据库优化专题-5.删改数据 ...
- oracle sql一直在执行吗,方法分享:查询Oracle正在执行和执行过的SQL语句
摘要 腾兴网为您分享:方法分享:查询Oracle正在执行和执行过的SQL语句,雨课堂版,易星期货,信用白条,相机美颜等软件知识,以及oppo刷机精灵,爱乐奇少儿英语app,配对小游戏,爱婴斯坦,备份大 ...
- contentProvider实现groupby查询数据比如要用实现这么一个sql语句:SELEC
contentProvider实现groupby查询数据比如要用实现这么一个sql语句:SELEC http://www.educity.cn/wenda/345846.html contentPro ...
- mysql 5.5 查询_mysql5.5数据库优化--定位慢查询
什么是慢查询 mysql记录下查询超过指定时间的语句,被称为"慢查询": 启动慢查询日志 1.查询是否把索引的SQL记录到慢查询日志中 SHOW VARIABLES LIKE 'l ...
- 数据库优化:52 条 SQL 语句性能优化策略,果断收藏!
1 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值 ...
- mysql sql优化入门_Mysql入门SQL 语句优化方法30例
作者:VEPHP 时间 2017-09-27 <Mysql入门SQL 语句优化方法30例>要点: 本文介绍了Mysql入门SQL 语句优化方法30例,希望对您有用.如果有疑问,可以联系 ...
- oracle delete not in 优化,Oracle中的sql语句优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表driving table)将被最先处理,在 ...
- Mysql优化(一)—Sql语句
第一篇是最基础,同样也是最重要的Sql语句的优化.就和炒菜一样,假如我们的原材料,例如青菜或者肉是坏了的,即便我们拥有手艺一流的厨子,品质保证的厨具,也不可能做出美味的佳肴.所以,不仅要有好厨师好厨具 ...
- MySQL慢查询日志:如何定位执行慢的sql语句
参考: 数据库优化(一)Mysql慢查询的定位和分析 手把手教你定位线上MySQL慢查询问题,包教包会 在进行sql性能优化之前,我们首先需要找到这些慢sql. 定位慢SQL相对来说很简单 ...
最新文章
- Fragment onViewCreated 的作用
- 通过RobotFramework简单的接口请求示例
- Endnote在latex中的应用的两种方法
- Android的启动脚本–init.rc
- Ubuntu16安装CUDA9.0+Anaconda+Tensorflow1.8GPU(2018.08.20最新)
- Crawler:关于爬虫的简介、安装、使用方法之详细攻略
- 为服务器端控件添加js.net
- centos提示找不到netstat 和 ifconfig命令的问题
- 踩内存是什么意思啊_abs防抱死制动系统是什么意思?
- python中for语句的使用_python中for in的用法
- SAP License:启动物料帐后不可更改物料价格的处理方法
- java dom4j 写xml文件_Java实现——Dom4j读写XML文件
- HDU 12O3 I NEED A OFFER!
- c语言机试编程下载,C语言机试编程题库
- 卡尔曼滤波,互补滤波,“Tsinghua”滤波
- (转)这是转型AI的励志故事,从非科班到拿下阿里云栖一等奖!
- 服务器如何防止DDoS攻击?
- 广西艺术学院2012年本科招生专业考试通知
- 基于Java+Swing+Mysql员工信息管理系统
- 服务器集群有哪些类型
热门文章
- 外部导入方式添加背景图_web前端基础:CSS的三种导入方式说明
- python运维处理序列_Python运维开发:02 序列
- 服务器系统怎么写,服务器操作系统语言写的
- OpenShift 4 - 应急响应Demo应用(AMQ+Knative+Quay+BPM+BDM+SSO)
- OpenShift 4之唤醒休眠的OpenShift应用
- 使用Web API和React创建用户注册和登录
- vue引入全局静态变量_vue-cli4 全面配置(持续更新)
- 计算机组装与维护推荐教材,计算机组装与维护(全国高等专科教育计算机类规划教材)...
- expandablelistview 折叠动画_这个机械手到底有几个自由度,31个机械原理、设计动画来了。。。...
- 双时隙的工作原理_双作用叶片泵工作原理是怎样的?作为8年工程师都没了解这么深...