很早之前就有朋友問過我,能否按業務的優先等級分配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);
--測試:現在我們分別使用sap_login和sysadmin使用者呼叫此指令碼啟用alter resource governor reconfigure;--
禁用alter resource governor disable;
--通過效能計數器檢視資源分配:我們可以選擇效能計數器的資源統計:sql server:resource pools stats;測試指令碼(分別使用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
我們先將資源池按一比一的比例分配:
create resource pool adminqueries with(max_cpu_percent=執行測試指令碼,顯示的cpu利用率圖如下100)
create resource pool userqueries with(max_cpu_percent=
100)
現在將資源分配做如下調整:
create resource pool adminqueries with(max_cpu_percent=10)再次執行測試指令碼,顯示的cpu利用率圖如下create resource pool userqueries with(max_cpu_percent=
90)
可以看到,當我們調整資源後,兩個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 不太重要...
空調控制器
概述 隨著汽車業的發展,帶動了汽車空調市場需求持續大幅增長。隨著消費公升級及節能減排政策縮緊,促使汽車空調技術不斷改進,汽車空調已不再是單純的用於製冷制暖,而是涉及到多區域自動溫度調節,整車系統節能環保 車內空氣質素改善等。同時隨著新能源車的發展,會影響到電量的分配和續航里程。新的汽車市場發展下,需...
空調控制器
概述 汽車行業的高速發展,帶動了汽車空調市場需求持續大幅增長。隨著消費公升級及節能減排政策縮緊,促使汽車空調技術不斷改進和完善,汽車空調已不再是單純的用於製冷制暖,而是涉及到多區域自動溫度調節,整車系統節能環保 車內空氣質素改善等。同時隨著新能源車的發展,會影響到電量的分配和續航里程。新的汽車市場發...