如果需要优化一条SQL,想了解一条sql的每个阶段的耗时分布,则可以使用profiling来进行分析,能很方便的定位在哪个阶段、什么资源引起的性能问题。

一、开启profiling参数

此参数默认是关闭状态,线上不建议打开,建议在会话级别的设置排查问题

# 查看参数的状态
mysql> show variables like "%profi%";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| have_profiling | YES |
| profiling | OFF | #未开启
| profiling_history_size | 15 | #保存的条数
+------------------------+-------+
3 rows in set (0.12 sec) # 开启参数
mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.04 sec) # 将history设置大一点
mysql> set profiling_history_size=100;
Query OK, 0 rows affected, 1 warning (0.00 sec) #再次查看,已经打开
mysql> show variables like "%profi%";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| have_profiling | YES |
| profiling | ON | # 打开状态
| profiling_history_size | 100 |
+------------------------+-------+
3 rows in set (0.01 sec)

  

二、执行语句进行分析

下一步则是执行一条具体的语句,以便分析使用

# 执行一条insert语句,分析耗时
mysql> insert into t1 values (3, 'kk');
Query OK, 1 row affected (0.02 sec) # 查看profiles的信息
mysql> show profiles;
+----------+------------+---------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------+
| 1 | 0.00332000 | set profiling_history_size=100 |
| 2 | 0.00814400 | show variables like "%profi%" |
| 3 | 0.02193000 | insert into t1 values (3, 'kk') |
+----------+------------+---------------------------------+
3 rows in set, 1 warning (0.00 sec)

三、查看SQL语句耗时详细信息

查看具体sql的执行过程的每个阶段的耗时情况

# 此处的query 3则为上面查出来的Query_ID,此处的时间单位是秒
mysql> show profile for query 3;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.003476 |
| checking permissions | 0.000021 |
| Opening tables | 0.000024 |
| init | 0.000498 |
| System lock | 0.000015 |
| update | 0.013241 |
| end | 0.000301 |
| query end | 0.003210 |
| closing tables | 0.000023 |
| freeing items | 0.000032 |
| cleaning up | 0.001089 |
+----------------------+----------+
11 rows in set, 1 warning (0.01 sec) # 使用这条sql的执行 cpu、io、内存、交换内存等信息
show profile cpu,block io,memory,swaps,context switches,source for query 3;

MySQL之profiling性能优化的更多相关文章

  1. MySQL 基础及性能优化工具

    数据库,用户及权限 常用用户管理操作 # 创建本地用户 abc create user abc@localhost # 创建内网能够访问的用户 abc create user abc@'192.168 ...

  2. MySQL之profiling性能分析(在5.6.14版本被丢弃)

    官方建议使用information_schema.profiling. 原因是show profile 输出了查询执行的每个步骤及其花费的时间,但是结果很难快速确定哪个步骤花费的时间最多,因为输出是按 ...

  3. mysql配置以及性能优化(转)

    MySQL配置文件my.cnf中文详解,附mysql性能优化方法分享 ================================================================= ...

  4. 利用 gperftools 对nginx mysql 内存管理 性能优化

    利用 gperftools 对nginx 与 mysql  进行 内存管理  性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...

  5. MySQL系列:性能优化

    1. 优化简介 MySQL性能优化包括:查询优化.数据库结构优化.MySQL服务器优化等. 2. 查询优化 2.1 分析查询语句 MySQL提供EXPLAIN和DESCRIBE,用来分析查询语句. E ...

  6. 2018/09/17《涂抹MySQL》【性能优化及诊断】学习笔记(七)

    读 第十三章<MySQL的性能优化与诊断> 总结 一说性能优化,整个人都像被打了鸡血一样

  7. MySQL抓包工具:MySQL Sniffer 和性能优化

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...

  8. MySql学习—— 查询性能优化 深入理解MySql如何执行查询

    本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...

  9. MySQL之查询性能优化(二)

    查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.MySQL执行一个查询的过程,根据图1-1,我们可以看到当向MySQL发送一个请求时, ...

  10. MySQL设计规范与性能优化

    引言 MySQL是目前使用最为广泛的关系型数据库之一,如果使用得当,可支撑企业级高并发.高可靠服务,使用不当甚至连并发量略高的个人网站都难以支撑: 就算使用了缓存,大量的数据库访问依旧在所难免,即使设 ...

随机推荐

  1. oracle11gRAC升级到19C

    升级oracle11g集群到19.3 前述环境检查: [root@qhdb1 ~]# crsctl status res -t ------------------------------------ ...

  2. 从找朋友到找变位词:一道趣味字符串问题的深入解析|LeetCode 438 找到字符串中所有字母异位词

    LeetCode 438 找到字符串中所有字母异位词 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 还记得小时候玩的"找朋友&quo ...

  3. Jenkins插件:Generic Webhook Trigger

    Jenkins插件:Generic Webhook Trigger 作为一名软件测试工程师,在日常工作中,我经常需要使用Jenkins来进行持续集成和持续部署(CI/CD).而Jenkins的众多插件 ...

  4. spring-boot配置slf4j日志

    SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.按照官方的说法,SLF4J 是一个用于日志系统的简单 ...

  5. QT5笔记: 32. QPainter 基本绘制

  6. 洛谷P3755 [CQOI2017] 老C的任务 题解

    前言:这个分块和刚被撤下的不同,因为这个分块时间复杂度正确,能通过所有 hack. 题目传送门. 有没有什么可以不用离线都能解决问题的简单算法?答案是分块!! 60pts 首先遇到这个题目,先写一个比 ...

  7. day2-变量与数据类型

    变量 概念:程序的基本组成单位 定义: 指定变量类型 根据值自行判断变量类型(类型推导) 省略var,定义赋值 var i int var i = 10 i, j := 20, 10 数据基本类型 基 ...

  8. redux vs redux-toolkit 及源码实现

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 前言 为何讲这个内容?以为后续大家会使用 redux ...

  9. 一个简单的PHP单文件路由类示例

    <?php class Router { protected $routes = array(); protected $basePath; public function __construc ...

  10. FastAPI依赖注入:参数共享与逻辑复用

    扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长 第一章:依赖注入核心原理 1.1 依赖树构建机制 from fastapi import Depends def auth_service ...