mysql语句性能开销检测profiling详解

转载自 mysql语句性能开销检测profiling详解

之前我介绍过msyql查询优化explain检查命令的使用,explain主要是检查sql语句的基本性能,sql是否优秀,但不能查看具体的涉及硬件资源的开销,今天要介绍的这个profiling工具可以更细节的查看资源的开销,比较详细。


首先这款性能检查工具是针对每个session生效的,session结束了就要重要发起查询检测。


默认是关闭的,需要手动开启:

SET profiling = 1;


开启之后,发往mysql服务器的语句可以通过SHOW PROFILES显示出来,默认显示15条,最大设置为100,通过设置变量profiling_history_size实现,设置为0将会禁用profiling。


语法


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

  

关于type的定义英文也简单:


  • ALL displays all information


  • BLOCK IO displays counts for block input and output operations


  • CONTEXT SWITCHES displays counts for voluntary and involuntary context switches


  • CPU displays user and system CPU usage times


  • IPC displays counts for messages sent and received


  • MEMORY is not currently implemented


  • PAGE FAULTS displays counts for major and minor page faults


  • SOURCE displays the names of functions from the source code, together with the name and line number of the file in which the function occurs


  • SWAPS displays swap counts


使用示例


查看有没有启用profiling

mysql> SELECT @@profiling;

+-------------+

| @@profiling |

+-------------+

|           0 |

+-------------+

1 row in set (0.00 sec)


开启profiling

mysql> SET profiling = 1;

Query OK, 0 rows affected (0.00 sec)


运行要分析的SQL语句

mysql> DROP TABLE IF EXISTS t1;

Query OK, 0 rows affected, 1 warning (0.00 sec)


mysql> CREATE TABLE T1 (id INT);

Query OK, 0 rows affected (0.01 sec)


检查所有抓取到的分析语句性能指标

mysql> SHOW PROFILES;

+----------+----------+--------------------------+

| Query_ID | Duration | Query                    |

+----------+----------+--------------------------+

|        0 | 0.000088 | SET PROFILING = 1        |

|        1 | 0.000136 | DROP TABLE IF EXISTS t1  |

|        2 | 0.011947 | CREATE TABLE t1 (id INT) |

+----------+----------+--------------------------+

3 rows in set (0.00 sec)


显示单个分析语句性能指标,指最近执行次数最多的那一条

mysql> SHOW PROFILE;

+----------------------+----------+

| Status               | Duration |

+----------------------+----------+

| checking permissions | 0.000040 |

| creating table       | 0.000056 |

| After create         | 0.011363 |

| query end            | 0.000375 |

| freeing items        | 0.000089 |

| logging slow query   | 0.000019 |

| cleaning up          | 0.000005 |

+----------------------+----------+

7 rows in set (0.00 sec)


具体查看某条分析语句的性能

mysql> SHOW PROFILE FOR QUERY 1;

+--------------------+----------+

| Status             | Duration |

+--------------------+----------+

| query end          | 0.000107 |

| freeing items      | 0.000008 |

| logging slow query | 0.000015 |

| cleaning up        | 0.000006 |

+--------------------+----------+

4 rows in set (0.00 sec)


你也可以查看CPU或者其他资源消耗信息

mysql> SHOW PROFILE CPU FOR QUERY 2;

+----------------------+----------+----------+------------+

| Status               | Duration | CPU_user | CPU_system |

+----------------------+----------+----------+------------+

| checking permissions | 0.000040 | 0.000038 |   0.000002 |

| creating table       | 0.000056 | 0.000028 |   0.000028 |

| After create         | 0.011363 | 0.000217 |   0.001571 |

| query end            | 0.000375 | 0.000013 |   0.000028 |

| freeing items        | 0.000089 | 0.000010 |   0.000014 |

| logging slow query   | 0.000019 | 0.000009 |   0.000010 |

| cleaning up          | 0.000005 | 0.000003 |   0.000002 |

+----------------------+----------+----------+------------+

7 rows in set (0.00 sec)


其他使用方式


也可以通过查表的方式查看分析语句的性能,所有show能看到的都会记录在INFORMATION_SCHEMA表中,比如:

SELECT STATE, FORMAT(DURATION, 6) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 2 ORDER BY SEQ;


SHOW与INFORMATION_SCHEMA对应关系表:


INFORMATION_SCHEMA Name SHOW Name Remarks
QUERY_ID Query_ID
SEQ

STATE Status
DURATION Duration
CPU_USER CPU_user
CPU_SYSTEM CPU_system
CONTEXT_VOLUNTARY Context_voluntary
CONTEXT_INVOLUNTARY Context_involuntary
BLOCK_OPS_IN Block_ops_in
BLOCK_OPS_OUT Block_ops_out
MESSAGES_SENT Messages_sent
MESSAGES_RECEIVED Messages_received
PAGE_FAULTS_MAJOR Page_faults_major
PAGE_FAULTS_MINOR Page_faults_minor
SWAPS Swaps
SOURCE_FUNCTION Source_function
SOURCE_FILE Source_file
SOURCE_LINE Source_line



注意

INFORMATION_SCHEMA这个表的使用方式已经在mysql5.7.2已经标记废除了,在未来的版本将会彻底删除掉,SHOW的使用方式在未来的版本也会替代掉,替代使用方式为MySQL Performance Schema,具体的参考官网的使用:https://dev.mysql.com/doc/refman/5.7/en/performance-schema.html


以上profiling所有介绍翻译来源于官网,原版可以参考:https://dev.mysql.com/doc/refman/5.7/en/show-profile.html



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库主从和主备部署介绍

转自: https://www.cnblogs.com/fengzheng/p/13401783.html 数据库层的几种模式 在系统架构中,数据库层主要由如下几种模式,分别是单点模式、主备模式、主从模式。 单点模式 单点模式是最简单的模式,只有一台数据库服务器&…

lv官网编码查询_图文讲解,如何免费自主查询商标近似情况

每一个商业主体,都会给自己的企业、产品、服务注册一个好听的商标,但一个商标名并不是我们喜欢就可以,还要能够得到核准注册。为此,如何能判断出一个商标名是否能够被注册呢?这便需要利用商标的近似判断了(查询该商标名…

hashCode到底有什么用?

转载自 hashCode到底有什么用? hashCode概念 hashCode是jdk根据对象的地址算出来的一个int数字,即对象的哈希码值,代表了该对象在内存中的存储位置。 我们都知道hashCode()方法是顶级类Object类的提供的一个方法,所有的类都可以进…

MySQL、MongoDB、列数据库的区别及应用场景

目录什么是行存储和列存储?什么是MongoDB(NoSQL)?OLTP和OLAP什么是CAP定理?使用场景行存储的适用场景:列存储的适用场景:MongoDB相对于MySQL的优点更适用MySQL的场景更适用MongoDB的场景个人理解扩展参考什…

转-Redis AOF 持久化详解

转自: https://juejin.cn/post/6844903902991630349 Redis AOF 持久化详解 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是一旦进程退出,Redis 的数据就会丢失。 为了…

设计模式之动态代理模式实战

转载自 设计模式之动态代理模式实战 昨天分享了静态代理的概念及存在的缺点,所以今天讲的动态代理模式十分重要。动态代理在我们工作当中应用相当广泛,如Srping AOP就是动态代理的在开源框架的比较出名的应用。 动态代理有两种试,一是通过JD…

南理工计算机博士 年薪_计算机专业的女博士毕业后,进入211大学当讲师,年薪曝光...

现如今,对于很多年轻人来说,高学历就意味着高收入,大家在进入职场以后,通过高学历找到高薪的工作,能够在职场中少走很多弯路,他们在大公司能够跟很多的同事在一起勤快的合作,能够决定他们在以后…

MySQL优化(一):表结构优化

目录表优化数据类型的选择避免列的值为NULLVARCHAR和CHAR日期和时间类型选择标识符(主键)的类型错误的表结构一张表中有太多列太多的关联适当建立冗余数据混用范式和反范式建立缓存表和汇总表参考表优化 此文章用于记录《高性能MySQL》一书的知识点。 …

centos上安装redis

【README】 本文旨在阐述在linux上安装 redis 的步骤; 【1】具体步骤 step1) 把 redis 压缩包 上传到 /opt/software, 并解压 step2)打开 redis目录,执行 make, 若没有gcc编译器, 执行命令安装gcc&#…

设计模式之静态代理模式实战

转载自 设计模式之静态代理模式实战静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法。如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来,即在运行方法前后插入…

pandas追加写入excel_[Excel]如果你爱Excel,请学好pandas

现在坐办公室的各种大小团体里,都会有一个“懂Excel的人”,可能那个人是团体里的一员,也可能是和这个团队关系比较好的一个热心人,但总之,你的身边会有这么一个人。如果你环顾四周也没发现,那可能你就是那个…

转:Redis 集群搭建详细指南

转自: https://www.cnblogs.com/mafly/p/redis_cluster.html 【README】 非常棒的一篇文章,感谢作者的分享; 先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公…

快速排序算法思想及实现

简介 快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn) 基本思想 先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步&a…

作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VO

转载自 作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VOPOJO、PO、DTO、DAO、BO、VO这些概念作为Java开发来说应该全部或者部分遇到过,作为架构师的你想必更是清楚这些概念在不同场景的应用。下面我逐一介绍一下,想必…

搭建redis集群

【README】 redis集群搭建有很多坑儿,注意; 【1】坑er 集合 坑儿1、 [ERR] Sorry, cant connect to node 192.168.163.203:6381 报错现场:执行如下命令新建集群,报错如下; /usr/local/redis-cluster/bin/redis-t…

怎么看cudnn的版本好_针对此次版本削弱,怎么用好嫦娥!

大招的费蓝 & 蓝量伤害比 (先把嫦娥的冷门知识点放置顶,干货感比较重要)嫦娥100%蓝时,所有造成的伤害均要2倍,蓝量每下降1%,伤害倍数就下降2%。即嫦娥在50%蓝的时候,伤害就不加倍了。嫦娥最…

设计模式(一):工厂方法

目录概括目的主要解决何时使用使用场景总结三种工厂模式的对比代码示例概括 定义一个用于创建对象的接口,让子类决定实例化哪一个类。使用特殊的工厂方法代替对于对象构造函数的直接调用(即使用 new运算符,工厂方法 使一个类的实例化延迟到其…

mysql查询优化explain命令详解

转载自 mysql查询优化explain命令详解mysql查询优化的方法有很多种,explain是工作当中用的比较多的一种检查方式。explain翻译即解释,就是看mysql语句的查询解释计划,从解释计划我们能很清楚的看到解释的语句有没有合理用到索引,扫…

sftp工具都有哪些_学霸们都在用哪些科研工具?

这是 社科学术圈 推送的第1677篇文章学者论文哪里找?论文怎么写?会用到哪些工具?本期将带来有助于提高论文写作效率的一些资料,包括OA论文、思路整理、词典类、制图工具类、文献生成类等方面。OA论文平台1. PMC(Pubmed Cenral)Pub…

redis集群搭建报错-(error) CLUSTERDOWN The cluster is down

【README】 最近搭建一个redis集群,参考博文 (https://www.cnblogs.com/mafly/p/redis_cluster.html) 对集群配置后,master, slave 也启动起来,但无法插入数据; 【1】报错信息; [r…