大型系統常需管理系統資源與負載。DB2 V9.5 引入 Workload Management (WLM),整合替代了 Governor 與 Query Patroller。但 DB2 WLM 缺少關鍵能力:限制 CPU 資源。實際案例中這點備受重視,單靠 DB2 WLM 無法提供完整方案。本文透過實踐示範如何結合 DB2 與 AIX WLM 給出完整解決方案,為讀者搭建入門階梯。
DB2 WLM 可用閾值包括:estimatedsqlcost、sqlrowsreturned、sqltempspace、activitytotaltime、connectionidletime、concurrentworkloadoccurrences、concurrentdbcoordactivities、concurrentworkloadactivities、totaldbpartitionconnections、totalscpartitionconnections。顯然無操作系統資源相關內容。雖創建 Service Class 可指定代理程式優先級,但優先級非客戶所需,且 10 個最低優先級代理程式可能比 1 個高優先級代理程式獲取更多資源,無法確切保證某應用/用戶不超用給定資源量。
實際常見需求:限制次要應用用戶 CPU 使用率 <10%,或按 3 應用負載特徵與重要程度分配 50%/30%/20% CPU。此時需 AIX WLM 介入。
AIX WLM 管理 CPU、物理記憶體、I/O,可設定資源最大/最小值或按百分比分配。架構與 DB2 WLM 相似,同樣透過 Service Class 分類管理,兩層次:Superclass 與 Subclass。資源管理兩種方式:
定義每個服務類資源佔用比例。例:A、B、C 三類 CPU share 值 50、30、20(非百分比,範圍 1-65536),則可用 CPU 比例為 50%、30%、20%。若 C 非活躍,A 可用 (50/(50+30))×100%=62.5%。若新增 D share=100,A 可用 (50/(50+30+20+100))×100%=25%。需注意層次,父類與子類影響分配範圍與比例。
指定資源最小/最大百分比:
規則:min≤max;同層級同範圍所有類 min 之和 ≤100;softmax≤hardmax。
兩個 WLM 結合,關鍵在將 DB2 WLM 服務類與 AIX WLM 服務類一一關聯(映射)。創建 DB2 WLM 服務類時使用 OUTBOUND CORRELATOR 選項指定關聯名稱。用 DB2 WLM 將用戶/程式定義為服務類,再透過 Outbound Correlator 與 AIX WLM 服務類關聯,即實現對特定用戶/應用限制 CPU。



映射靈活無過多限制,但設計者必須清晰知曉每個服務類實際資源比例,因父類與子類控制資源分配作用範圍,從 AIX 作用域映射到 DB2 後實際作用域必須清晰。
只讀權限用資料庫權限解決。testusr 不影響主業務較籠統,轉化為技術指標:
未用 ESTIMATEDSQLCOST (timerons) 因其綜合 CPU/I/O 分值,允許 testusr 對大表全表掃描時 timerons 值不穩定,建議按應用類型區分(OLTP 較易確定範圍)。
CREATE SERVICE CLASS sc_test OUTBOUND CORRELATOR '_ScTest'CREATE WORKLOAD wl_test SESSION_USER ('TESTUSR') SERVICE CLASS sc_test; GRANT USAGE ON WORKLOAD wl_test TO PUBLIC;CREATE SERVICE CLASS sc_test_queries UNDER sc_test;CREATE WORK CLASS SET wcs_queries (WORK CLASS wc_read WORK TYPE READ);CREATE WORK ACTION SET was_queries FOR SERVICE CLASS sc_test USING WORK CLASS SET wcs_queries (WORK ACTION wa_read ON WORK CLASS wc_read MAP ACTIVITY TO sc_test_queries);CREATE THRESHOLD th_conn FOR SERVICE CLASS sc_test ACTIVITIES ENFORCEMENT DATABASE WHEN CONCURRENTDBCOORDACTIVITIES > 2 STOP EXECUTION;
CREATE THRESHOLD th_conn_idle FOR SERVICE CLASS sc_test ACTIVITIES ENFORCEMENT DATABASE WHEN CONNECTIONIDLETIME > 5 MINUTES STOP EXECUTION;
CREATE THRESHOLD th_queries_tmp FOR DATABASE ACTIVITIES ENFORCEMENT DATABASE PARTITION WHEN SQLTEMPSPACE > 10 M STOP EXECUTION;cd /etc/wlm; cp -r template inventory; wlmcntrl -d inventorymkclass -a inheritance=no -c hardmax='10' aixscquery(硬限制 10% CPU,禁用繼承)vi /etc/wlm/inventory/rules 尾部添加:aixscquery - - - - - _ScTestwlmcntrl -o; wlmcntrl -a
啟動多少並發(閾值限制 2 並發),CPU 始終 <10%。

綜合來看,DB2 WLM 與 AIX WLM 結合基本滿足工作負載管理絕大部分需求,效果達標。