表示式佇列調整

表示式引擎可能需要根據伺服器資源、表示式計數以及每個安裝的複雜性來加以調整。通常,此程序會涉及每次針對一個參數反覆地調整及測量效能,直至無法再提高效能。在此過程中,必須維護記錄追蹤。如果變更了硬體、用量及設定,則需要進行新的調整。
作為管理者,必須針對每個安裝,檢查下列應用程式設定:
表 1. 表示式佇列調整應用程式設定
設定 單位 預設值 執行時期* 說明 調整提示
formula.queue.maxage 小時 24 會保留表示式佇列歷程的小時數上限(不保證)。僅會刪改執行表示式。此動作是透過公式清理工作來完成。 在公式佇列表格中執行的佇列項目,會保留為執行歷程。這項歷程會用來檢查執行迴圈及產生統計資料。如果不需要統計資料, 則可以將高傳輸量設定中的這個數字變低,以縮小表格大小。請不要將這個值設為零,因為適當的迴圈檢查至少需要一個小時的歷程。
formula.queue.maxsize 項目 500000 表示式佇列中所需的項目數上限。清理工作會刪改歷程,以嘗試使項目計數低於此數目。僅會刪改執行表示式。這會置換 formula.queue.maxage 設定。 可以減少這個數目,以便在高負載期間縮小公式佇列大小, 除此之外則儲存歷程。此數目的理想近似值,是維持在略低於 formula.queue.maxage 期間內的平均傳輸量。
formula.execution.batch.size 項目 30 在每輪配置中,為一個執行緒配置的表示式佇列項目數。這些項目會標示為「已啟動」。執行緒會執行這些項目,並在配置新的批次之前完成它們。

這是一個重要的設定。背景資訊:表示式會同時在數個節點的數個執行緒上,以任意的順序並行執行, 但一律會遵循具有相依關係的時間順序。例如,如果佇列上的兩個表示式互不相關,則其執行順序可能會不同於其新增順序。因此,如果有表示式項目的實例,或是項目的值與其相依,且尚未在其之前執行,則該表示式項目可能不會執行。這種情況以及並行性需要加以配置,以避免衝突、順序錯誤及冗餘的工作。

由於配置是一項耗時的作業,因此具有上述需求且需要依給定順序執行的數個表示式會一起配置。如果配置大量表示式,則會節省配置費用,但會「鎖定」並行性,反之亦然。一般規則是在表示式形成較長相依關係鏈時減小此數字,而在相依關係鏈較短或相依關係較少時增加此數字。您可以在執行時期變更此值,因此應該持續調整此值,直至找到合理的最佳值為止。小於 10 或超過 200 的值,一般都不是最佳值。

formula.cleanup.interval 毫秒 1800000 清理表示式佇列的頻率。這是強制施行 maxage 和 maxsize 的位置。通常只會進行佇列刪改。第一次清理是在伺服器啟動時進行,此時會執行特殊維護。此外,每兩週會執行一次計時器表示式完整性檢查(在晚上)。 預設值通常是合理的。如果傳輸量較高,清理需要較長時間,應該更加頻繁地執行清理,反之亦然。請謹防將此時間增加過多,因為如果負載突然大幅增加(例如,在匯入或新增屬性之後),這會導致執行暫停或效能欠佳。
formula.background.interval 毫秒 10000 檢查表示式佇列中等待執行的未配置新表示式的頻率。當某個批次完成時,便會立即執行新的檢查,而不會等待此間隔時間。如果佇列在到達下一個間隔時仍包含未評估的項目,則會產生一個新的工作程式執行緒,以提高處理能力。 在舊版 Rational® Focal Point™ 中,採用的是非同步即時執行方式。將表示式移至資料庫時,這難免會發生死鎖的風險。這是檢查表示式佇列中是否有要執行的新表示式的間隔,也就是使用者必須等待 (read: refresh) 表示式執行完畢的時間上限(以及執行時間)。如果沒有項目,則輪詢未評估的佇列項目並不耗時,因此時間可能會很短。不過,如果間隔太短,則會不必要地耗用資源。這也會影響並行性的遞增。如果在前一個間隔時間發動的工作程式執行緒未在該間隔內完成,則會啟動另一個執行緒(直到 thread.per.nodes)。如果遞增太慢, 或如果需要較低的評估延遲,則您可能要降低這個數字。如果很少使用表示式,您可以略微增加此數字。
formula.max.background.threads.per.node 計數 2 為每個節點執行表示式的並行執行緒數目上限。實際數目上限將會動態地取決於應用程式執行緒儲存區中是否有可用的執行緒。 如果有更多的工作要執行,則在 background.interval 中所述的並行性遞增,會增加每個間隔內在節點上的表示式評估執行緒數目。這需要應用程式執行緒儲存區中存在可用的執行緒,而可用的執行緒會根據 CPU 核心數目(虛擬或實體)自動調整。它還會限制為不耗用儲存區中的最後一個執行緒。您可以實驗這個數字。這並不保證能獲得更佳效能,因為它主要取決於資料庫保持相應的並行性能力。如果佇列中經常有未評估的表示式,且資料庫負載很低,則表示此值過低。
formula.cleanup.enabled 布林 true 依預設會啟用表示式佇列清理。除了要進行除錯或在執行效能測量時必須取消清理以外,切勿停用佇列清理。 這項設定不會進行任何調整。 請不要變更它。請保留預設值 "true"。

* 執行時期指出應用程式設定是會在執行時期期間生效(以「是」表示), 還是只在啟動時生效(以「否」表示)。


建議與意見