川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

用explain和 profifile 分析SQL

作者:川石学院 日期:2021-11-24 16:05:12 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“用explain和 profifile 分析SQL”。

用explain和 profifile 分析SQL(图1)

  一、explain

  explain主要是用于分析我们执行的SQL语句,分析的信息主要包括:索引的使用、连接方式、是否全表扫描等相关信息。

  explain语法如下:

  explain 语句

  例如:

  EXPLAIN SELECT * FROM ecs_goods

  explaint执行的结果如下:

用explain和 profifile 分析SQL(图2)

  1.id

  •   表示执行语句的id号,只是用来标识SQL语句的,如果越小说明执行的SQL语句的优先级越高。

  2.select_type

  •   表示查询的子类型

  ---->SIMPLE:表示简单的查询语句,不包括任何子查询或者union语句

  ---->PRIMARY:如果查询语句中包含复杂子查询,那最外部的子查询会被标识为primary

  ---->UNION:表示查询语句包含链接的语句

  ---->DEPENDENT UNION:表示第二个或外部select使用union

  ---->UNION RESULT:表示链接的结果

  ---->SUBQUERY:表示包含子查询

  ---->DEPENDENT SUBQUERY:与SUBQUERY子查询意思相同

  3.table

  •   表示查询过程使用到的表名

  4.type

  1.   表示对表进行扫描的类型,通常包括的类型有:ALL、 index、range、ref、eq_ref、const、system、

  NULL

  ---->ALL:全表扫描,在进行查询的时间最不希望看到的是全表扫描

  ---->index:索引扫描,索引其实也是全表扫描,索引表一般都是进行排序过的

  ---->range:表示一个范围,指的索引表的范围

  ---->ref:表示关联的匹配条件是来自于一个索引列上的值,或者说一个固定值范围

  ---->eq_ref:表示取索引列中的值是唯一的

  ---->const:表示匹配的值是一个来自常量的值

  5.key

  •   表示使用到的关键字或关键列

  6.key_len

  •   表示索引列所占的字节数,这个这个值无法精确的计算,但是可以肯定是这个值越小越好,,说明执行语句时所消耗的PCU和IO的资源一定会更小。

  7.ref

  •   表示匹配条件时使用到的索引列

  8.rows

  •   表示匹配到的行数

  9.extra

  •   表示其它的相关信息

  二、 profifile

  profifile工具主要是用于分析SQL执行所消耗的响应时间和系统资源。

  查看profifille是否开启

  SHOW VARIABLES LIKE '%profil%'

  如果profiling的值为OFF,表示这个功能未开启

  那可以通过设置将这个功能开启

  set proiling = ON

  profifile的语法如下:

  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

用explain和 profifile 分析SQL(图3)

  for query -n表示只分析单个SQL语句,n表示query_id

  如果分析所有的检索语句

  show profilies

  分析结果中横栏各列表示的意思如下:

  ---->status:显示一条SQL语句在后面执行的整个过程

  ---->Duration:表示执行的时间

  ---->CPU_user:用户消耗CPU资源

  ---->CPU_system:系统消耗CPU资源

  ---->Context_voluntary:上下文主动切换

  ---->Context_involuntary:上下文被动切换

  ---->Block_ops_in:阻塞的输入操作

  ---->Block_ops_out:阻塞的输出操作

  ---->Messages_sent:消息发出

  ---->Messages_received:消息接受

  ---->Page_faults_major:主分页错误

  ---->Page_faults_minor:次分页错误

  ---->Swaps:交换次数

  ---->Source_function:源功能

  ---->Source_fifile:调用的源文件

  ---->Source_line:源代第多少行代码

  在分析所消耗的资源时,主要分析的对象包括CPU、Context_switch、IO三个指标

  •   Context switch表示上下文切换,上下文切换是指是CPU从一个进程(线程)切换到另一个进程(线程)。进程是正在执行的一个程序的实例,在Linux中,线程可以算作轻量级进程,线程可以并发执行,并且同一进程创建的线程可以共享同一片地址空间及其它资源,即该进程的进程地址空间及属于该进程的其它资源。

  通常以下情况会出上下文切换:

  1.nice的值的变化,导到上下文切换

  2.任务被系统强制挂起

  3.开发者强制进行上下文切换

  4.当IO阻塞,IO阻塞会导致IO不断的请求CPU资源,CPU必须不断进行上下文切换来解决阻塞的问题。

  当上下文切换变的很频繁时,一般就会导到CPU的使用率上升,原因是因为当上下文切换频繁后,CPU或者说任务必须在寄存器与cache中进行来回的工作与切换。

  监控上文切换的指标的相关命令:sar、vmstat、iostat

  分析结果中队中每行数据的含义:

  ---->initializtion:初始化

  ---->checking query cache for query:检查缓存查询

  ---->starting:开始

  ---->checking permissions:检查权限

  ---->Opening tables:打开表

  ---->init :初始化

  ---->System lock :系统锁

  ---->Table lock:表锁---->optimizing :优化

  ---->statistics:统计

  ---->preparing :准备

  ---->executing:执行

  ---->Sending data:发送数据

  ---->Sorting result:排序

  ---->end :结束

  ---->query end :查询 结束

  ---->closing tables :关闭表 /去除TMP 表

  ---->freeing items :释放物品

  ---->cleaning up :清理

今天关于“用explain和 profifile 分析SQL”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2021-11-24 16:05:12
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2021-11-24 16:05:12
  • 国外的月亮也不一定比国内测试猿的年薪美~2021-11-24 16:05:12
  • 建筑工程专业朱同学成功转行为软件测试人!2021-11-24 16:05:12
  • 财务管理专业转行软件测试月薪甩会计几条街!2021-11-24 16:05:12
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2021-11-24 16:05:12
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2021-11-24 16:05:12
  • 文科生转行软件测试照样拿下高薪15K!2021-11-24 16:05:12
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2021-11-24 16:05:12
  • 毕业1年,迷茫的他最终选择转行软件测试2021-11-24 16:05:12