第五十八章 使用 ^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