最佳執行緒數目

在多個執行緒中執行單一背景處理的速度,幾乎一定會高於在單一執行緒中執行相同背景處理的速度。而訣竅在於決定最適合每個處理的執行緒數目。

請注意:從我們的經驗來看,每 100 MHz 的應用程式伺服器 CPU 就可以使用一個執行緒。例如,如果應用程式伺服器上有 4 個 450 MHz 的處理器,您就可以從 18 個執行緒開始測試:(450 * 4) / 100 = 18。

這是我們的經驗談,因為每個處理都是不一樣的,且都視您資料庫中資料的不同而有差異。此外,您的硬體組態 (也就是處理器的數量、硬碟的速度、資料庫伺服器與應用程式伺服器之間的網路傳輸速度) 也會影響最佳執行緒數目。請依照下列指導方針,來決定每個背景處理的最佳執行緒數目:

  • 請利用 (上述) 依照經驗法則所指定的執行緒數目來執行背景處理。然後請在執行期間,監視應用程式伺服器、資料庫伺服器,以及網路流量的使用量百分比。

  • 如果您發現資料庫伺服器的使用量達到 100%,但應用程式伺服器卻沒有,那可能是發生了下列其中一種情況:

    • 在處理期間,某個 SQL 陳述式的執行可能出了問題。您必須擷取資料庫追蹤來找出有問題的 SQL。

    • 也有可能是您的確認頻率太大。確認頻率是提供給每個背景處理的參數。如果確認頻率太大,資料庫的保存佇列可能就會開始交換。如需深入瞭解此參數,請參閱提供給背景處理的參數

  • 如果您發現應用程式伺服器的使用量達到 100%,但資料庫伺服器卻沒有,這是正常的。因為一般來說,所有處理都受限於 CPU,而非受限於 IO。此時您應該要減少執行緒數目,直到應用程式伺服器的使用量稍微低於 100% 為止。而這就會是此背景處理需要的最佳執行緒數目。

  • 如果您發現應用程式伺服器的使用量沒有達到 100%,請增加執行緒數目,直到應用程式伺服器的使用量稍微低於 100% 為止。請記住,務必要讓應用程式伺服器的使用量先達到 100%,再讓資料庫伺服器的使用量達到 100%。如果情況不是這樣,可能是某個 SQL 陳述式出了問題,而您必須擷取 SQL 追蹤來判斷問題的源頭。

還有另一個方法能讓您獲得類似的結果,那就是先從少量的執行緒開始,然後增加執行緒數目,直到處理量達到最大為止。每個處理對於「處理量」的定義可能都不相同,但廣義來說,就是在批次執行樹狀目錄中處理的記錄數目。例如,在 Oracle Utilities Customer Care and Billing 的「計費」背景處理中,處理量就是每分鐘處理的帳單數目。如果您選擇使用此方法,建議您製作比較處理量與執行緒數目的曲線圖。該圖表的曲線應該一開始會很陡峭,然後會隨著執行緒的數量越來越多而趨於平坦。但增加更多的執行緒最終會造成處理量下降。您可以藉由這種分析,來判斷在執行任何處理時的最佳執行緒數目。