SQLServer資源調控器 自由分配您的資源

2022-02-07 11:10:20 字數 4809 閱讀 9141

很早之前就有朋友問過我,能否按業務的優先等級分配sqlserver的資源,使得不同的應用能得到不同的響應,sqlserver2008之前對這個需求貌似沒有什麼

解決方法,不過從sqlserver2008開始,這個需求就變得很簡單了,sqlserver直接就為我們提供了按使用者的要求分配資源的能力,下面我們就來介紹這個功能。

sqlserver資源調控器分成三個部分:資源池、負載組和分類器函式;資源池為我們提供了將資源(cpu、memory等)劃分到不同的載體中,負載組承載負載並

將這些負載對映到資源池,分類器函式將不同的會話對映到不同的負載組中。

資源池:

08提供了兩種預先定義好的資源池

內部池:內部池只用於sqlserver資料庫引擎,系統管理員不能改變和設定;

預設池:預設池用於沒有分配資源池的各種負載,因此,如果你不指定資源調控器,全部負載將使用預設池。預設池也不能改變或刪除,但是可以修改它的資源上

下限。資源池上下限要求:

各個資源池的下限之和不能超過100%,因為sqlserver會盡力滿足每個下限;

上限可以設定為下限和100%之間的任意值。

以下是關於資源池的基本操作:

--

建立資源池

create resource pool userqueries with(max_cpu_percent=

100)

--刪除資源池

drop resource pool userqueries

負載組:負載組可以讓管理員輕鬆地監控資源使用情況,在不同的資源池之間移動某類負載。

負載組被對映到資源池上,乙個資源池可以有零個或更多負載組,乙個負載組為一組使用者會話提供乙個桶。

--

建立負載組

create workload group

dailyexecreports using userqueries;

--刪除負載組

drop workload group dailyexecreports

分類器函式:按以下條件分配組:

--

建立資源池

create resource pool adminqueries with(max_cpu_percent=

100)

create resource pool userqueries with(max_cpu_percent=

100)

--建立負載組

create workload group

nightlymaintenancetasks using adminqueries;

create workload group

adhocadmin using adminqueries;

create workload group

sapusers using userqueries;

create workload group

dailyexecreports using userqueries;

--建立分類器函式

usemaster

gocreate

function

class_func_1()

returns sysname with

schemabinding

begin

declare

@val

sysname

--handle workload groups defined by login names

ifsuser_sname()=

'sap_login

'begin

set@val='

sapusers';

return

@val

;

endif

'microsoft sql server management studio%

'begin

set@val='

adhocadmin';

return

@val

;

endif

is_member('

reportusers

')=1

begin

set@val='

dailyexecreports';

return

@val

;

endif connectionproperty('

net_transport

')='

shared memory

'and

is_member('

nightlyadmin

')=1

begin

set@val='

nightlymaintenancetasks';

return

@val

;

endreturn

@val

;

end

繫結分類器函式:

--

將分類器函式繫結到資源調控器上

alter resource governor with(classifier_function=dbo.class_func_1);

啟用和禁用分類器函式:

--

啟用alter resource governor reconfigure;--

禁用alter resource governor disable;

測試:現在我們分別使用sap_login和sysadmin使用者呼叫此指令碼

--

測試指令碼(分別使用sap_login和sysadmin使用者呼叫此指令碼)

set nocount on

declare

@iint

=100000000;

declare

@svarchar(100),@count

int;

while

@i>

0begin

select@s=

@@version

;

select

@count

=count(0) from

sys.sysobjects

set@i=@i

-1;

end

通過效能計數器檢視資源分配:我們可以選擇效能計數器的資源統計:sql server:resource pools stats;

我們先將資源池按一比一的比例分配:

create resource pool adminqueries with(max_cpu_percent=

100)

create resource pool userqueries with(max_cpu_percent=

100)

執行測試指令碼,顯示的cpu利用率圖如下

現在將資源分配做如下調整:

create resource pool adminqueries with(max_cpu_percent=10)

create resource pool userqueries with(max_cpu_percent=

90)

再次執行測試指令碼,顯示的cpu利用率圖如下

可以看到,當我們調整資源後,兩個session中執行同樣的指令碼,它們所使用的資源差別很大,這樣就達到了根據不同的應用分配不同的資源的目的。

dmv檢視資源池:

--

檢視session所在的資源池

select

s.session_id,s.login_name ,s.program_name,s.group_id,g.name

from

sys.dm_exec_sessions s

join

sys.dm_resource_governor_workload_groups g

on s.group_id=

g.group_id

where session_id>

50

--

檢視資源池情況

可以看到,我們建立的兩個資源池(還有兩個是系統資源池和預設資源池),而且不同的session對應到了不同的資源池中。

SqlServer效能優化 效能調控(十)

如何做資源的調控 1.建立資源池。2.建立工作負荷組 create resource pool imporpool with min cpu percent 30,max cpu percent 100,min memory percent 40,max memory percent 95 不太重要...

空調控制器

概述 隨著汽車業的發展,帶動了汽車空調市場需求持續大幅增長。隨著消費公升級及節能減排政策縮緊,促使汽車空調技術不斷改進,汽車空調已不再是單純的用於製冷制暖,而是涉及到多區域自動溫度調節,整車系統節能環保 車內空氣質素改善等。同時隨著新能源車的發展,會影響到電量的分配和續航里程。新的汽車市場發展下,需...

空調控制器

概述 汽車行業的高速發展,帶動了汽車空調市場需求持續大幅增長。隨著消費公升級及節能減排政策縮緊,促使汽車空調技術不斷改進和完善,汽車空調已不再是單純的用於製冷制暖,而是涉及到多區域自動溫度調節,整車系統節能環保 車內空氣質素改善等。同時隨著新能源車的發展,會影響到電量的分配和續航里程。新的汽車市場發...