一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“用explain和 profifile 分析SQL”。
一、explain
explain主要是用于分析我们执行的SQL语句,分析的信息主要包括:索引的使用、连接方式、是否全表扫描等相关信息。
explain语法如下:
explain 语句
例如:
EXPLAIN SELECT * FROM ecs_goods
explaint执行的结果如下:
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
表示对表进行扫描的类型,通常包括的类型有: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
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”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!