mysql的慢查询sql是通过日志记录慢SQL--(俗称慢查询日志)
默认的情况下,MySQL数据库不开启慢查询日志(slow query log),需要手动把它打开

开启慢查询日志

SET GLOBAL slow_query_log = 'ON';

查看下慢查询日志配置

SHOW VARIABLES LIKE ‘slow_query_log%’

slow_query_log:表示慢查询开启的状态
slow_query_log_file:表示慢查询日志存放的位置

查看超过多少时间,才记录到慢查询日志

SHOW VARIABLES LIKE ‘long_query_time’

注意: 这样配置是临时的如果需要永久修改需要去配置文件(/etc/my.cnf)

设置sql耗时多久算慢sql,设置完成后,需要重新打开对话框才可以看到新的配置

set global long_query_time = 1;

设置慢sql日志存放位置(注意:慢sql日志名字必须以 slow.log结尾)

set global slow_query_log_file = '/mysqldata/citicsql/log/slow.log'

explain查看分析SQL执行计划

通过慢查询日志定位出查询效率较低的SQL,可以使用explain查看SQL的执行计划

explain select * from 表A

id

1. id 值相同时,被视为一组从上向下执行。
2. 如果是子查询,id 值会递增,id 值越高,优先级越高
3. id为NULL最后执行

select_type

1. simple: 简单的select, 查询中不包含子查询或者 union。例如: select name from student where id= 100
2. primary: 子查询中最外层查询, 查询中若包含任何复杂的子部分, 最外层的select被标记为primary
3. derived:在 from 的列表中包含的子查询被标记成 derived(派生表)。例如: explain select id from (select id,name from student) student1 where name= ‘name100’
4. subquery:在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery。例如: explain select id from student where score = (select score from student where
name=‘name100’);
5. union: union中的第二个或后面的select语句. 例如: EXPLAIN select id from student where id<12691055 UNION all select id from student where id<12691060;

table

显示这一步所访问数据库中表名称. 有时候不是真实的表名, 可能是简称

partitions

该字段看table所在的分区, 值为NULL表示表未被分区

possible_keys

可能会使用到的索引(ps.其实不太重要)

重点关注的字段
type

表示连接类型,查看索引执行情况的一个重要指标 以下性能从好到坏依次:system > const > eq_ref > ref >
ref_or_null > index_merge > unique_subquery > index_subquery > range >
index > ALL
system:这种类型要求数据库表中只有一条数据,是const类型的一个特例,一般情况下是不会出现的
const:通过一次索引就能找到数据,一般用于主键或唯一索引作为条件,这类扫描效率极高,速度非常快
eq_ref:常用于主键或唯一索引扫描,一般指使用主键的关联查询 ref : 常用于非主键和唯一索引扫描
ref_or_null:这种连接类型类似于ref,区别在于MySQL会额外搜索包含NULL值的行
index_merge:使用了索引合并优化方法,查询使用了两个以上的索引
unique_subquery:类似于eq_ref,条件用了in子查询
index_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值
range:常用于范围查询,比如:between … and 或 In 等操作

index:全索引扫描

ALL:全表扫描

key

实际使用到的索引

key_len

实际使用到的索引的长度

rows

该列表示MySQL估算找到我们所需的记录,需要读取的行数

filtered

该列是一个百分比,是满足条件的记录数量与我们查询了多少记录数量的比值

extra

该字段包含有关MySQL如何解析查询的其他信息,它一般会出现这几个值:
● Usingfilesort:表示按文件排序,一般是在指定的排序和索引排序不一致的情况才会出现,一般见于order by语句
● Using index:表示是否用了覆盖索引
● Using temporary: 表示是否使用了临时表,性能特别差,需要重点优化,一般多见于groupby语句,或者union语句
● Using where : 表示使用了where条件过滤
● Using index condition:MySQL5.6之后新增的索引下推,在存储引擎层进行数据过滤,而不是在服务层过滤,利用索引现有的数据减少回表的数据

profile分析执行耗时
explain只是看到SQL预估的执行计划,如果要了解SQL真正的执行线程状态及消耗的时间,需要使用profiling,开启profiling参数后,后续执行的SQL语句都会记录其资源开销,包括IO,上下文切换,CPU,内存等等,可以根据这些开销进一步分析当前慢SQL的瓶颈再进一步进行优化

确定问题采用响应措施
● 多数慢SQL都跟索引有关,比如不加索引,索引不生效、不合理等,这时候,可以优化索引
● 还可以优化SQL语句,比如一些in元素过多问题(分批),深分页问题(基于上一次数据过滤等),进行时间分段查询
● SQL没办法很好优化,可以改用ES的方式,或者数仓
● 如果单表数据量过大导致慢查询,可以考虑分库分表
● 如果数据库在刷脏页导致慢查询,考虑是否可以优化一些参数
● 如果存量数据量太大,考虑是否可以让部分数据归档

mysql之慢sql配置与分析的更多相关文章

  1. mysql中日志的配置与分析

    默认情况下,如果日志没有配置,则只记录错误日志,记录到syslog,配置文件 /etc/mysql/conf.d/mysqld_safe_syslog.cnf (ubuntu下) [mysqld_sa ...

  2. MySQL慢日志查询全解析:从参数、配置到分析工具【转】

    转自: MySQL慢日志查询全解析:从参数.配置到分析工具 - MySQL - DBAplus社群——围绕数据库.大数据.PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群http://dbap ...

  3. mysql优化(三)–explain分析sql语句执行效率

    mysql优化(三)–explain分析sql语句执行效率 mushu 发布于 11个月前 (06-04) 分类:Mysql 阅读(651) 评论(0) Explain命令在解决数据库性能上是第一推荐 ...

  4. MySQL跟踪SQL&慢查询分析工具

    简介 之前的工作一直使用的SQL SERVER, 用过的都知道,SQL SERVER有配套的SQL跟踪工具SQL Profiler,开发或者定位BUG过程中,可以在操作页面的时候,实时查看数据库执行的 ...

  5. MySQL中一条SQL的加锁分析

    MySQL中一条SQL的加锁分析 id主键 + RC id唯一索引 + RC id非唯一索引 + RC id无索引 + RC id主键 + RR id唯一索引 + RR id非唯一索引 + RR id ...

  6. (2)MySQL进阶篇SQL优化(show status、explain分析)

    1.概述 在应用系统开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产环境的影响也 ...

  7. 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...

  8. MYSQL服务器my.cnf配置文档详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  9. 使用Jmeter测试MySQL性能——(1)连接配置

    在搭建MySQL集群之后需要测试集群的性能究竟如何,采用Apache的测试工具Jmeter进行测试,本文主要介绍主要实现Jmeter配置连接到MySQL. 安装相应的软件 首先Jmeter是基于Jav ...

  10. MySQL 主主同步配置和主从配置步骤

    ★预备知识 : 1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服 ...

随机推荐

  1. 推荐一个高效解压缩工具 - XZ

    前情提要:前段时间搞某较大型项目的性能测试,使用的是Oracle数据库.压测阶段搞的业务基础数据和压测数据耗时耗力,想把数据导出,后续有类似项目,可以导入复用. 遇到问题:通过数据泵方式导出的数据库文 ...

  2. Spring面试攻略:如何展现你对Spring的深入理解

    什么是Spring?谈谈你对IOC和AOP的理解. Spring是一种Java开发框架,旨在简化企业级应用程序的开发和部署.它具有以下优点: 对象托管:Spring能够管理和赋值所有对象,使开发人员不 ...

  3. Web安全漏洞解决方案

    1.已解密的登录请求 推理: AppScan 识别了不是通过 SSL 发送的登录请求. 测试请求和响应: 1.1.1 产生的原因 登录接口,前端传入的密码参数没有经过md5的加密就直接传给了后端 1. ...

  4. MySQL 慢查询探究分析

    背景: 性能测试过程中,数据库往往是造成性能瓶颈之一,而数据库瓶颈中sql 语句又是值得探究分析的一环,其中慢查询是重点优化对象,在MySQL中,慢查询是指查询执行时间较长或者消耗 较多资源的查询语句 ...

  5. 数据api接口就是应用集成吗?

    ​ 数据 API 接口和应用集成是两个不同的概念,但是它们之间有一定的联系.数据 API 接口是一种用于访问和传输数据的标准化接口,而应用集成则是将不同的应用程序和系统整合在一起,实现数据和业务流程的 ...

  6. 淘宝详情api接口的使用说明

    淘宝详情API接口是一种可以用来获取淘宝商品详细信息的服务,包括图片.标题.价格.销量.评论等数据.下面是淘宝详情API接口的使用说明: 1.关于申请API接口权限: 在使用淘宝详情API接口前,需要 ...

  7. QA|不同模块之间的引用(导入问题)问题;|Pycharm

    结构如图,在xxu的test.py中想要导入t2包中的sayhello和word两个方法 注意:首先需要打开xxu和t2的上层目录,因为解释器是从打开的那个文件开始查找的,所以这里应该打开B01_01 ...

  8. 利用RATF框架实现web状态的监控

    之前,我们已经说明了如何实现一个我们的接口测试框架RATF,当然这个框架不止可以用于管理我们的接口测试代码,我们还可以用他来对我们的web进行简单粗暴的监控. 原理: 1. 通过使用配置文件,对要监控 ...

  9. 如何解决IOS 15提示“此App的开发者需要更新APP以在此IOS版本上正常工作”, 无法打开安装的APP的问题

    在苹果手机最新的IOS 15 beta的系统上安装自签名或者企业签名的APP时,可能会遇到如下的错误提示: 此App的开发者需要更新APP以在此IOS版本上正常工作 The developer of ...

  10. SpringBoot拦截器和动态代理有什么区别?

    在 Spring Boot 中,拦截器和动态代理都是用来实现功能增强的,所以在很多时候,有人会认为拦截器的底层是通过动态代理实现的,所以本文就来盘点一下他们两的区别,以及拦截器的底层实现. 1.拦截器 ...