本文问题
- 如何使用profile查看语句的资源消耗?
- Profile的使用限制是什么?
-
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;
问题答案
- 如何使用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;
-
Profile
的使用限制是什么?
只能查看当前会话中执行的语句。
MySQL5.6.7开始不建议使用该语句,建议使用Performance_schema
代替 -
SHOW PROFILES
中可以显示多少个语句,如何更改显示语句的数量?
默认15,最大值100。使用set profiling_history_size=100
进行修改。
网友评论