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 sec

Threads: 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.mfbz.cn/a/767279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Zotero】【国标csl调教(七)】导入专著M、学位论文D以及百度学术的问题

一、百度学术 百度学术导入的字段(期卷号、页码)等会有严重错误,不建议通过Baidu Scholar导入, 建议在文库编目字段自行查找修改 二、专著【M】以及学位论文【D】的出版地问题 国标对硕博论文【D】和专著【M】要求写上出版地 …

OpenSSL的一些使用案例

目录 一、介绍 二、基本使用 1、Shell (1)文件加解密 (2)生成密钥文件 2、API (1)md5sum (2)AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法,只…

昇思第7天

模型训练 模型训练一般分为四个步骤: 构建数据集。 定义神经网络模型。 定义超参、损失函数及优化器。 输入数据集进行训练与评估。 数据集加载 import mindspore from mindspore import nn # 从 MindSpore 数据集包中导入 vision 和 transforms 模块。 # visio…

使用DC/AC电源模块时需要注意的事项

BOSHIDA 使用DC/AC电源模块时需要注意的事项 1. 仔细阅读和理解产品说明书:在使用DC/AC电源模块之前,应该仔细阅读和理解产品说明书,了解其性能特点、技术要求和使用方法,以确保正确使用和避免潜在的安全风险。 2. 选择适当的电…

MySQL 9.0 发布了!

从昨晚开始,在DBA群里大家就在讨论MySQL 9.0发布的事情,但是Release Note和官方文档都没有更新,所以今天早上一上班就赶紧瞅了下具体更新了哪些内容? 整体看来,基本没什么创新。下面是9.0新增或废弃的一些特性。 &…

Power Platform功能管理实战概述

Power Platform功能管理实战概述 Microsoft Power Platform是一个强大的低代码开发平台,它使组织能够自动化商业流程、开发自定义应用程序,并加强与客户的连接。该平台由四个主要组件组成:Power Apps、Power Automate、Power BI和Power Virt…

【探索Linux】P.36(传输层 —— TCP协议段格式)

阅读导航 引言一、TCP段的基本格式二、控制位详细介绍三、16位接收窗口大小⭕窗口大小的作用⭕窗口大小的限制⭕窗口缩放选项⭕窗口大小的更新⭕窗口大小与拥塞控制 四、紧急指针温馨提示 引言 在上一篇文章中,我们深入探讨了一种无连接的UDP协议,它以其…

Searchsploit漏洞利用搜索工具的介绍及使用

目录 0x00 介绍0x01 常用参数0x02 使用1. 在线搜索2. 使用步骤3. 使用实例 0x00 介绍 kali自带的,Searchsploit会通过本地的Exploit-db查找软件漏洞信息。 Exploit Database(https://gitlab.com/exploit-database/exploitdb)存储了大量的漏洞…

33.哀家要长脑子了!

憋说了,感觉好不容易长出来的脑子又缩回去了。。。 1.539. 最小时间差 - 力扣(LeetCode) 把所有时间排好序,然后计算两两之间的分钟差就好,但是要注意加上最后一个和第一个的判断,因为这个时间是按字典序来…

AI研究的主要推动力会是什么?ChatGPT团队研究科学家:算力成本下降

AI 研究发展的主要推动力是什么?在最近的一次演讲中,OpenAI 研究科学家 Hyung Won Chung 给出了自己的答案。 近日,斯坦福大学《CS25: Transformers United V4》课程迎来了一位我们熟悉的技术牛人:Hyung Won Chung。 Chung 是 O…

Hadoop-03-Hadoop集群 免密登录 超详细 3节点公网云 分发脚本 踩坑笔记 SSH免密 服务互通 集群搭建 开启ROOT

章节内容 上一节完成: HDFS集群XML的配置MapReduce集群XML的配置Yarn集群XML的配置统一权限DNS统一配置 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次&…

Spring容器生命周期中如前置运行程序和后置运行程序

在Spring容器加入一个实现了BeanPostProcessor接口bean实例,重写postProcessBeforeInitialization、postProcessAfterInitialization方法,在方法里面写具体的实现,从而达到Spring容器在初如化前或销毁时执行预定的程序,方法如下&a…

深入浅出:npm常用命令详解与实践【保姆级教程】

大家好,我是CodeQi! 在我刚开始学习前端开发的时候,有一件事情让我特别头疼:管理和安装各种各样的依赖包。 那时候,我还不知道 npm 的存在,手动下载和管理这些库简直是噩梦。 后来,我终于接触到了 npm(Node Package Manager),它不仅帮我解决了依赖管理问题,还让我…

解决Visual Studio 一直弹出管理员身份运行问题(win10/11解决办法)

不知道大家是否有遇到这个问题 解决办法也很简单 找到启动文件 如果是快捷方式就继续打开文件位置 找到这个程序启动项 右键 选择 兼容性疑难解答(win11 则需要 按住 shift 右键) win10 解决办法 这样操作完后就可以了 win11解决办法按以下选择就行

深入理解策略梯度算法

策略梯度(Policy Gradient)算法是强化学习中的一种重要方法,通过优化策略以获得最大回报。本文将详细介绍策略梯度算法的基本原理,推导其数学公式,并提供具体的例子来指导其实现。 策略梯度算法的基本概念 在强化学习…

AI大模型时代来临:企业如何抢占先机?

AI大模型时代来临:企业如何抢占先机? 2023年,被誉为大模型元年,AI大模型的发展如同一股不可阻挡的潮流,正迅速改变着我们的工作和生活方式。从金融到医疗,从教育到制造业,AI大模型正以其强大的生成能力和智能分析,重塑着行业的未来。 智能化:企业核心能力的转变 企…

【CUDA】 归约 Reduction

Reduction Reduction算法从一组数值中产生单个数值。这个单个数值可以是所有元素中的总和、最大值、最小值等。 图1展示了一个求和Reduction的例子。 图1 线程层次结构 在Reduction算法中,线程的常见组织方式是为每个元素使用一个线程。下面将展示利用许多不同方…

AI-算力集群通往AGI

背景: 自GPT-4发布以来,全球AI能力的发展势头有放缓的迹象。 但这并不意味着Scaling Law失效,也不是因为训练数据不够,而是结结实实的遇到了算力瓶颈。 具体来说,GPT-4的训练算力约2e25 FLOP,近期发布的几个…

双曲方程初值问题的差分逼近(迎风格式)

稳定性: 数值例子 例一 例二 代码 % function chap4_hyperbolic_1st0rder_1D % test the upwind scheme for 1D hyperbolic equation % u_t + a*u_x = 0,0<x<L,O<t<T, % u(x,0) = |x-1|,0<X<L, % u(0,t) = 1% foundate = 2015-4-22’; % chgedate = 202…