美文网首页
利用Profile查看语句的资源消耗

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

作者: 月饮沙 | 来源:发表于2020-07-15 10:28 被阅读0次

本文问题

  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 PROFILESHOW 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显示StatusDuration列,可以通过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进行修改。

相关文章

网友评论

      本文标题:利用Profile查看语句的资源消耗

      本文链接:https://www.haomeiwen.com/subject/voqdhktx.html