動態控制活動的三大存儲程序
| 程序 | 用途 | 參數 |
WLM_CANCEL_ACTIVITY | 取消正在執行或排隊的活動 | (application_handle, uow_id, activity_id) → 返回 SQL4725N |
WLM_CAPTURE_ACTIVITY_IN_PROGRESS | 即時擷取活動詳細資訊送事件監視器 | (application_handle, uow_id, activity_id) |
WLM_COLLECT_STATS | 收集並重設 WLM 物件統計(送活動統計事件監視器) | () |
所需識別碼可透過 WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES 表函數取得。
實戰示範:取消失控大查詢
視窗 1(管理員)查詢活動識別碼
db2 -tvf get_wkld_activities.txt
SELECT t.application_handle, t.uow_id, t.activity_id, t.activity_type,
t.activity_state, t.local_start_time
FROM TABLE(WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES(CAST(NULL AS BIGINT), -2)) t
ORDER BY t.local_start_time;
-- 結果範例
APPLICATION_HANDLE UOW_ID ACTIVITY_ID ACTIVITY_TYPE ACTIVITY_STATE LOCAL_START_TIME
80 7 1 READ_DML EXECUTING 2008-01-02-17.01.25
81 10 1 READ_DML EXECUTING 2008-01-02-17.01.32
視窗 1 呼叫取消程序
db2 "call WLM_CANCEL_ACTIVITY(80, 7, 1)"
-- 返回狀態 = 0
視窗 2(執行大查詢的用戶)收到錯誤
SQL4725N 已取消該活動。 SQLSTATE = 57014
工作類(Work Class):依活動類型與成本分類
| 工作類型 | 涵蓋語句 |
| READ | 純 SELECT/SELECT INTO/VALUES INTO/XQuery(無 DML) |
| WRITE | UPDATE/DELETE/INSERT/MERGE/含 DML 的 SELECT/XQuery |
| DML | READ + WRITE 所有語句 |
| DDL | ALTER/CREATE/COMMENT/DROP/FLUSH PACKAGE CACHE/GRANT/REVOKE/RENAME/SET INTEGRITY 等 |
| CALL | CALL 語句 |
| LOAD | LOAD 作業 |
| ALL | 以上任意類型 |
建立工作類集與工作類
create work class set myquery (
work class smallQuery work type dml for timeroncost from 1 to 1000,
work class mediumQuery work type dml for timeroncost from 1000 to 100000,
work class largeQuery work type dml for timeroncost from 100000 tounbounded
);
timeroncost:優化器估算成本單位,結合 CPU 指令數與 I/O 掃描,非實際秒數。
- 三級劃分:小型(≤1000)、中型(1000-100000)、大型(>100000)。
工作動作集與工作動作:觸發管控行為
create work action set MYWORKACTION for database using work class set MYQUERY (
work action smallQueryAction on work class smallQuery count activity,
work action mediumQueryAction on work class mediumQuery
collect activity data with details and values,
work action largeQueryAction on work class largeQuery
when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution
);
動作語意解析
- smallQueryAction:
count activity → 該類別活動運行時計數器累增。
- mediumQueryAction:
collect activity data with details and values → 活動完成後送事件監視器,含 SQL 文本、編譯環境、輸入參數值。
- largeQueryAction:
when concurrentdbcoordactivities > 1 and queuedactivities > 1 stop execution → 並發協調器活動 >1 時排隊,排隊活動再 >1 時直接阻止執行(返回 SQL4712N)。
驗證測試:並發大查詢觸發阻擋
- 視窗 1、2、3 同用戶並發執行大查詢(6 張
project 表聯結)。
- 視窗 1、2 正常完成;視窗 3 報錯:
SQL4712N 已超過閾值 ... 原因碼 = 6(排隊活動 >1 被阻擋)。
WLM 總結:為何需要工作負載管理?
- 資源隔離與優先級:將不同業務工作映射至獨立服務類,分配 CPU/I/O 權重,避免流氓查詢佔滿資源。
- 可預測性:預先定義閾值(執行時間、暫存表空間、並發數等),違規自動採集資訊或取消。
- 平滑尖峰:高峰期透過排隊、優先級調度保障核心業務 SLA。
- 即時可觀測:大量表函數(如
WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES、WLM_GET_WORK_ACTION_SET_STATS)動態掌握活動分布與資源爭用。