控制 Memory 和 CPU 資源的使用

来源:http://www.cnblogs.com/ljhdo/archive/2017/01/16/4995633.html
-Advertisement-
Play Games

Resource Governor的出現,解決了在一臺SQL Server實例上,管理多用戶工作負載和資源隔離的需求,它允許管理員限制系統處理Requsts時所耗費的CPU 和 Memory資源的數量,在一定程度上,限制和隔離了runaway查詢。對於SQL Server 2012,用戶能夠基於工作 ...


Resource Governor的出現,解決了在一臺SQL Server實例上,管理多用戶工作負載和資源隔離的需求,它允許管理員限制系統處理Requsts時所耗費的CPU 和 Memory資源的數量,在一定程度上,限制和隔離了runaway查詢。對於SQL Server 2012,用戶能夠基於工作負載,實現CPU資源的完全隔離,並能設置CPU資源使用量的硬上限(CAP Usage,Hard Limit)。在一個多用戶,高併發的SQL Server實例上,管理員使用Resource Governor,控制不同工作負載對記憶體和CPU資源的使用量,使不同的應用程式在使用的資源上相互隔離,使系統性能得到可預測性的控制和保證。

一,基本實現(fundamental implementation)

Resource Governor的可編程部分由三部分組成:Resource Pool,Workload Group 和 Classifier Function,每個部分實現不同的功能。

1,資源池(Resource Pool)

在SQL Server實例中,資源隔離的基本單位是Resource Pool,正如其名,該對象是資源池,在創建Resource Pool時,指定該Pool擁有的CPU和Memory資源的數量範圍。在SQL Server 2012版本中,最多可以創建62個用戶自定義的Resource Pool。SQL Server內置了兩個Resource Pools:internal用於系統Task,用戶不能配置;default是預設的Resource Pool,用於任何沒有指定Resource Pool的Request;
2,負載分組(Workload Group)

Workload Group是邏輯上的實體,用於表示一個或多個工作負載。實際上,一個工作負載是SQL Server實例接收到的一個查詢請求(Request),通過Classifier Function將多個具有共同屬性的Requests劃分到相同的Workload Group中。每一個Resource Pool服務於一個或多個工作負載分組,這就是說,這些工作負載分組能夠共用同一個Resource Pool中擁有的資源。

SQL Server內置兩個負載分組:internal和default,關聯到相應的internal和default資源池,internal負載分組用於系統Task,SQL Server將沒有被分類函數顯式指定負載分組的Request劃分到default 分組中。

3,分類函數(Classifier Function)

分類函數根據Login,應用程式名稱,資料庫名字等屬性,將Request劃分到不同的負載分組中,可以指定用戶定義的負載分組或default負載分組。

4,處理流程

Resource Governor各個部分相互配合,控制記憶體和CPU資源的使用:Classification將SQL Server實例接收到的Requests進行分類,劃分到不同的負載組中,負載組與之關聯的Resource Pool中包含的CPU和記憶體資源來處理Request,Resource Governor的處理流程如下圖: 

 

Resource Pool 是SQL Server實例中物理資源的子集,由於位於同一個實例上的所有資料庫共用該實例的所有資源,因此,最好將Resource Pool的三個組成對象創建在master 資料庫中。

二,使用示例

1, 創建Resource Pool

CREATE RESOURCE POOL rp_20Percent
WITH 
(
     MIN_CPU_PERCENT = 0,
     MAX_CPU_PERCENT = 20,
     CAP_CPU_PERCENT = 20,
     AFFINITY SCHEDULER = auto,
     MIN_MEMORY_PERCENT = 0,
     MAX_MEMORY_PERCENT = 20
);

CAP_CPU_PERCENT選項設置資源池擁有CPU資源的硬上限,任何Workload Group使用的CPU數量不可能超過該上限,而資源池使用的CPU資源有可能超過 MAX_CPU_PERCENT 選項指定的比例。

2,創建Workload Group

創建工作負載分組,通過using子句關聯該分組能夠使用的資源池,一個工作負載分組只能關聯一個資源池,一個資源池服務一個或多個工作負載分組。

CREATE WORKLOAD GROUP wg_20Percent
WITH
(
    IMPORTANCE = MEDIUM,
    REQUEST_MAX_MEMORY_GRANT_PERCENT=20,
    REQUEST_MAX_CPU_TIME_SEC=0,
    REQUEST_MEMORY_GRANT_TIMEOUT_SEC=0,
    MAX_DOP=0,
    GROUP_MAX_REQUESTS=0
)
USING rp_20Percent;

IMPORTANCE選項: 該選項指定該Workload Group在Resource Pool中相對的重要性,由於同一個Resource Pool關聯多個Workload Group,Importance數值高的Workload Group,在競爭Resource Pool中的資源時,更容易獲勝。該選項有三個可選值:Low,Medium和High,預設值是Medium。

3,創建 Classifier Function

該分類函數根據用戶名稱,將Request劃分到wg_20Percent負載分組,預設情況下,任何沒有指定Workload Group的Request,都使用Default資源池。在實際產品環境中,也可以使用APP_NAME()獲取應用程式名字,根據應用程式劃分負載分組。

CREATE FUNCTION dbo.rgClassifierFunction_20Percent() 
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @Workload_Group_Name AS sysname
      IF (SUSER_NAME() = 'USER_READONLY')
          SET @workload_group_name = 'wg_20Percent'
    RETURN @workload_group_name
END;

4,啟動Resource Governor

首先,配置Resource Governor使用的分類函數;然後,執行重新配置命令,啟動Resource Governor,SQL Server使用分類函數對SQL Server實例接收的Requests,劃分到不同的負載分組。

ALTER RESOURCE GOVERNOR 
WITH (CLASSIFIER_FUNCTION=dbo.rgClassifierFunction_20Percent);
GO
ALTER RESOURCE GOVERNOR
RECONFIGURE; GO

 

MSDN示例腳本:

CREATE FUNCTION dbo.rgclassifier_v1() 
RETURNS sysname 
WITH SCHEMABINDING
AS
BEGIN
-- Declare the variable to hold the value returned in sysname.
    DECLARE @grp_name AS sysname
-- If the user login is 'sa', map the connection to the groupAdmin  workload group. 
    IF (SUSER_NAME() = 'sa')
        SET @grp_name = 'groupAdmin'
-- Use application information to map the connection to the groupAdhoc workload group.
    ELSE IF (APP_NAME() LIKE '%MANAGEMENT STUDIO%')
        OR (APP_NAME() LIKE '%QUERY ANALYZER%')
            SET @grp_name = 'groupAdhoc'
-- If the application is for reporting, map the connection to the groupReports workload group.
    ELSE IF (APP_NAME() LIKE '%REPORT SERVER%')
        SET @grp_name = 'groupReports'
-- If the connection does not map to any of the previous groups, put the connection into the default workload group.
    ELSE
        SET @grp_name = 'default'
    RETURN @grp_name
END;
GO

-- Register the classifier user-defined function and update the 
-- the in-memory configuration.
ALTER RESOURCE GOVERNOR 
WITH (CLASSIFIER_FUNCTION=dbo.rgclassifier_v1);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
View Code

 

參考文檔:

Resource Governor

Resource Governor in SQL Server 2012

使用sql server 2008 資源調控器限制指定用戶查詢所使用CPU資源

CREATE RESOURCE POOL (Transact-SQL)

CREATE WORKLOAD GROUP (Transact-SQL)

ALTER RESOURCE GOVERNOR (Transact-SQL)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄操作和文件管理 學習目標 1.理解單例 2.掌握NSFileManager類常用的文件管理操 3.掌握NSFileHandle類常用的文件數據操作 4.瞭解NSData類的常用操作 5.掌握Plist文件讀寫 —————————————————————— 通常程式在運行中或者程式結束之後,需要保 ...
  • 記憶體管理 對於這篇呢,其實現在都是ARC模式,正常狀態下基本不用我們去手動釋放記憶體,所以如果不是要面試呀、裝逼或者扎實功底的,就先別看了或者瞭解下即可,因為像面試時,有些面試官想看你的基礎時,就有些人會問,現在工作基本不會用到。 學習目標 1. 掌握記憶體管理的原理 2. 掌握手動記憶體管理 1.需要理 ...
  • 繼承、多態、類別 學習目標 1、繼承的含義 2、父類子類的別稱 3、欄位和消息的繼承 4、重寫和重寫消息的調用 5、多態 6、類別(Category) 1.需要理解的知識 面向對象的三個基本特征: 1、封裝 2、繼承 3、多態 1、繼承(單繼承): 父類(超類)和子類的關係。 繼承的兩個類,存在父子 ...
  • 一. MJRefresh的類解釋. 1.MJRefreshComponent 所有刷新控制項的基類別.(component: 成分,組件) 2.MJRefreshNormalHeader 預設的下拉刷新控制項 3.MJRefreshAutoNormalFooter 預設的上拉刷新控制項 下拉刷新控制項自適應 ...
  • 光,電磁波和顏色光是一種電磁波,頻率被限定在較窄的範圍內。不同頻率(對應不同的波長)的電磁波(光)有不同的顏色。可見光的最長波長是780nm,對應紅色;最短波長是380nm,對應於紫色。太陽光可以發射可見範圍內所有頻率的波長,表現為白光。當白光遇到物體時,一些頻率的電磁波被反射,一些頻率的電磁波被吸... ...
  • 刪除的效果 AutomaticBottomFadeleftmiddlenonerighttop 簡單刪除先刪除數據源里的數據,然後再刪除cell,否者會報錯 let indexPath = NSIndexPath.init(forRow: 1, inSection: 0) let indexPath... ...
  • UIImage是什麼用來管理APP里的圖片資源,可以用來表示設備支持的圖片資源,不僅僅是jpg和png。UIImage是immutable的,因此也是線程安全的。iOS支持的所有的圖片格式鏈接不過,對於gif格式,只能展示第一幀。需要把gif分成若幹幀,分別展示。iOS本身的圖片緩存系統iOS本身有... ...
  • 動態視圖 基表 GV$ACCESS x$ksuses,x$kglob,x$kgldp,x$kgllk GV$ACTIVE_INSTANCES x$ksimsi GV$ACTIVE_SESS_POOL_MTH x$kgskasp GV$AQ1 X$KWQSI GV$ACCESS x$ksuses,x$ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...