分析
SET STATISTICS TIME ON
your sql
SET STATISTICS TIME OFF
由上图分析:
cpu time 是查询执行时占用的 cpu 时间。如果了解系统的多任务机制,就会知道系统会将整个 cpu 时间分为一个一个时间片,平均分配给运行的线程——一个线程在 cpu 上运行一段时间后,将 cpu 切换给另一个线程运行,从而实现多任务处理。cpu time 实际上可以理解为查询实际在 cpu 上运行的时间。
elapsed time 是查询实际执行的时间。
其他比较指令:
set statistics io on
set statistics io off
set statistics profile on
set statistics profile off
显然,在 cpu 负担很重的环境中,通常 cpu time 会小于 elapsed time;而在 cpu 负担较轻的环境中,通常 cpu time 会等于 elapsed time;在有多个 cpu,且查询的执行计划为并行计划时,通常 cpu time 会大于 elapsed time(因为查询在多个 cpu 上同时运行)。
Elapsed Time
Elapsed Time表示程序运行的持续时间。
CPU Time
CPU Time是该进程所占用的处理器时间。
对于单线程程序来说,CPU Time指的是该线程在一个逻辑处理器上所花费的时间总量。
对于多线程程序来说,CPU Time指的是所有线程在处理器上花费的时间之和。
User CPU Time
User CPU Time指进程执行用户态代码所使用的时间,是执行此进程所消耗的实际CPU时间。
System CPU Time
System CPU Time指进程在内核态消耗的CPU时间,即在内核执行系统调用所使用的CPU时间。
Wait Time
Wait Time是CPU花费在等待I/O操作上的总时间。
Elapsed Time、CPU Time、Wait Time的关系
在单核处理器的情况下,Elapsed Time = Cpu Time + Wait Time。
在多核处理器的情况下,由于多个CPU同时处理任务所以可能会出现Cpu Time 大于Elapsed Time 的情况。