当前位置: 首页 > news >正文

MySQL#秘籍#一条SQL语句执行时间以及资源分析

背景

一条 SQL 语句的执行完,每个模块耗时,不同资源(CPU/IO/IPC/SWAP)消耗情况我该如何知道呢?别慌俺有 - MySQL profiling

1. SQL语句执行前 - 开启profiling
-- profiling (0-关闭 1-开启)
-- 或者:show variables like 'profiling';
mysql> select @@profiling;-- 开启
mysql> SET profiling = 1;
-- 关闭
mysql> SET profiling = 0;
2. 执行某个SQL语句
3. 执行分析

3.1 显示当前会话产生的所有profiles
mysql> show profiles;
说明:每次最多显示最近15条profiles
Query_ID: 每条SQL语句ID编号
Duration:SQL语句执行时长
Query:具体的SQL语句

在这里插入图片描述

3.2 查看最近一条SQL执行情况
mysql> show profile;

3.3 查看指定query id的执行情况
mysql> show profile for query xxx_query_id;

  1. Status: 显示了SQL执行的一个完整的生命周期,涉及到各个阶段。
  2. Duration: 表示SQL在这个阶段的耗时。

在这里插入图片描述

3.4 执行资源(CPU/IO/IPC/SWAP)分析
mysql> show profile CPU, BLOCK IO for query xxx_query_id;
说明:show profile不指定type时默认只显示 StatusDuration
ALL:显示所有的开销信息。
BLOCK IO:显示块存储设备输入和输出的次数,即从硬盘读取和写入数据的次数。只有当数据量大于内存可用量时,才会借助硬盘进行内存交换(Swap),才会产生硬盘读取和写入。
CONTEXT SWITCHES:上下文切换开销。
CPU:显示CPU开销信息。
IPC:显示发送和接收开销信息。
MEMORY:显示内存开销信息。
PAGE FAULTS:显示页面错误开销信息。
SOURCE:显示和Source_function,Source_file, Source_line相关的开销信息。
SWAPS:显示交换次数开销信息。

注意事项:

  1. profile统计的数据依赖于底层system call调用,某些操作系统上不支持调用时值会返回NULL
  2. profiling统计的信息是进程级别而非线程级别,统计信息时刻在变更。
  3. Profiling信息还可以通过INFORMATION_SCHEMA PROFILING table查询
    SELECT STATE, FORMAT(DURATION, 6) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 2 ORDER BY SEQ;
  4. 从profiling分析结果Status中得到优化方向
    • converting HEAP to MyISAM: 查询结果太大,内存不够用
    • Creating tmp table: 创建临时表。先拷贝数据到临时表,用完后再删除临时表
    • Copying to tmp table on disk: 把内存中临时表复制到磁盘上
    • locked: 发生了死锁行为
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
}

参考文档

https://dev.mysql.com/doc/refman/8.0/en/show-profile.html

profiling Statue : https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html

http://www.xdnf.cn/news/633871.html

相关文章:

  • 机器学习-模型选择与调优
  • 【慧游鲁博】【8】前后端用户信息管理:用户基本信息在小程序端的持久化与随时获取
  • vue2项目搭建
  • Maven与Spring核心技术解析:构建管理、依赖注入与应用实践
  • 私有知识库 Coco AI 实战(七):摄入本地 PDF 文件
  • Spring Cloud Alibaba Sentinel安装+流控+熔断+热点+授权+规则持久化
  • Linux系统编程-DAY04
  • 网络编程与axios技术
  • 在飞牛nas系统上部署gitlab
  • aws(学习笔记第四十二课) serverless-backend
  • 人工智能数学基础实验(二):奇异值分解(SVD)-图像处理
  • OpenGL Chan视频学习-6 How Shaders Work in OpenGL
  • git提交通用规范
  • 前端流行框架Vue3教程:27. 依赖注入
  • 基于OpenCV 的人体姿态估计
  • PCM音频数据的编解码
  • ArcGISpro中的空间统计分析(二)
  • CSS传统布局与定位详解与TDK三大标签SEO优化
  • 【二刷力扣】【力扣热题100】今天的题目是:283.移动零
  • 【排序算法】典型排序算法和python 实现
  • 如何使用HiveSQL实现2个字符串间的映射及排序
  • 【排序算法】典型排序算法 Java实现
  • 【排序算法】冒泡排序详解--附详细流程代码
  • CVE-2017-5645源码分析与漏洞复现(反序列化)
  • idea 快捷键大全
  • RabbitMQ核心机制——延迟队列
  • mysql:MVCC机制
  • 【Android】基于SurfaceControlViewHost实现跨进程渲染
  • 【GitHub Pages】部署指南
  • 微信小程序 --三剑客