1.是什么
分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数开启后,后续执行的SQL语句都将记录其资源开销,诸如IO,上下文切换,CPU,Memory等等。根据这些开销进一步分析当前SQL瓶颈从而进行优化与调整。相较于explain更加的详细。
2.官网
http://dev.mysql.com/doc/refman/5.5/en/show-profile.html
3.开启profiling
3.1查看参数
show variables like 'profiling';
ON表示开启,如果未开启,设置参数开启
3.2设置参数开启
SET GLOBAL profiling = 1
4.设置profiles 记录数
show variables like 'profiling_history_size';
show profiles 默认显示最近15条的sql执行情况,15这个数字由profiling_history_size常量决定,你可以配置为0到100的数字最大支持100,如果设置为0则类似于关闭profiling选项
5.使用profiles
5.1查看最近执行的sql列表
SHOW PROFILES
可以看到最近的15条的sql的执行情况
5.2查看某条记录的详情
show profile [type] for query query_id
type: ALL --显示所有的开销信息 | BLOCK IO --显示块IO相关开销 | CONTEXT SWITCHES --上下文切换相关开销 | CPU --显示CPU相关开销信息 | IPC --显示发送和接收相关开销信息 | MEMORY --显示内存相关开销信息 | PAGE FAULTS --显示页面错误相关开销信息 | SOURCE --显示和Source_function,Source_file,Source_line相关的开销信息 | SWAPS --显示交换次数相关开销的信息
show profile cpu,block io for query 59 # 59是Query_ID
5.3几个大消耗的情况
converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。
Creating tmp table 创建临时表
Copying to tmp table on disk 把内存中临时表复制到磁盘,危险!
6.全局查询日志
除了profile ,还提供了全局查询日志。默认关闭,开启后,会记录所有执行的sql。最好不要生产环境使用
6.1查看参数
show variables like 'general_log';
6.2开启
SET GLOBAL general_log = 1
6.3全局日志的记录方式
全局日志可以存放到日志文件中,也可以存放到Mysql系统表中。存放到日志文件中性能更好一些,默认是存放到日志文件中
6.3.1查看日志存放方式
show variables like 'log_output';
6.3.2设置日志存放方式
set global log_output='TABLE'; #设置放到表中
set global log_output='FILE'; #设置放到日志文件中
6.3.3在表中,可以select查看
select * from mysql.general_log;
BLOB的内容,开启备注即可查看到
相较于profile ,全局日志的内容很简单,不够详细。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?