当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪?

我们一般会使用Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引?

但是执行计划显示内容不够详细,如果显示用到了某个索引,查询依然很慢,我们就无法得知具体是哪一步比较耗时?

好在MySQL提供一个SQL性能分析工具 — Profile

Profile 可以帮助我们分析SQL性能瓶颈和资源消耗情况。

1. 查看Profile配置

show variables like '%profil%';

have_profiling 表示是否支持profile功能,YES表示支持

profiling 表示是否开启profile功能,ON开启,OFF关闭,默认是关闭状态

profiling_history_size 表示保存最近15条历史数据

2. 开启Profile功能

set profiling=1;

注意:修改配置,只对当前会话生效,会话关闭,Profile历史信息被清空。

3. 使用Profile

先造点数据,创建一张用户表:

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',`age` tinyint NOT NULL  DEFAULT 0 NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

执行一条耗时SQL:

select * from user order by name;

下面轮到主角Profile出场了。

我们执行的所有SQL语句都会被记录到Profile里面,包括执行失败的SQL语句。

可以使用show profiles命令查看:

输出参数详解:

Query_ID 表示自动分配的查询ID,顺序递增。

Duration 表示SQL语句执行耗时

Query 表示SQL语句内容

然后,我们再使用Query_IDProfile中查看具体每一步的耗时情况:

show profile for query 1;

可以清楚的看到耗时主要花在创建排序索引(Creating sort index)上面。

再试一条SQL:

select distinct name from user;

这次的耗时主要花在了,创建临时文件、拷贝文件到磁盘、发送数据、删除临时表上面。

由此,可以得知distinct函数会创建临时文件,提醒我们建索引。

我们还可以扩展一下这条分析语句,查看一下cpu和block io的使用情况:

show profile cpu,block io for query 2;

另外,其实所有Profile历史数据都被记录在information_schema.profiling表中,我们也可以查询表得到结果:

select * from information_schema.profiling where Query_ID=2;

以上数据都是基于MySQL5.7版本,在MySQL8.0版本的输出结果字段有些变化。

另外,细心的你应该发现了,在我们每执行完一条SQL,都显示了一条warning信息,我们查看一下具体的warning信息:

show warnings;

意思就是,Profile工具将来有可能被删除,不建议继续使用了。

Mysq查询性能调优相关推荐

  1. 【Elasticsearch】索引和查询性能调优的21条建议-以及调优参数

    文章目录 1.概述 1.Elasticsearch部署建议 1.1. 选择合理的硬件配置:尽可能使用 SSD 1.2. 给JVM配置机器一半的内存,但是不建议超过32G 1.3. 规模较大的集群配置专 ...

  2. SQL Server 执行计划(8) - 使用 SQL 执行计划进行查询性能调优

    在本系列的前几篇文章(见底部索引)中,我们介绍了SQL 执行计划的多个方面,我们讨论了执行计划是如何在内部生成的,不同类型的计划,主要组件和运算符以及如何阅读和分析使用不同工具生成的计划.在本文中,我 ...

  3. Elasticsearch索引和查询性能调优的21条建议【下】

    Elasticsearch是一款流行的分布式开源搜索和数据分析引擎,具备高性能.易扩展.容错性强等特点.它强化了Apache Lucene的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次. ...

  4. sql查询非11位非数字_非生产环境SQL查询性能调优技巧

    sql查询非11位非数字 It is a common misconception that you need real production data, or production like dat ...

  5. server sql top速度变慢解决方案_SQL Server的性能调优:解决查询速度慢的五种方法-数据库...

    编辑推荐: 本文主要通过一下几个方面介绍:使用SQL DMV查找慢速查询.通过APM解决方案查询报告.SQL Server扩展事件.SQL Azure查询性能洞察等相关内容. 本文来自博客园,由火龙果 ...

  6. MySQL 开发日志 -- 性能调优

    * mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];选项解析:IN 'log_n ...

  7. “金三银四”春招指南之“性能调优”:MySQL+Tomcat+JVM,看完还怕面试官的轰炸?

    春招指南之"性能调优":MySQL+Tomcat+JVM,还怕面试官的轰炸? 01 MySQL性能调优 1.1 MySQL性能调优问题有哪些?怎么学? 关于这个,给大家看一份学习大 ...

  8. ELASTIC SEARCH 性能调优

    ELASTICSEARCH 性能调优建议 创建索引调优 1.在创建索引的使用使用批量的方式导入到ES. 2.使用多线程的方式导入数据库. 3.增加默认刷新时间. 默认的刷新时间是1秒钟,这样会产生太多 ...

  9. elasticsearch原理_ElasticSearch读写底层原理及性能调优

    ES写入/查询底层原理 1. Elasticsearch写入数据流程 客户端随机选择一个ES集群中的节点,发送POST/PUT请求,被选择的节点为协调节点(coordinating node) 协调节 ...

最新文章

  1. PTA基础编程题目集-6-3 简单求和
  2. string日期格式化_java面向对象---日期类
  3. 金融风控实战——信贷业务架构与业务分析
  4. 成功解决ValueError: Invalid format string
  5. C#实现所有经典排序算法汇总
  6. Python 生成账号密码算法
  7. node-sass安装报错node-sass@4.12.0 postinstall: `node scripts/build.js`
  8. MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
  9. C++11中的std::function和std::bind
  10. 两个音轨合并_技能!如何合并两个音频文件?
  11. mysql 加锁 索引_一条简单的更新语句,MySQL是如何加锁的?
  12. linux ubuntu 22.04卸载firefox火狐浏览器正确方式
  13. python小程序表白
  14. elang 游戏 生成全局id
  15. STEAM游戏高主频i9-12900k 搭建CS:GO服务器
  16. 征信报告 加密文档_PDF文档如何加密?看完这个方法你就知道了
  17. 淘宝网(关于淘宝拆分)
  18. 千牛服务器网站,千牛平台远程服务器
  19. 什么是Oracle数据库?
  20. 地图坐标计算原理与技巧

热门文章

  1. 在UE5中嵌入浏览器
  2. win10出现错误代码0x80073712的解决办法
  3. 数据采集之全埋点数据采集分析方法的一些整理
  4. 2021-11-05 奈氏准则,香农定理(考研中的第一波知识点)
  5. Code Review 有感
  6. 微信小程序开发之——用户登录-登录流程(1)
  7. 车载计算机维修,车载电脑硬件故障及检修
  8. 二维点云拉普拉斯深度平滑算法-matlab
  9. 【光线追踪系列九】物体动态模糊
  10. 辗转相除法详解(C语言实现)