本文說明如何利用工作負載群組來配置工作負載隔離、包含資源,以及套用執行時的查詢執行規則。
工作負載群組
工作負載群組是一組要求的容器,而且是如何在系統上設定工作負載管理 (包括工作負載隔離) 的基礎。 工作負載群組是使用 CREATE WORKLOAD GROUP 語法建立的。 簡單工作負載管理設定可以管理資料負載和使用者查詢。 例如,命名為 wgDataLoads 工作負載群組時,會定義載入系統資料的工作負載面向。 此外,一個名為 wgUserQueries 工作負載的群組會為執行查詢以讀取系統資料的使用者定義工作負載面向。
以下章節將強調工作負載群組如何提供定義隔離、包含、請求資源定義及遵守執行規則的能力。
資源管理
工作負載群組管理記憶體與 CPU 資源。 磁碟、網路 IO 以及 tempdb 都不受規範。 記憶體與 CPU 的資源治理如下:
記憶體在請求層級被管理,並會持續保存整個請求期間。 關於如何設定每個請求記憶體容量的更多細節,請參見「 每個請求的資源定義 」。 工作負載群組的 MIN_PERCENTAGE_RESOURCE 參數專門將記憶體專用給該工作負載群組。 工作負載群組的CAP_PERCENTAGE_RESOURCE參數是對工作負載群組可消耗記憶體的硬性限制。
CPU 資源在工作負載群組層級受管理,並由工作負載群組內所有請求共享。 與執行期間專門分配給請求的記憶體相比,CPU 資源是變動的。 由於 CPU 是流動資源,未使用的 CPU 資源可能會被所有工作負載群組消耗。 這表示 CPU 利用率可能超過該工作負載群組的 CAP_PERCENTAGE_RESOURCE 參數。 這也意味著工作負載群組的MIN_PERCENTAGE_RESOURCE參數不像記憶體那樣進行硬性預留。 當 CPU 資源處於爭用狀態時,利用率會與工作負載群組的 CAP_PERCENTAGE_RESOURCE 定義一致。
工作負載隔離
工作負載隔離表示會專為工作負載群組保留資源。 工作負載隔離是透過將 MIN_PERCENTAGE_RESOURCE 參數設定為 CREATE WORKLOAD GROUP 語法中的大於零來實現。 對於需要遵守嚴格 SLA 的持續執行工作負載,隔離確保資源隨時可供工作負載群組使用。
設定工作負載隔離隱含定義了保證的並行層級。 例如,一個工作負載組,其 MIN_PERCENTAGE_RESOURCE 設定為 30%,REQUEST_MIN_RESOURCE_GRANT_PERCENT 設為 2%,保證有 15 個並行處理的並發性。 並行程度有所保證,因為在工作負載群組中始終保留 15-2% 的資源槽(無論 REQUEST_MAX_RESOURCE_GRANT_PERCENT 如何配置)。 若REQUEST_MAX_RESOURCE_GRANT_PERCENT大於REQUEST_MIN_RESOURCE_GRANT_PERCENT且CAP_PERCENTAGE_RESOURCE大於MIN_PERCENTAGE_RESOURCE,則可根據資源可用性為每個請求新增額外資源。 若REQUEST_MAX_RESOURCE_GRANT_PERCENT與REQUEST_MIN_RESOURCE_GRANT_PERCENT相等且CAP_PERCENTAGE_RESOURCE大於MIN_PERCENTAGE_RESOURCE,則可能有額外的並行。 請考慮以下方法來確定保證並行性:
[保證並行] = [MIN_PERCENTAGE_RESOURCE] / [REQUEST_MIN_RESOURCE_GRANT_PERCENT]
備註
min_percentage_resource有特定的服務等級最低值。 欲了解更多資訊,請參閱 有效價值 。
在缺乏工作負載隔離的情況下,請求會運作於 共享資源池 中。 共享資源池中的資源存取權並非保證,且依 重要性 分配。
設定工作負載隔離時應謹慎,因為即使工作負載群組中沒有主動請求,資源仍會分配給該工作負載群組。 過度配置隔離可能導致整體系統利用率下降。
使用者應避免選擇配置 100% 工作負載隔離的工作負載管理解決方案:當所有工作負載群組的 min_percentage_resource 配置總和達到 100% 時,即達成 100% 隔離。 這種配置過於限制且僵化,幾乎沒有空間處理誤分類的資源請求。 有一項規定允許從未設定為隔離功能的工作負載群組執行一個請求。 分配給此請求的資源在系統的動態管理檢視(DMV)中將顯示為零,並會從系統保留資源中借用少量的資源授權。
備註
為確保資源的最佳利用,考慮一種工作負載管理解決方案,該方案利用部分隔離性來確保達到SLA標準,並根據 工作負載重要性來分配共享資源。
工作負載控制
工作負載控制是指限制工作負載群組可消耗的資源量。 工作負載控制是透過將 CAP_PERCENTAGE_RESOURCE 參數設定為 CREATE WORKLOAD GROUP 語法中的小於 100 來達成。 想像使用者需要系統的讀取權限,以便透過臨時查詢進行假設分析的情況。 這類請求可能會對系統上其他正在執行的工作負載產生負面影響。 配置封閉確保資源量有限。
設定工作負載內含項目會隱含地定義最大並行層級。 CAP_PERCENTAGE_RESOURCE 設定為 60% 且 REQUEST_MIN_RESOURCE_GRANT_PERCENT 設定為 1% 時,工作負載群組最多允許 60 個並行層級。 請考慮以下計算最大並發的方法:
[最大並發] = [CAP_PERCENTAGE_RESOURCE] / [REQUEST_MIN_RESOURCE_GRANT_PERCENT]
備註
當建立MIN_PERCENTAGE_RESOURCE大於零的工作負載群組時,該群組的有效CAP_PERCENTAGE_RESOURCE將無法達到100%。 有效執行時間值請參見 sys.dm_workload_management_workload_groups_stats 。
每個請求所需的資源定義
工作負載群組提供一種機制,透過 CREATE WORKLOAD GROUP 語法中的 REQUEST_MIN_RESOURCE_GRANT_PERCENT 與 REQUEST_MAX_RESOURCE_GRANT_PERCENT參數,定義每個請求分配的最小與最大資源量。 這裡的資源是記憶。 CPU 資源治理在 資源治理 章節中涵蓋。
備註
REQUEST_MAX_RESOURCE_GRANT_PERCENT 是一個可選參數,預設值與 REQUEST_MIN_RESOURCE_GRANT_PERCENT 相同。
就像選擇資源類別一樣,設定 REQUEST_MIN_RESOURCE_GRANT_PERCENT 會設定請求所使用的資源值。 設定值所顯示的資源量,在請求開始執行前即有保證分配。 對於從資源類別遷移到工作負載群組的客戶,可以參考 「如何做 」文章,從資源類別對應到工作負載群組,作為起點。
將 REQUEST_MAX_RESOURCE_GRANT_PERCENT 設定為大於 REQUEST_MIN_RESOURCE_GRANT_PERCENT 的值,系統可為每個請求分配更多資源。 在排程請求時,系統會根據共享池中的資源可用性及系統當前負載,決定實際分配給請求的資源,介於REQUEST_MIN_RESOURCE_GRANT_PERCENT與REQUEST_MAX_RESOURCE_GRANT_PERCENT之間。 當查詢排程時,資源必須存在於 共享資源池 中。
備註
REQUEST_MIN_RESOURCE_GRANT_PERCENT 和 REQUEST_MAX_RESOURCE_GRANT_PERCENT 的有效值依賴於有效的 MIN_PERCENTAGE_RESOURCE 值和 CAP_PERCENTAGE_RESOURCE 值。 有效執行時間值請參見 sys.dm_workload_management_workload_groups_stats 。
執行規則
在臨時報告系統中,客戶可能不小心執行失控查詢,嚴重影響他人生產力。 系統管理員被迫花時間刪除失控查詢以釋放系統資源。 工作負載群組提供設定查詢執行逾時規則的能力,以取消超過指定值的查詢。 此規則的設定方式是透過在 CREATE WORKLOAD GROUP 語法中設定 QUERY_EXECUTION_TIMEOUT_SEC 參數來進行。
共享資源池
共享池資源是指未設定為隔離的資源。 當工作負載群組之MIN_PERCENTAGE_RESOURCE設為零時,可利用共享池中的資源來執行請求。 CAP_PERCENTAGE_RESOURCE大於MIN_PERCENTAGE_RESOURCE的工作負載群組也會使用共享資源。 共享資源池中可用的資源數量計算如下。
[共享池] = 100 - [所有工作負載群組的 MIN_PERCENTAGE_RESOURCE 總和]
共享資源池的存取權依 重要性 分配。 同等重要性的請求將以先進先出方式存取共享資源池資源。