0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談數(shù)據(jù)庫(kù)內(nèi)存和CPU資源控制及資源管理器的應(yīng)用

454398 ? 來(lái)源:博客園 ? 作者: 悅光陰 ? 2020-10-29 12:12 ? 次閱讀

數(shù)據(jù)庫(kù)系統(tǒng)的資源是指內(nèi)存和CPU處理器)資源,擁有資源的多寡,決定了數(shù)據(jù)查詢的性能。當(dāng)一個(gè)SQL Server實(shí)例上,擁有多個(gè)獨(dú)立的工作負(fù)載(workload)時(shí),使用資源管理器(Resource Governor),能夠?qū)崿F(xiàn)系統(tǒng)資源在邏輯上的隔離,解決在一臺(tái)SQL Server實(shí)例上,管理多用戶工作負(fù)載的需求。資源管理器允許數(shù)據(jù)庫(kù)管理員(DBA)通過(guò)編程設(shè)置資源池,配置資源池?fù)碛匈Y源的上限,資源池是每一個(gè)請(qǐng)求能夠使用的資源,這樣設(shè)置之后,強(qiáng)制系統(tǒng)在處理用戶發(fā)送的請(qǐng)求(Requsts)時(shí)所耗費(fèi)的CPU 和 Memory資源的數(shù)量不能超過(guò)限制,在一定程度上,限制用戶能夠使用的資源數(shù)量,隔離了失控(runaway)的查詢對(duì)系統(tǒng)的影響。對(duì)于SQL Server 2012來(lái)說(shuō),用戶能夠基于工作負(fù)載,實(shí)現(xiàn)CPU資源的完全隔離,并能設(shè)置CPU資源使用量的硬上限(CAP Usage,Hard Limit)。在一個(gè)多用戶、高并發(fā)的SQL Server實(shí)例上,管理員使用Resource Governor,控制不同工作負(fù)載對(duì)內(nèi)存和CPU資源的使用量,使不同的應(yīng)用程序在資源的使用上相互隔離,使系統(tǒng)性能得到可預(yù)測(cè)性的控制和保證。

一,資源管理器的基本構(gòu)成

Resource Governor的可編程部分由三部分組成:Resource Pool,Workload Group 和 Classifier Function,每個(gè)部分實(shí)現(xiàn)不同的功能。

1,資源池(Resource Pool)

在SQL Server實(shí)例中,資源隔離的基本單位是Resource Pool,正如其名,該對(duì)象是資源池,在創(chuàng)建Resource Pool時(shí),指定該P(yáng)ool擁有的CPU和Memory資源的數(shù)量范圍。在SQL Server 2012版本中,最多可以創(chuàng)建62個(gè)用戶自定義的Resource Pool。SQL Server內(nèi)置了兩個(gè)ResourcePools:internal用于系統(tǒng)Task,用戶不能配置;default是默認(rèn)的Resource Pool,用于任何沒有指定Resource Pool的Request;
2,負(fù)載分組(Workload Group)

Workload Group是邏輯上的實(shí)體,用于表示一個(gè)或多個(gè)工作負(fù)載。實(shí)際上,一個(gè)工作負(fù)載是SQL Server實(shí)例接收到的一個(gè)查詢請(qǐng)求(Request),通過(guò)Classifier Function將多個(gè)具有共同屬性的Requests劃分到相同的Workload Group中。每一個(gè)Resource Pool服務(wù)于一個(gè)或多個(gè)工作負(fù)載分組,這就是說(shuō),這些工作負(fù)載分組能夠共享同一個(gè)Resource Pool中擁有的資源。

SQL Server內(nèi)置兩個(gè)負(fù)載分組:internal和default,關(guān)聯(lián)到相應(yīng)的internal和default資源池,internal負(fù)載分組用于系統(tǒng)Task,SQL Server將沒有被分類函數(shù)顯式指定負(fù)載分組的Request劃分到default 分組中。

3,分類函數(shù)(Classifier Function)

分類函數(shù)根據(jù)指定的規(guī)則(Rule),例如,根據(jù)Login,應(yīng)用程序名稱,數(shù)據(jù)庫(kù)名字等屬性,將接收的Request分配(路由)到不同的負(fù)載分組中,可以指定用戶定義的負(fù)載分組或default負(fù)載分組。

4,處理流程

Resource Governor各個(gè)部分相互配合,控制內(nèi)存和CPU資源的使用:Classification將SQL Server實(shí)例接收到的Requests進(jìn)行分類,劃分到不同的負(fù)載組中,負(fù)載組與之關(guān)聯(lián)的Resource Pool中包含的CPU和內(nèi)存資源來(lái)處理Request,Resource Governor的處理流程如下圖:

Resource Pool 是SQL Server實(shí)例中物理資源的子集,由于位于同一個(gè)實(shí)例上的所有數(shù)據(jù)庫(kù)共享該實(shí)例的所有資源,因此,最好將Resource Pool的三個(gè)組成對(duì)象創(chuàng)建在master 數(shù)據(jù)庫(kù)中。

二,創(chuàng)建和使用資源管理器

資源管理器默認(rèn)是關(guān)閉的,在使用之前,必須啟用。用戶可以通過(guò)SSMS啟用資源管理器,展開Management,選擇Resource Governor,右擊彈出快捷菜單,點(diǎn)擊“Enable”,啟用資源管理器:

或者,使用TSQL命令,重新配置,啟用資源管理器:

ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

1, 創(chuàng)建自定義的資源池(Resource Pool)

SQL Server 內(nèi)置兩個(gè)資源池:internal和default,internal是系統(tǒng)內(nèi)部使用的,default是默認(rèn)的資源池,當(dāng)一個(gè)查詢請(qǐng)求沒有指定資源池時(shí),使用默認(rèn)的資源池。為了管理用戶不同的工作負(fù)載,DBA需要根據(jù)業(yè)務(wù)需求創(chuàng)建自定義的資源池。在創(chuàng)建資源池時(shí),需要注意,資源池的選項(xiàng)都是比例關(guān)系,所有資源的下限(MIN_MEMORY_PERCENT或MIN_CPU_PERCENT)的加和不能超過(guò)系統(tǒng)的物理資源總量,即不能超過(guò)100。

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

CAP_CPU_PERCENT選項(xiàng):設(shè)置資源池?fù)碛蠧PU資源的硬上限,任何Workload Group使用的CPU數(shù)量不可能超過(guò)該上限,而資源池使用的CPU資源有可能超過(guò)MAX_CPU_PERCENT 選項(xiàng)指定的比例。

2,創(chuàng)建工作負(fù)載組(Workload Group)

創(chuàng)建工作負(fù)載分組,通過(guò)using子句關(guān)聯(lián)該分組能夠使用的資源池,一個(gè)工作負(fù)載分組只能關(guān)聯(lián)一個(gè)資源池,一個(gè)資源池可以服務(wù)一個(gè)或多個(gè)工作負(fù)載分組。

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選項(xiàng):有三個(gè)可選值:Low,Medium和High,默認(rèn)值是Medium,該選項(xiàng)用于指定該Workload Group在關(guān)聯(lián)的資源池(Resource Pool)中相對(duì)的重要性,由于同一個(gè)可以Resource Pool關(guān)聯(lián)多個(gè)Workload Group,當(dāng)一個(gè)工作負(fù)載組(Workload Group)的Importance數(shù)值高于其他工作負(fù)載組(Workload Group)時(shí),在競(jìng)爭(zhēng)Resource Pool中的資源時(shí),更容易獲勝。當(dāng)前工作負(fù)載組的IMPORTANCE的選項(xiàng)不會(huì)使用其他資源池,也不會(huì)影響其他資源組中的工作負(fù)載。

REQUEST_MAX_MEMORY_GRANT_PERCENT:默認(rèn)值是25,用于指定工作負(fù)載組能夠從資源組中申請(qǐng)到的最大授予內(nèi)存(Grant Memory)資源,由于授予內(nèi)存跟執(zhí)行的SORT和HASH JOIN操作有關(guān),如果設(shè)置REQUEST_MAX_MEMORY_GRANT_PERCENT為0,這意味著,SQL Server引擎將不允許執(zhí)行排序和哈希鏈接操作。

MAX_DOP:用于指定并發(fā)查詢的最大并發(fā)度(Degree of Parallelism),默認(rèn)值是0,表示使用全局配置(Global Setting)。

3,創(chuàng)建分類函數(shù)(Classifier Function)

分類函數(shù)根據(jù)特定的規(guī)則(Rule)把接收的request路由到不同的資源池中,用戶應(yīng)該把分類函數(shù)創(chuàng)建在master數(shù)據(jù)庫(kù)中,這樣,函數(shù)的作用域就是整個(gè)SQL Server實(shí)例,分類函數(shù)的執(zhí)行上下文是master 數(shù)據(jù)庫(kù);如果分類函數(shù)返回NULL,default或不存在的工作負(fù)載組的名稱,那么查詢被路由導(dǎo)default資源池:

If the user-defined function returns NULL, default, or the name of non-existent group the session is given the default workload group context. The session is also given the default context if the function fails for any reason.

The function should be defined with server scope (master database).

例如,根據(jù)用戶名稱,將Request劃分到wg_20Percent負(fù)載分組。默認(rèn)情況下,任何沒有指定Workload Group的Request,都分發(fā)到Default資源池。在實(shí)際產(chǎn)品環(huán)境中,也可以使用APP_NAME()獲取應(yīng)用程序名字,或者SUSER_NAME()獲取用戶的登陸(Login)名稱,根據(jù)應(yīng)用程序或登陸名稱劃分負(fù)載分組。

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;

常用于分類函數(shù)(Classifier Function)中的函數(shù)如下,這些函數(shù)的執(zhí)行上下文是整個(gè)Server:

APP_NAME():返回當(dāng)前Session所在的應(yīng)用程序的名稱

HOST_NAME():返回主機(jī)名稱;

SUSER_NAME():返回登陸名;

IS_SVROLEMEMBER():當(dāng)用戶是特定的服務(wù)器角色時(shí),返回True;

注意:列表中函數(shù)執(zhí)行的上下文和分類函數(shù)的上下文相同,如果分類函數(shù)被創(chuàng)建在master數(shù)據(jù)庫(kù),那么分類函數(shù)的查詢的范圍是在master數(shù)據(jù)庫(kù)。

執(zhí)行上下文是單個(gè)數(shù)據(jù)庫(kù)的函數(shù)是:

IS_MEMBER('role | group')

IS_ROLEMEMBER( 'role' [ , 'database_principal' ] )

函數(shù):IS_MEMBER('role | group'),用于檢測(cè)當(dāng)前的用戶(User)是否屬于當(dāng)前數(shù)據(jù)庫(kù)的role或windows group。通常情況下,我們把分類函數(shù)創(chuàng)建在master系統(tǒng)數(shù)據(jù)庫(kù)中,這會(huì)導(dǎo)致函數(shù)的執(zhí)行上下文是master數(shù)據(jù)庫(kù),而不是用戶數(shù)據(jù)庫(kù),而master數(shù)據(jù)庫(kù)中可能不存在windows group(數(shù)據(jù)庫(kù)用戶User),這會(huì)導(dǎo)致函數(shù)無(wú)法起到分類的作用:

IS_MEMBERdoesn’t work here as it’ll be firing in the context of the master db, not the user database you’re interested in.

為了解決這個(gè)問(wèn)題,必須在master數(shù)據(jù)庫(kù)中創(chuàng)建相應(yīng)的windows group(數(shù)據(jù)庫(kù)用戶User)。

4,啟動(dòng)資源管理器(Resource Governor)

為了啟動(dòng)資源管理器(Resource Governor),首先配置資源管理器使用的分類函數(shù),把資源管理器和分類函數(shù)關(guān)聯(lián)起來(lái);然后,重新配置資源管理器,啟動(dòng)Resource Governor。啟動(dòng)之后,SQL Server引擎使用分類函數(shù)對(duì)把SQL Server實(shí)例接收的查詢請(qǐng)求(Requests),分配到不同的負(fù)載分組中。

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

5,修改分類函數(shù)

修改分類函數(shù),需要先禁用資源管理器,然后解除分類函數(shù)和資源管理器的關(guān)聯(lián)關(guān)系,然后修改分類函數(shù),把資源管理器和分類函數(shù)重新綁定:

ALTER RESOURCE GOVERNOR
DISABLE;
GO
ALTER RESOURCE GOVERNOR 
WITH (CLASSIFIER_FUNCTION=NULL);
GO

ALTER FUNCTION dbo.rgClassifierFunction_20Percent() 
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    ....
END;
GO

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

三,查看資源管理器

通過(guò)以下三個(gè)視圖查看資源管理器的元數(shù)據(jù):

sys.resource_governor_configuration
sys.resource_governor_workload_groups
sys.resource_governor_resource_pools

通過(guò)以下三個(gè)DMV查看資源管理器的統(tǒng)計(jì)數(shù)據(jù):

sys.dm_resource_governor_configuration
sys.dm_resource_governor_workload_groups
sys.dm_resource_governor_resource_pools

DMVsys.dm_exec_requests 和 sys.dm_exec_sessions 中包含group_id字段,用于表示當(dāng)前session或request處于的工作負(fù)載分組。

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

編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10804

    瀏覽量

    210828
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2966

    瀏覽量

    73812
  • 數(shù)據(jù)庫(kù)系統(tǒng)

    關(guān)注

    0

    文章

    31

    瀏覽量

    9571
  • 資源管理器
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    7520
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    問(wèn)GPIB卡安裝正確,為什么在資源管理器中沒有板卡GPIB0?

    問(wèn)GPIB卡安裝正確,為什么在資源管理器中沒有板卡GPIB0?本人已利用GPIB節(jié)點(diǎn)和visa函數(shù)可以與儀器通信,但在資源管理器中就是沒有GPIB的管理,是因?yàn)橛玫尿?qū)動(dòng)版本低嗎?GPIB卡驅(qū)動(dòng)是2.3的版本,同時(shí)它發(fā)布時(shí)
    發(fā)表于 02-20 20:19

    關(guān)于如何在LV中實(shí)現(xiàn)資源管理器

    希望可以在LV中插入資源管理器,實(shí)現(xiàn)的功能就像WINDOWS中的資源管理器一樣的功能,我想從系統(tǒng)API中調(diào)用,但發(fā)現(xiàn)沒有這種函數(shù)啊。希望大神給予幫助。
    發(fā)表于 03-08 09:03

    LabVIEW 工程資源管理器

    ,LabVIEW 增加了一個(gè)工程資源管理器功能。LabVIEW 工程資源管理器就是一個(gè)可以方便查看、調(diào)整程序系統(tǒng)結(jié)構(gòu)的工作區(qū)。與 VC, VB 等語(yǔ)言中的 project, workspace 相類似。Project 的出現(xiàn)使得 LabVIEW 對(duì)于大項(xiàng)目的
    發(fā)表于 01-05 16:51

    windows7開機(jī)提示“資源管理器已停止工作”

    windows7開機(jī)提示“資源管理器已停止工作”的解決方法分享給大家,據(jù)一些用戶反映,在使用Win7系統(tǒng)的時(shí)候會(huì)出現(xiàn)這樣的情況,每次開機(jī)都提示“資源管理器已停止工作”如下圖所示: 原因分析: 這是
    發(fā)表于 05-19 16:58

    如何用代碼資源管理器跳轉(zhuǎn)到一個(gè)已尋址函數(shù)?

    你好,作為PSoC Creator的NeWBEE,我還沒有發(fā)現(xiàn),如何用代碼資源管理器跳轉(zhuǎn)到一個(gè)已尋址函數(shù)。在我的程序中,主函數(shù)是第一個(gè)函數(shù),其他所有函數(shù)都在下面。所以我必須把這些功能聲明在上面。如果
    發(fā)表于 08-01 08:48

    請(qǐng)問(wèn)一下資源管理器的cubemxsettings怎么調(diào)出來(lái)

    請(qǐng)問(wèn)一下,資源管理器的cubemxsettings怎么調(diào)出來(lái)
    發(fā)表于 10-12 10:22

    TouchGFX文件夾在IDE項(xiàng)目資源管理器中不存在是什么原因?如何解決?

    的文件資源管理器中的文件結(jié)構(gòu)與 STM32CubeIDE 項(xiàng)目資源管理器中顯示的不同。例如,我的文件資源管理器中的 TouchGFX 文件夾在 IDE 項(xiàng)目資源管理器中不存在。是什么原
    發(fā)表于 12-05 07:05

    OrCAD信號(hào)資源管理器

      Cadence公司的OrCAD ® ®資源管理器的信號(hào)使信號(hào)探測(cè),分析和驗(yàn)證,以幫助工程師解決信號(hào)完整性問(wèn)題的整個(gè)設(shè)計(jì)過(guò)程中,從設(shè)計(jì)周期,并最終通過(guò)布局布線的開始。在預(yù)
    發(fā)表于 09-09 17:55 ?1141次閱讀

    Delphi教程_新穎的資源管理器界面

    Delphi教程新穎的資源管理器界面,很好的Delphi資料,快來(lái)下載學(xué)習(xí)吧。
    發(fā)表于 03-16 14:49 ?10次下載

    弄個(gè)取資源管理器選中文件或文件夾名稱

    易語(yǔ)言是一門以中文作為程序代碼編程語(yǔ)言學(xué)習(xí)例程:-弄個(gè)取資源管理器選中文件或文件夾名稱
    發(fā)表于 06-06 17:01 ?11次下載

    Win10 11月更新的文件資源管理器假死頻繁

    為了防止翻車,微軟依然采取小范圍推出Windows 10 November 2019 Update(version 1909)的更新,但即便如此,依然還是出現(xiàn)了不少問(wèn)題,特別是資源管理器搜索方面的。
    的頭像 發(fā)表于 12-19 09:18 ?4230次閱讀

    微軟欲改善Windows 10文件資源管理器體驗(yàn)

    根據(jù)一份新的職位清單,微軟希望提供更現(xiàn)代的File Explorer(文件資源管理器)體驗(yàn)。
    的頭像 發(fā)表于 02-26 14:26 ?1849次閱讀
    微軟欲改善Windows 10文件<b class='flag-5'>資源管理器</b>體驗(yàn)

    YARN資源管理器的容錯(cuò)和架構(gòu)概述

    Apache Hadoop YARN (Yet Another Resource Negotiator,另一種資源協(xié)調(diào)者)是一種新的 Hadoop 資源管理器,它是一個(gè)通用資源管理系統(tǒng),可為上層應(yīng)用提供統(tǒng)一的
    發(fā)表于 04-22 08:00 ?0次下載
    YARN<b class='flag-5'>資源管理器</b>的容錯(cuò)和架構(gòu)概述

    Win10可選更新:修復(fù)資源管理器崩潰

    據(jù)外媒 WindowsLatest,微軟最近為 Windows 10 發(fā)布了 KB4586819 可選更新,修復(fù)了文件資源管理器崩潰,游戲和 USB 等多個(gè)問(wèn)題。 此更新補(bǔ)丁附帶了很長(zhǎng)的 bug
    的頭像 發(fā)表于 11-23 11:01 ?1729次閱讀

    OpenHarmony實(shí)例:【資源管理器

    本工程使用[@ohos.app.ability.common]?接口中的AbilityContext類,獲取資源管理器resourceManager
    的頭像 發(fā)表于 04-09 15:10 ?403次閱讀
    OpenHarmony實(shí)例:【<b class='flag-5'>資源管理器</b>】