我想更好地了解时间日志以提高性能。
我的实际时间通常比cpu时间大得多。是预期的吗?
是否因磁盘访问而有所不同?内存操作是否包含在CPU时间内或实时中?
在日志的其他行中是否有关于性能优化的有用信息?
一个例子:
NOTE: PROCEDURE SQL used (Total process time):
real time 9:06.00
user cpu time 1:36.79
system cpu time 19.11 seconds
memory 7463.31k
OS Memory 24628.00k
Timestamp 06/07/2018 12:45:31 PM
Page Faults 7
Page Reclaims 1566
Page Swaps 0
Voluntary Context Switches 370694
Involuntary Context Switches 36835
Block Input Operations 0
Block Output Operations 0
答案 0 :(得分:2)
CPU时间是CPU处理的进度 - 使用了多少CPU时钟周期。这是每个核心;如果正在使用多个核心(虚拟或物理),它可能比实时更大。例如,CPU密集型并且与并行处理一起使用的东西使用机器上的4个核心2分钟,实时将是2分钟,CPU时间可能高达8分钟。
实时是作业开始和作业结束之间的时钟时间。在proc sql
的情况下,直到达到quit
- 所以如果您在没有退出的情况下保持proc sql
打开,则实际时间可能是您下次运行proc。
大多数时候,CPU时间和实时之间的差异就像你说的磁盘i / o一样 - 如果你通过网络或旋转磁盘读取,你的磁盘i / o可能需要更长的时间比你的CPU时间。
从内存中读取“文件”不包括在CPU时间中,除非涉及CPU。
其他字段有助于诊断不同级别的性能问题。使用的内存量可能表示您的代码存在特定问题(如果它使用大量内存,可能您执行的操作效率低下)。
您可能希望阅读一些关于SQL效率和优化的文章,例如Kirk Lafler's - 特别参见最后的_METHOD和_TREE讨论。当然,documentation中提到了获取更多信息的各种方法,例如STIMER和FEEDBACK。