查询性能分析(执行结果分析)
1
、方法
在查询窗口中输入以下命令
dbcc dropcleanbuffers
--
注释:清除数据
dbcc
freeproccache
--
注释:清除缓存
这是为了每次查询时,不会因为重复查询对结果有干扰,接着在窗口中输入以下命令。
Set statistics io on
--
注释:开启系统资源使用统计
Set statistics time on
--
注释:开启执行时间统计
然后在窗口中输入查询命令
如:
SELECT TOP 1000000 * FROM [SearchInfo]
在消息框中就会出现如下结果
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
(999999 row(s) affected)
Table
'SearchInfo'.
Scan
count
1,
logical
reads
17890,
physical
reads
29,
read-ahead
reads
17309, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 2153 ms,
elapsed time = 22354 ms.
2
、参数
SQL Server parse and compile time
这是指
sql server
解析语句的时间。
(999999 row(s) affected)
查询到的数据量,这个你知
道咯,
只要你的目的是明确的,
那么查询到的数据量应该是不变的,如果改变,那么你的逻
辑是不一致的对不对!
Table
'SearchInfo'.
Scan
count
1,
logical
reads
17890,
physical
reads
29,
read-ahead
reads
17309, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
这一串表示什么呢,
表示数据表
'SearchInfo'
,
扫描
1
次
(
Scan count
)
在逻辑区读取了
17890
次
(
logical reads
)
在物理区读取了
29
次(
physical reads
)提前读取
17309
次(
read-ahead reads
)
lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
100
万条数据全都是
0
,你懂的,忽略它吧
那这串数据中没被忽略的哪些有用呢,
表的扫描次数
Scan count
有用的,
查询次数的多
少表示这个资源你用了多少次,
逻辑区读取次数非常有用,
我们知道,
SQL Server
在可以对
任何数据进行操作前,
必须首先把数据读取到其数据缓冲区中。
此外,
我们也知道
SQL Server
何时会从数据缓冲区中读取数据,并把数据读取到大小为
8K
字节的页中。
Logical Reads
是
指
SQL
Server
为得到查询中的结果而必须从数据缓冲区读取的页数。在执行查询时,
SQL
Server
不会读取比实际需求多或少的数据,因此,当在相同的数据集上执行同一个查询,得
到的
Logical Reads
的数字总是相同的。
物理区读取咱忽略它吧,为什么呀?
SQL Server
在执行查询时所需要的物理区读取次数不可能通过性能调节而减少的。
减少
物理读的次数是
DBA
的一项重要工作,但它涉及到整个服务器性能的调节,而不仅仅是查
询性能的调节。
在进行查询性能调节时,
我们不能控制数据缓冲区的大小或服务器的忙碌程