如何对DSQLSERVER、MySQL、Orache语句性能分析

SQLSERVER语句性能分析

SQL SERVER通过设置 STATISTICS 查看执行SQL时的系统情况。

SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。 

SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。 

SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件。 

使用方法:打开SQL SERVER 查询分析器,输入以下语句: 

SET STATISTICS PROFILE ON 
SET STATISTICS IO ON 
SET STATISTICS TIME ON 
GO /*--你的SQL脚本开始*/
SELECT [TestCase] FROM [TestCaseSelect] 
GO /*--你的SQL脚本结束*/
SET STATISTICS PROFILE OFF 
SET STATISTICS IO OFF 
SET STATISTICS TIME OFF

MySQL语句性能分析

SHOW PROFILES  /*查看SQL耗时情况,用于分析SQL性能*/

SHOW PROFILE[type[,type]...]  /*查看SQL语句资源消耗情况,type见下面type说明*/

[FOR QUERY n]  /*查询指定语句ID为n的情况,ID为SHOW PROFILES查询出语句的Query_ID*/

[LIMIT row_count[OFFSET offset]] 

上面type可以是:

  • ALL          所有信息
  • BLOCK IO     模块I/O操作次数
  • CONTEXT SWITCHES 上下文切换数
  • CPU          用户CPU使用情况
  • IPC          发送和接收消息的数量
  • MEMORY       内存使用情况
  • PAGE FAULT   页面错误量
  • SOURCE       源码中的函数名称与位置
  • SWAPS        SWAP次数

Oracle语句性能分析

Autotrace  /*SQLPLUS的AutoTrace是分析SQL的执行计划,执行效率的工具*/

用法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

SET AUTOT[RACE] ON   /*开启AutoTrace,显示AUTOTRACE信息和SQL执行结果*/

|SET AUTOT[RACE] TRACEONLY  /*开启AutoTrace,仅显示AUTOTRACE信息*/

|SET AUTOT[RACE] ON EXPLAIN  /*开启AutoTrace,仅显示AUTOTRACEEXPLAIN信息*/

|SET AUTOT[RACE] ON STATISTICS /*开启AutoTrace,仅显示AUTOTRACESTATISTICS信息*/

/*执行的SQL语句*/

SET AUTOT[RACE] OFF  /*停止AutoTrace*/

结果列说明:

recursive calls  /*递归调用-执行SQL的时候的产生的递归调用的数量,这个参数和访问数据字典的次数有很大的关系。一般来说,这个参数值不会很大。*/

db block gets /*DB块取-在发生INSERTDELETEUPDATESELECT FOR UPDATE的时候,数据库缓冲区中的数据库块的个数。在SELECT语句中一般为0。*/

consistent gets /*一致性读-除了SELECT FOR UPDATE的时候,从数据库缓冲区中读取的数据块的个数*/

physical reads /*物理读*/

redo size /*重做日志大小-执行SQL的过程中,产生的重做日志的大小*/

bytes sent via SQL*Net to client /*通过sql*net发送给客户端的字节数*/

bytes received via SQL*Net from client /*通过sql*net接受客户端的字节数*/

sql*net roundtrips to/from client /*See how setting the arraysize affects SQL*Net roundtrips to/from client.*/

sorts(memory) /*在内存中发生的排序*/

sorts(disk) /*不能在内存中发生的排序,需要硬盘来协助*/

rows processed /*结果记录数*/

set timing on; /*在SQPPLUS中得到语句总执行的时间,显示时间单位为:毫秒*/



留言