0
点赞
收藏
分享

微信扫一扫

利用Profile查看语句的资源消耗

半秋L 2022-03-17 阅读 79

本文问题

  1. 如何使用profile查看语句的资源消耗?
  2. Profile的使用限制是什么?
  3. ​SHOW PROFILES​​中可以显示多少个语句,如何更改显示语句的数量?

启动Profiling

​mysql> SET profiling = 1;​

查看所有profile

​SHOW PROFILES​

显示发送到服务器的最新语句的列表,列表的大小由​​profiling_history_size​​会话变量控制,默认为15,最大值为100,将​​profiling_history_size​​设置为0将禁用分析

除​​SHOW PROFILE​​​和​​SHOW PROFILES​​​以外的其他所有语句都会记录在​​profile​​列表中,包括产生错误的语句。

mysql> show profiles;
+----------+------------+-------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------------+
| 1 | 0.00019375 | SELECT DATABASE() |
| 2 | 0.00045750 | select * from db_info limit 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
}

显示单个语句的消耗,如果不指定​​FOR QUERY n​​,则显示最近一个语句的消耗。

默认情况下,​​SHOW PROFILE​​显示​​Status​​和​​Duration​​列,可以通过​​type​​指定显示其他信息:

type

  • ALL 显示所有信息
  • BLOCK IO 显示块输入和输出操作的数量
  • CONTEXT SWITCHES 显示自愿上下文切换和非自愿上下文切换的数量
  • CPU 显示用户和系统的CPU使用时间
  • IPC 显示已发送和已接收消息(messages)的数量
  • MEMORY -- 尚未生效
  • PAGE FAULTS 显示主要和次要页面错误的数量
  • SOURCE 显示源代码中函数名称以及该函数所在文件的名称和行号
  • SWAPS 显示SWAP数量

查看INFORMATION_SCHEMA.PROFILING表

表结构

+---------------------+--------------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+----------+-------+
| QUERY_ID | int(20) | NO | | 0 | | # 语句ID
| SEQ | int(20) | NO | | 0 | | # 序号,指示执行顺序
| STATE | varchar(30) | NO | | | | # 状态
| DURATION | decimal(9,6) | NO | | 0.000000 | | # 持续时间,单位s
| CPU_USER | decimal(9,6) | YES | | NULL | | # 用户态CPU时间,单位s
| CPU_SYSTEM | decimal(9,6) | YES | | NULL | | # 系统态CPU时间,单位s
| CONTEXT_VOLUNTARY | int(20) | YES | | NULL | | # 自愿上下文切换次数
| CONTEXT_INVOLUNTARY | int(20) | YES | | NULL | | # 非自愿上下文切换次数
| BLOCK_OPS_IN | int(20) | YES | | NULL | | # 块输入次数
| BLOCK_OPS_OUT | int(20) | YES | | NULL | | # 块输出次数
| MESSAGES_SENT | int(20) | YES | | NULL | | # 发送的消息数量
| MESSAGES_RECEIVED | int(20) | YES | | NULL | | # 接收的消息数量
| PAGE_FAULTS_MAJOR | int(20) | YES | | NULL | | # 主要页面错误数量
| PAGE_FAULTS_MINOR | int(20) | YES | | NULL | | # 次要页面错误数量
| SWAPS | int(20) | YES | | NULL | | # 交换次数
| SOURCE_FUNCTION | varchar(30) | YES | | NULL | | # 源代码函数
| SOURCE_FILE | varchar(20) | YES | | NULL | | # 源代码文件
| SOURCE_LINE | int(20) | YES | | NULL | | # 源代码行数
+---------------------+--------------+------+-----+----------+-------+

语句

select query_id,seq,state,duration
,cpu_user,cpu_system
,context_voluntary,context_involuntary
,block_ops_in,block_ops_out
,messages_sent,messages_received
,page_faults_major,page_faults_minor
,swaps
,source_function,source_file,source_line
from information_schema.profiling
where query_id=2;

关闭Profiling

​set profiling=0;​

问题答案

  1. 如何使用Profile查看语句的资源消耗?
# 启动Profiling
set profiling=1;
# 执行语句
# 显示发送到服务器的最新语句列表
SHOW PROFILES
# 查看语句的资源消耗
SHOW PROFILE FOR QUERY 2
或者
select query_id,seq,state,duration
,cpu_user,cpu_system
,context_voluntary,context_involuntary
,block_ops_in,block_ops_out
,messages_sent,messages_received
,page_faults_major,page_faults_minor
,swaps
,source_function,source_file,source_line
from information_schema.profiling
where query_id=2;
# 关闭Profiling
set profiling=0;
  1. ​Profile​​的使用限制是什么?
    只能查看当前会话中执行的语句。
    MySQL5.6.7开始不建议使用该语句,建议使用​​Performance_schema​​代替
  2. ​SHOW PROFILES​​中可以显示多少个语句,如何更改显示语句的数量?
    默认15,最大值100。使用​​set profiling_history_size=100​​进行修改。

举报

相关推荐

0 条评论