第五十一章 Caché 函數大全 $PREFETCHON 函數 第五十一章 Caché 函數大全 $PREFETCHON 函數 大綱 描述 參數 示例

第五十一章 Caché 函數大全 $PREFETCHON 函數

爲指定的全局設置預取。

大綱

$PREFETCHON(gref,gref2)

參數

  • gref 可選-全局變量引用。
  • gref2 可選-用於建立範圍的全局變量引用。

描述

$PREFETCHON通過爲全局或一系列全局打開預取來提高性能。$PREFETCHON返回1,表示成功完成(預取已啓用)。$PREFETCHON返回0,表示無法建立所需的預取。如果指定的範圍包含兩個不同的全局名稱,或者如果存在阻止預取的其他問題,則可能會返回0。返回的0不是錯誤;它不會中斷程序執行,並且指定範圍內的全局引用的處理不會受到影響。這僅僅意味着這些全局操作沒有預取的性能提升。

注意:遠程數據庫不支持預取全局。

$PREFETCHOFF關閉預取。

$PREFETCHON有兩種形式:

  • $PREFETCHON(gref)預取gref節點及其所有後代。例如,$PREFETCHON(^abc(4))預取^abc(4)的所有後代,例如^abc(4,1)^abc(4,2,2)等。它不會預取^abc(5)
  • $PREFETCHON(gref,gref2)預取gref到gref2範圍內的節點。這不包括gref2的後代。 gref和gref2必須是相同全局節點。例如,$PREFETCHON(^abc(4),^abc(7,5))預取^abc(4)^ abc(7,5)範圍內的所有全局節點,包括^ abc(4,2,2),^abc(5)和^abc(7,1,2)。但是,它不會預取^abc(7,5,1)

預取不限於讀取訪問權限;當執行大量SET操作時,它也能很好地工作。

預取和性能

調用$PREFETCHON時,將根據需要啓動一個或多個預取後臺進程(守護程序)。所有進程都在系統範圍內共享這些預取守護程序。因爲每個預取守護程序一次僅處理一個預取請求,所以在系統上運行多個預取守護程序通常是有利的。但是,大量併發的預取守護程序可能會對交互式系統訪問產生性能影響。

在運行從同一全局樹讀取包含節點的大量磁盤塊的應用程序時,預取可以提高性能。在以下情況下,預取是最有效的:

  • 數據通常以升序訪問,這意味着全局樹的數據塊通常以從左到右的順序訪問。但是,沒有嚴格遵守升序的要求。當通常按從左到右的順序訪問全局樹的數據塊時,或者在該範圍中的至少一個數據塊有可能在其大多數相鄰節點之前訪問之前,預取效果最佳。邏輯樹。
  • 訪問指定範圍內的大多數數據塊。但是,在用戶決定僅訪問一小部分數據後決定取消該操作的情況下,初始預取不會獲得與後續取回一樣多的塊。
  • 在任何給定時間,少於100個預取處於活動狀態。

參數

  • gref 全局引用,可以是全局引用,也可以是過程專用的全局引用。建立預取時無需定義全局。
  • gref2 用於與gref建立範圍的全局參考。因此,gref2必須是與gref在同一全局樹中較低的全局節點。

示例

以下示例爲全局^a建立預取。

/// d ##class(PHA.TEST.Function).PREFETCHON()
ClassMethod PREFETCHON()
{
    SET ^a="myglobal"
    SET x=^a
    SET ret=$PREFETCHON(^a)
    IF ret=1 { WRITE !,"prefetch established" }
    ELSE { WRITE !,"prefetch not established" }
    SET ret=$PREFETCHOFF()
}

DHC-APP>d ##class(PHA.TEST.Function).PREFETCHON()
 
prefetch established

以下示例爲全局^||a(1)^a||(50)。的範圍建立了預取。

/// d ##class(PHA.TEST.Function).PREFETCHON1()
ClassMethod PREFETCHON1()
{
    SET ret=$PREFETCHON(^||a(1),^||a(50))
    IF ret=1 { WRITE !,"prefetch established" }
    ELSE { WRITE !,"prefetch not established" }
}
DHC-APP>d ##class(PHA.TEST.Function).PREFETCHON1()
 
prefetch established
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章