MySQL SQL性能分析 show profile

2024-08-31 01:58

本文主要是介绍MySQL SQL性能分析 show profile,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MySQL show profile 和 show profiles 命令用于展示SQL语句执行过程中的资源使用情况,包括CPU的使用,CPU上下文切换,IO等待,内存使用等,这个命令对于分析某个SQL的性能瓶颈非常有帮助,借助于show profile的输出信息,能让我们知道一个SQL在哪个阶段耗时最长,消耗资源最多,从而为SQL优化,提高SQL性能提供重要的依据。

原文地址:
https://mytecdb.com/blogDetail.php?id=80

1. show profile语法

SHOW PROFILE [type [, type] … ] [FOR QUERY n] [LIMIT row_count [OFFSET offset]]

type: { ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS }

2. 启用profiling:

使用show profile命令之前,先启用profiling, profiling是session级变量,session关闭,该session的profiling信息也会丢失。

mysql> set profiling = 1;
3. show profiles

开启profiling之后,执行几条SQL,然后执行 show profiles 展示最近执行的几个SQL的执行耗时情况,具体能收集多少个SQL,由参数 profiling_history_size决定,默认值为15,最大值为100。如果设置为0,等同于关闭profiling。show profiles展示的是简要的耗时信息,如果想了解某个SQL的具体耗时情况,执行show profile 查看。

mysql> show profiles;
+----------+------------+------------------------------+
| Query_ID | Duration   | Query                        |
+----------+------------+------------------------------+
|        1 | 0.00248450 | select * from blog.blog      |
|        2 | 0.00071050 | select * from blog.blog_type |
+----------+------------+------------------------------+
2 rows in set, 1 warning (0.00 sec)
4. show profile for query n

show profile 展示一个SQL语句的执行耗时细节,如果不加 for query {n} 子句,默认展示最新的一次SQL的执行情况,加了for query {n},表示展示第n个 SQL的执行情况。比如看第1个SQL,执行show profile for query 1;

mysql> show profile for query 1;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000117 |
| checking permissions | 0.000015 |
| Opening tables       | 0.000033 |
| init                 | 0.000054 |
| System lock          | 0.000020 |
| optimizing           | 0.000006 |
| statistics           | 0.000021 |
| preparing            | 0.000017 |
| executing            | 0.000003 |
| Sending data         | 0.002045 |
| end                  | 0.000010 |
| query end            | 0.000060 |
| closing tables       | 0.000020 |
| freeing items        | 0.000047 |
| cleaning up          | 0.000019 |
+----------------------+----------+
15 rows in set, 1 warning (0.00 sec)

在执行show profile时,可以加上类型子句,比如CPU,IPC等,查看具体某类资源的消耗情况,例如:
show profile cpu,ipc for query 1;

show profile 和 show profiles 除了这两个语句之外,可以展示所有的SQL语句的执行情况,包括有语法错误的SQL也会被监测到。比如下面Query_ID 为4的这个SQL,有语法错误,但仍然被记录到了show profiles;列表中。

mysql> show profiles;
+----------+------------+------------------------------+
| Query_ID | Duration   | Query                        |
+----------+------------+------------------------------+
|        1 | 0.00248450 | select * from blog.blog      |
|        2 | 0.00071050 | select * from blog.blog_type |
|        3 | 0.00012125 | show profile for 1           |
|        4 | 0.00011900 | select from blog.blog        |
+----------+------------+------------------------------+
4 rows in set, 1 warning (0.00 sec)
5. show profile 将被废弃

在MySQL 5.7, 8.0版本里执行show profile命令,会有一个warning信息,提示如下:

'SHOW PROFILES' is deprecated and will be removed in a future release.Please use Performance Schema instead

show profile 命令将会被废弃,取而代之的是使用Performance Schema,Performance Schema 如何对SQL进行性能分析,见地址:
https://mytecdb.com/blogDetail.php?id=79

这篇关于MySQL SQL性能分析 show profile的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S