第五十八章 使用 ^BLKCOL
监视块冲突
当一个进程被迫等待访问一个块时,就会发生块冲突。过多的块冲突会降低应用程序性能。
Using ^BLKCOL
在 IRIS®
数据平台中,^BLKCOL
实用程序对指定时间段(默认为 10
秒)内的块碰撞进行采样,记录这段时间内指定时间间隔(默认为 10
毫秒)内的最新块碰撞。对于每个记录的冲突,^BLKCOL
不仅标识块,还标识涉及的全局及其在块中的第一个和最后一个引用,以及创建试图访问块的进程的例程和行。
注意:irisstat -D
选项,如本指南附录“使用 irisstat
实用程序监视 IRIS
”中的使用选项运行 irisstat
中所述,也对块冲突进行采样,但仅识别涉及的块。
irisstat -D
的输出包含在 ^SystemPerformance
实用程序生成的报告中,如本指南的使用 ^SystemPerformance
监控性能一章所述。
运行 ^BLKCOL
时,可以指定以下内容:
- 采样周期的长度(以秒为单位)
- 采样之间的间隔(以毫秒为单位)
- 是否收集例程详细信息(默认为是)
是否将输出格式化为:
- 具有最高冲突计数的块列表(默认)
- 涉及的所有块的列表
in collisions
- 来自检测到的所有块碰撞的逗号分隔值,按块编号和例程排序和计数
- 来自所有检测到的块碰撞的逗号分隔值,未排序(
RAW
) - 例程中的碰撞热点列表
- 要显示的块数(如果适用)
- 是否将输出发送到文件
^BLKCOL Ouputend
输出到文件
^BLKCOL
实用程序的使用显示在以下示例终端会话中:
%SYS>do ^BLKCOL Block Collision Analysis How many seconds should we sample: <10> How long to wait (ms) between each sample: <10> Collect routine details? <Y> Format for 'T'op counts, 'D'isplay all, 'S'orted CSV, 'H'ot spot, or 'R'aw CSV: <T> Number of blocks to display: <10> Output to file: <0> Sampling ... (any key to interrupt) 625 block collisions in 735 samples. Block # (count) - Global refs (first - last in block) - Routine refs (SFN) 767 (395) in c:\InterSystems\iris\mgr\user\ ^acctest - ^acctest(10220," 167") (T/BPtr) 325 at ^AccessTest+156(4) 25 at ^AccessTest+121(4) 24 at ^AccessTest+92(4) 8 at ^AccessTest+109(4) 8 at ^AccessTest+127(4) 4 at ^AccessTest+170(4) 1 at ^AccessTest+163(4) 3890 (11) in c:\InterSystems\iris\mgr\user\ ^acctest(2552," 371") - ^acctest(2552," 38") (Data) 6 at ^AccessTest+164(4) 3 at ^AccessTest+163(4) 1 at ^AccessTest+134(4) 1 at ^AccessTest+156(4) 15572 (9) in c:\InterSystems\iris\mgr\user\ ^acctest(6980," 4795") - ^acctest(6988," 3259") (Data) 7 at ^AccessTest+134(4) 1 at ^AccessTest+164(4) 1 at ^AccessTest+170(4) 15818 (8) in c:\InterSystems\iris\mgr\user\ ^acctest(9124," 173") - ^acctest(9124," 1743") (Data) 5 at ^AccessTest+164(4) 3 at ^AccessTest+170(4) 971 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(484," 3927") - ^acctest(484," 3938") (Data) 5 at ^AccessTest+170(4) 2 at ^AccessTest+164(4) 1137 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(756," 4063") - ^acctest(756," 4073") (Data) 3 at ^AccessTest+109(4) 2 at ^AccessTest+134(4) 1 at ^AccessTest+156(4) 1 at ^AccessTest+163(4) 2999 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(2092," 666") - ^acctest(2092," 674") (Data) 3 at ^AccessTest+170(4) 1 at ^AccessTest+109(4) 1 at ^AccessTest+121(4) 1 at ^AccessTest+134(4) 1 at ^AccessTest+164(4) 6173 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(3684," 528") - ^acctest(3684," 536") (Data) 3 at ^AccessTest+163(4) 1 at ^AccessTest+109(4) 1 at ^AccessTest+156(4) 1 at ^AccessTest+164(4) 1 at ^AccessTest+170(4) 14617 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(9688," 18") - ^acctest(9688," 26") (Data) 4 at ^AccessTest+170(4) 2 at ^AccessTest+164(4) 1 at ^AccessTest+134(4) 15282 (7) in c:\InterSystems\iris\mgr\user\ ^acctest(8700," 4889") - ^acctest(8760," 1402") (Data) 4 at ^AccessTest+170(4) 3 at ^AccessTest+164(4) %SYS>d ^BLKCOL Block Collision Analysis How many seconds should we sample: <10> How long to wait (ms) between each sample: <10> Collect routine details? <Y> Format for 'T'op counts, 'D'isplay all, 'S'orted CSV, 'H'ot spot, or 'R'aw CSV: <T> H Number of blocks to display: <10> Output to file: <0> Sampling ... (any key to interrupt) 571 block collisions in 768 samples. Sorted by routine/line that waits for block ownership _____________________________________________________ (571) AccessTest (324) +156^AccessTest : s @G@($J,node)=$$getdata($E(Str,1,$r(1000))) ;SMLXXX+, AFH (54) +164^AccessTest : k @G@($J,node) (43) +134^AccessTest : . k @G@($J,node) (31) +92^AccessTest : . . k @G@($j) (28) +109^AccessTest : . s x=$O(@G@($J,x)) Sorted by routine that owns the block _____________________________________ (472) AccessTest (472) +AccessTest