閾值是 WLM 執行管制的執法者,分兩類:
ESTIMATEDSQLCOST (優化器成本)、ESTIMATEDCARDINALITY,執行前攔截失控查詢。ACTIVITYTOTALTIME、TEMP_TABLESPACE_USAGE、ROWS_RETURNED、UOWELAPSEDTIME、UOWIDLETIME,執行中動態熔斷。動作選項:STOP EXECUTION (硬停)、CONTINUE (僅收集診斷資料)、REMAP ACTIVITY (降級至低優先權子類)、FORCE APPLICATION (踢離連線)。
起始建議:
CREATE THRESHOLD QUEUE_LOW_PRIO
FOR SERVICE CLASS LOW_PRIO UNDER POWER
ACTIVITIES ENFORCEMENT DATABASE
WHEN CONCURRENTDBCOORDACTIVITIES > 20
CONTINUE;
視實際負載動態調整。刪除閾值須先 ALTER THRESHOLD ... DISABLE 再 DROP。
CREATE THRESHOLD HIGH_COSTS
FOR SERVICE CLASS LOW_PRIO UNDER POWER ACTIVITIES
ENFORCEMENT DATABASE
WHEN ESTIMATEDSQLCOST > 50000000
COLLECT ACTIVITY DATA WITH DETAILS AND VALUES
STOP EXECUTION;
僅針對低優先權類,避免誤傷核心業務。高優先權類可設較寬鬆閾值或僅 CONTINUE 記錄。
CREATE THRESHOLD TOO_LONG
FOR SERVICE CLASS POWER ACTIVITIES
ENFORCEMENT DATABASE
WHEN ACTIVITYTOTALTIME > 60 MINUTES
COLLECT ACTIVITY DATA WITH DETAILS AND VALUES
STOP EXECUTION;
注意:排隊等待時間包含在 ACTIVITYTOTALTIME 內。
LOAD 極度消耗記憶體 (UTIL_HEAP_SZ / DATA BUFFER)。建立專屬 Work Class 並在 Database 層級限制並發 = 1:
CREATE WORK CLASS SET LOAD_TYPE (WORK CLASS LOAD_WC WORK TYPE LOAD);
CREATE WORK ACTION SET CONTROL_LOAD FOR DATABASE
USING WORK CLASS SET LOAD_TYPE (
WORK ACTION LIMIT_LOAD ON WORK CLASS LOAD_WC
WHEN CONCURRENTDBCOORDACTIVITIES > 1 CONTINUE
);
狀態查詢:WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES 中 WORKLOAD_OCCURRENCE_STATE 顯示 QUEUED/UOWWAIT/UOWEXEC。
CREATE THRESHOLD MONITOREVENT
FOR DATABASE ACTIVITIES ENFORCEMENT DATABASE
WHEN ACTIVITYTOTALTIME > 5 MINUTES
COLLECT ACTIVITY DATA ON ALL WITH DETAILS AND VALUES
CONTINUE;
CREATE THRESHOLD ACTIVCOST
FOR SERVICE CLASS HIGH_PRIO ACTIVITIES ENFORCEMENT DATABASE
WHEN ESTIMATEDSQLCOST > 10000
COLLECT ACTIVITY DATA ON ALL WITH DETAILS AND VALUES
CONTINUE;
同類型多閾值僅觸發一個,避免重複收集。
CREATE EVENT MONITOR WLM_EVENT FOR ACTIVITIES WRITE TO TABLE
ACTIVITY (TABLE WLM_EVENT IN MONITOR_TS),
ACTIVITYSTMT (TABLE WLM_EVENT_STMT IN MONITOR_TS),
ACTIVITYVALS (TABLE WLM_EVENT_VALS IN MONITOR_TS),
CONTROL (TABLE WLM_EVENT_CONTROL IN MONITOR_TS);
SET EVENT MONITOR WLM_EVENT STATE 1;
SELECT SUBSTR(APPL_ID,1,26), SUBSTR(CHAR(ACTIVITY_ID),1,10), SUBSTR(APPL_NAME,1,10),
SUBSTR(ACTIVITY_TYPE,1,10), TIMESTAMPDIFF(2,CHAR(TIME_COMPLETED-TIME_STARTED)) AS TOTALTIME,
SQLCODE, SUBSTR(SESSION_AUTH_ID,1,8), SUBSTR(SERVICE_SUBCLASS_NAME,1,20)
FROM WLM_EVENT
WHERE PARTITION_NUMBER=CURRENT DBPARTITIONNUM
ORDER BY TOTALTIME DESC FETCH FIRST 10 ROWS ONLY;
WLM_EVENT_STMT 依 APPL_ID, ACTIVITY_ID, UOW_ID。PARTITION_NUMBER 找出資料傾斜分區。Hard Max 雖保證高優先權 CPU,但低優先權在系統閒置時也被壓制,資源浪費。解法:後台腳本每秒 wlmstat 1 監控高優先權類 CPU 使用率,動態調整低優先權 hardmax:
hardmax=1% (嚴格限制)hardmax=100% (完全釋放)# auto_tune.sh (root 執行)
wlmstat 1 | gawk -f compute.awk | while read NEWCPUA NEWCPUB; do
chclass -a inheritance=no -c hardmax=${NEWCPUA} Power.HighPrio
chclass -a inheritance=no -c hardmax=${NEWCPUB} Power.LowPrio
wlmcntrl -ud db2workload
done
# compute.awk
BEGIN{prev=0}
/High/{prev=$2; next}
/Low/{
if (prev=="-" || prev=="0") print "100 100";
else print "100 1";
fflush()
}
實測:特殊查詢從 312s 降至 138s (接近獨佔 120s),低優先權 Q18 僅延遲 100s (1134→1233s)。DPF 環境每節點獨立部署腳本。

| 維度 | Query Patroller + Governor | DB2 WLM |
|---|---|---|
| 角色 | 守門員:放行後不再管 | 大廳監視器:全程管控資源與行為 |
| 可見性 | 僅佇列狀態、SQL、ApplHandle | 執行中即時狀態、代理、事件 |
| 管控範圍 | 協調器層級 | 所有分區、全生命週期 |
| 資源控制 | 無 | CPU、I/O、並發、記憶體、優先權 |
| 持久化 | 全寫控制表 (磁碟) | 僅事件監控器要求時寫入 |
| 監控粒度 | 僅細粒度 | 細粒度 + 聚合統計 |
SYSDEFAULTUSERCLASS) 仍可由 QP 管理,新業務逐步遷移至 WLM 自訂服務類,風險可控。
DB2 WLM 以「服務類優先權」為核心,「工作負載/動作集」為分流手段,「閾值」為安全網,「事件監控器」為可觀測基礎,構建完整的工作負載治理體系。配合 AIX WLM Hard Max 動態調優,可在保證核心業務 SLA 前提下最大化資源利用率。升級之路不在工具遷移,而在重新審視業務優先權與資源分配策略。