MySQL中使用PROFILING来查看SQL执行流程

在MySQL中,PROFILING功能提供了一种方式来分析SQL语句的执行时间,包括查询执行的各个阶段,如发送、解析、优化、执行等。这对于诊断性能问题非常有用。然而,需要注意的是,从MySQL 5.7.7版本开始,PROFILING功能被标记为已弃用(deprecated),并在以后的版本中完全移除。

使用PROFILING来查看SQL执行流程。以下是如何开启和使用PROFILING的步骤

1、开启Profiling

1.1、本次测试的环境

(root@localhost)[superdb]> status
--------------
mysql  Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)Connection id:          11
Current database:       superdb
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.4.0 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /tmp/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 22 hours 13 min 49 secThreads: 2  Questions: 46  Slow queries: 0  Opens: 182  Flush tables: 3  Open tables: 101  Queries per second avg: 0.000
--------------

1.2、开启Profiling

(root@localhost)[superdb]> show variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling     | OFF   |
+---------------+-------+
1 row in set (0.01 sec)(root@localhost)[superdb]> SET profiling =1;
Query OK, 0 rows affected, 1 warning (0.00 sec)-- OR 
SET profiling = on;(root@localhost)[superdb]> show variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling     | ON    |
+---------------+-------+
1 row in set (0.00 sec)

2、执行SQL查询

执行要分析的SQL查询。

(root@localhost)[superdb]> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)

3、查看查询的Profile

执行查询后,你可以通过以下命令查看所有查询的Profile

(root@localhost)[superdb]> show profiles;
+----------+------------+---------------------------------+
| Query_ID | Duration   | Query                           |
+----------+------------+---------------------------------+
|        1 | 0.00288125 | show variables like '%profile%' |
|        2 | 0.00334150 | show variables like 'profiling' |
|        3 | 0.00147475 | select * from dept              |
|        4 | 0.00265825 | show variables like 'profiling' |
|        5 | 0.00125125 | select * from dept              |
+----------+------------+---------------------------------+
5 rows in set, 1 warning (0.00 sec)

这将列出所有已执行的查询及其查询编号(Query_ID)。

4、查看特定查询的详细Profile

选择你想要查看详细Profile的查询编号,然后使用以下命令:

(root@localhost)[superdb]> show profile for query 5;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000092 |
| Executing hook on transaction  | 0.000028 |
| starting                       | 0.000032 |
| checking permissions           | 0.000030 |
| Opening tables                 | 0.000257 |
| init                           | 0.000032 |
| System lock                    | 0.000071 |
| optimizing                     | 0.000028 |
| statistics                     | 0.000037 |
| preparing                      | 0.000037 |
| executing                      | 0.000096 |
| end                            | 0.000028 |
| query end                      | 0.000043 |
| waiting for handler commit     | 0.000268 |
| closing tables                 | 0.000034 |
| freeing items                  | 0.000090 |
| cleaning up                    | 0.000050 |
+--------------------------------+----------+
17 rows in set, 1 warning (0.00 sec)

或者,你可以查看该查询的特定方面,如CPU_TIME、CONTEXT_SWITCHES等:


(root@localhost)[superdb]> SHOW PROFILE CPU, BLOCK IO FOR QUERY 5;
+--------------------------------+----------+----------+------------+--------------+---------------+
| Status                         | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+----------+------------+--------------+---------------+
| starting                       | 0.000092 | 0.000067 |   0.000025 |            0 |             0 |
| Executing hook on transaction  | 0.000028 | 0.000020 |   0.000008 |            0 |             0 |
| starting                       | 0.000032 | 0.000023 |   0.000009 |            0 |             0 |
| checking permissions           | 0.000030 | 0.000021 |   0.000008 |            0 |             0 |
| Opening tables                 | 0.000257 | 0.000126 |   0.000047 |            0 |             0 |
| init                           | 0.000032 | 0.000023 |   0.000009 |            0 |             0 |
| System lock                    | 0.000071 | 0.000051 |   0.000019 |            0 |             0 |
| optimizing                     | 0.000028 | 0.000020 |   0.000008 |            0 |             0 |
| statistics                     | 0.000037 | 0.000027 |   0.000010 |            0 |             0 |
| preparing                      | 0.000037 | 0.000027 |   0.000010 |            0 |             0 |
| executing                      | 0.000096 | 0.000070 |   0.000026 |            0 |             0 |
| end                            | 0.000028 | 0.000023 |   0.000009 |            0 |             0 |
| query end                      | 0.000043 | 0.000030 |   0.000012 |            0 |             0 |
| waiting for handler commit     | 0.000268 | 0.000000 |   0.000148 |            0 |             0 |
| closing tables                 | 0.000034 | 0.000000 |   0.000034 |            0 |             0 |
| freeing items                  | 0.000090 | 0.000000 |   0.000090 |            0 |             0 |
| cleaning up                    | 0.000050 | 0.000000 |   0.000049 |            0 |             0 |
+--------------------------------+----------+----------+------------+--------------+---------------+
17 rows in set, 1 warning (0.00 sec)

5、总结

由于PROFILING在MySQL 5.7.7之后被弃用,并在未来MySQL的版本中完全移除,你需要使用其他工具或方法来进行性能分析。

  • Performance Schema:MySQL 5.5及更高版本引入了Performance Schema,这是一个功能强大的性能监控和诊断框架。你可以使用它来收集关于服务器执行情况的详细数据。

  • EXPLAIN和EXPLAIN ANALYZE:EXPLAIN语句可以用来查看MySQL如何执行SELECT语句,包括如何连接表和选择索引。MySQL 8.0.18引入了EXPLAIN ANALYZE,它提供了查询执行计划的详细运行时统计信息。

  • 慢查询日志:通过配置MySQL的慢查询日志,你可以捕获执行时间超过指定阈值的所有查询。这对于识别性能瓶颈非常有用。

  • 第三方工具:如Percona Toolkit、MySQL Workbench等,这些工具提供了图形界面和额外的功能来帮助你分析和优化MySQL查询。

总的来说,虽然PROFILING是一个有用的工具,但随着MySQL的发展,你应该考虑使用更现代和强大的性能分析工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 线程池之FixedThreadPool

引言 在并发编程中,线程池是一种常用的资源管理模式,用于限制并发线程的数量,优化系统性能和资源使用。Java 提供了多种类型的线程池,其中 FixedThreadPool 是一种固定大小的线程池,适用于需要固定数量线程执行任务的…

小程序 npm 支持

使用 npm 包 目前小程序已经支持使用 npm 安装第三方包,因为 node_modules 目录中的包不会参与小程序项目的编译、 上传和打包,因此在小程序 项目中要使用的 npm 包,必须走一遍构建 npm 的过程。在构建成功以后,默认 会在小程序目…

【keil5问题】keil5中突然debug调试不能全速运行的问题

1、问题现象: 原本的项目工程是正常debug单步调试,然后突然出现是点击左上角的run全速运行,也全速运行不了,出现如下图的情况,点一次一步走的现象 2、问题解决: 2-1、问题分析: 点击reset、…

关于pytorch的加载数据,cpu init, cpu getitem, gpu init

文章目录 一. (cpu,init)图像加载到CPU内存,是在 __init__中函数中全部数据, 然后在item中取图像二.(cpu,get_item)是图像在 get_item函数中,载入图像到CPU三(gpu,init)是将图像加载到GPU, 在init函数中 跑多光谱估计的代码,参考:…

如何使用 uni-app 快速集成聊天会话能力?

移动互联网时代,即时通讯(IM)功能是许多app不可或缺的一部分,然而在即时通讯app开发时,开发者常常面临着选择困难:是为每个平台单独开发应用,还是有限开发某个平台?uni-app的出现&am…

BLOB视频技术原理,如何将Blob视频转换为MP4格式?

BLOB视频的制作涉及将视频数据转换为二进制大对象(BLOB)格式,然后对其进行编码、分割、封装和传输。在目标设备上,BLOB数据被解析、解码和播放,同时可能需要进行实时的优化以适应播放条件。这种制作方式旨在提供一种高…

linux监控服务器磁盘、内存空间使用率到达90%发送邮件脚本

以下是一个使用Python编写的Linux监控服务器磁盘、内存空间使用率并在达到90%时发送邮件的脚本: import os import smtplib from email.mime.text import MIMEText from email.header import Header# 设置阈值 DISK_THRESHOLD 90 MEMORY_THRESHOLD 90# 获取磁盘使…

7月11日云技术研讨会 | 车载信息安全全流程实施方案

伴随着汽车的智能网联化发展,网络攻击也逐渐渗透漫延至汽车领域,汽车行业面临着重大的信息安全挑战。此外,UNECE WP.29 R155和ISO/SAE 21434等标准也对汽车的信息安全提出了规范化要求,旨在分阶段将产品全生命周期中由信息安全威胁…

中介子方程四十二

XXFXXuXXWXXuXXdXXrXXαXXuXpXXKXηXiXXnXXyXηXuXXrXXaXnXXαXLXyXXWXuXeXuXWXXyXLXαXXnXaXXrXXuXηXyXXnXXiXηXKXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXpXXKXηXiXXnXXyXηXuXXrXXaXnXXαXLXyXXWXuXeXuXWXXyXLXαXXnXaXXrXXuXηXyXXnXXiXηXKXXpXuXXα…

JavaScript中的this指向

1. 全局环境下的this 在全局环境中(在浏览器中是window对象,在Node.js中是global对象),this指向全局对象。 console.log(this window); // 在浏览器中为true console.log(this.document ! undefined); // true,因为…

opencv编译报错OpenCV does not recognize MSVC_VERSION “1940“

具体如下: CMake Warning at cmake/OpenCVDetectCXXCompiler.cmake:182 (message):OpenCV does not recognize MSVC_VERSION "1940". Cannot set OpenCV_RUNTIME Call Stack (most recent call first):CMakeLists.txt:174 (include) 打开源码\opencv\sources\cmak…

如何加密U盘?U盘加密软件推荐

U盘是我们最常用的移动存储设备,可以帮助我们随身携带大量数据。为了避免U盘数据泄露,我们需要加密保护U盘。那么,U盘该如何加密呢?下面小编就为大家推荐两款专业的U盘加密软件。 U盘超级加密3000 U盘超级加密3000是一款优秀的U盘…

大模型概述-定义/分类/训练/应用

大模型概述 随着时代的发展, 大模型各个领域的应用正在不断扩大. 本文尽力梳理各种材料, 将从概念定义, 类型分类, 训练以及应用等方面对大模型进行一个简要的概述. 如果你想了解大模型但是却缺乏基础的知识或者觉得无从下手, 那么阅读该文章可能对你有所帮助. 如果想了解更多…

react antd表格翻页时记录勾选状态

在Ant Design的React表格(Table)组件中,如果需要在翻页时记住勾选状态,可以通过以下步骤实现: 使用rowSelection属性来控制勾选状态,并添加preserveSelectedRowKeys: true以保留 key。 设置rowKey属性。 …

Django任意URL跳转漏洞(CVE-2018-14574)

目录 Django介绍 URL跳转漏洞介绍 Django任意URL跳转漏洞介绍 环境搭建 防御方法 前段时间在面试时,问到了URL跳转漏洞,我没有回答好,下午把URL跳转漏洞学习了,发现也不难,看来还需要学习的东西很多呀&#xff0c…

cadence symbol修改之一

cdaence virtuoso 复制cell,或者拷贝symbol之后,再次调用的时候,symbol还是跟随原来的cell名字 解决办法 打开对应的symbol 修改partName为 cellName

把前端打包放到Eladmin框架中运行

再resuorces目录创建static文件夹,然后把前端文件放进来 然后修改 ConfigurerAdapter文件,如下图所示 这样就可以通过ip端口/index.html 这样访问啦!

基于Lua源码开发动态库供lua脚本使用

通过require的方式可以加载动态库,然后脚本就可以使用库中提供的函数,一般过程如下: 比如有一个动态库名为:MyFirstLua.dll 则使用时:MyFirstLua require("MyFirstLua") 导出的函数接口名称一定是 int l…

垂直领域大模型的机遇与挑战:从构建到应用

在人工智能技术的浪潮中,大模型以其强大的数据处理和学习能力,成为推动科技进步的重要力量。然而,这种跨领域应用的过程并非一帆风顺,既面临挑战也蕴含机遇。本文从复旦大学的研究工作出发,详细分析大模型的机遇与挑战。 背景 GPT4技术报告指出,GPT4仍处于通用人工智…

Mybatis连接数据库

文章目录 大纲定义类、创建表添加相关依赖五件套5.1 mybatis-config.xml5.2 MybatisUtils.java5.3 \**Mapper.xml5.4 \**Mapper.java5.5 \**Dao.java 测试类 大纲 在Java中定义类、在数据库汇总创建表添加依赖编写5件套测试 定义类、创建表 import java.time.LocalDate; imp…