SQL Server 2014裡的IO資源調控器

2021-09-22 06:58:26 字數 3953 閱讀 7190

在本文中,我們將來看看sql server 2014在資源調控器方面增加了哪些新的功能。資源調控器(resource governor)是從sql server 2008開始出現的一項功能。它是用於管理 sql server 工作負荷和系統資源使用情況的功能。 在sql server 2014之前,資源調控器只能限制某些使用者訪問sql server所占用的cpu頻寬、記憶體資源。但是隨著虛擬化和雲技術的發展,io的控制有了很大的需求。iaas(infrastructure as a service),即基礎設施服務提供商需要通過對io資源池的資源設定,控制每個客戶需要的資源。這可以保證效能不會受其他客戶的影響,同時也可以基於使用者的資源請求設定不同的sla或者資料庫服務。另乙個需求是it管理員或者資料庫管理員希望可以將oltp工作負載與維護操作進行隔離。比如重建索引是一種常見的操作,因為要掃瞄整個索引或者表,會導致大量的io請求。通過使用io資源管理可以限制這些操作的io負載,從而保證oltp的併發和效能不受影響。使整個伺服器環境更加的穩固。

在sql server 2014中,根據客戶的請求,增加了對io資源的控制來解決這些問題。

資源調控器中資源池,工作負荷組,分類的概念和之前無異。

下面是sql server 2014增加的新特性

具體請參考:

當乙個使用者成功登入到sql server,如果io資源調控被設定的話,資料庫引擎將會呼叫分類函式去判斷當前登入使用者屬於哪乙個工作負荷組。當此使用者執行一條sql語句產生對io的讀寫時,資料庫引擎不會將此io讀寫請求直接傳送給os,取而代之的是將此io請求放到乙個佇列中,sql io資源管理會根據當前使用者的設定和已有資源的使用情況從佇列中取出相應的io請求傳送給os進行執行,以實現對io資源的管理與控制。

我們以下面為例說明如何在乙個sql server例項中使用io資源調控器。

假設我們有一台資料庫主機或者執行在私有雲上的整合資料庫,我們需要根據多個客戶的要求放多個資料庫,這樣可以實現資源的有效利用同時節省成本。如果客戶的乙個資料庫執行io密集型的工作負載,這樣會導致整個磁碟的io效能,從而影響其他使用者的操作。

為了簡化我們的演示,假設有兩個使用者需要訪問此資料庫,其中乙個使用者為it管理人員,需要定期的備份資料庫以保重資料安全,還有乙個使用者為財務人員,需要讀取資料以生成報表。我們為這兩個使用者建立兩個資源池和乙個可以將使用者會話對映到對應資源池的分類器函式。會話為使用者backup被對映到資源池groupbackup,會話為使用者report對映到資源池groupreport。為了使演示清晰明了,我們將資源池groupbackup最小和最大iops設定為1,將資源池groupreport最小和最大iops設定為2。

1

usemaster;23

go45--

67create workload group

8groupadmin;910

create workload group

11groupbackup;

1213

create workload group

14groupreports;

1516

--create classifier function

1718

create

function dbo.rgclassifier() returns

sysname

19with

schemabinding

20as

21begin

2223

declare

@grp_name

sysname

2425

if (suser_name() =

'admin')

2627

set@grp_name='

groupadmin'28

29if (suser_name() =

'backup')

3031

set@grp_name='

groupbackup'32

33if (suser_name() =

'report

' )--

34 server%')

3536

set @grp_name =

'groupreports'

3738

return @grp_name

3940

end;

4142

go43

44-- register the classifier function with resource governor

4546

alter resource governor with (classifier_function

47= dbo.rgclassifier);

48go

4950

-- start resource governor

5152

alter resource governor reconfigure;

53go

5455

-- create resource pools and map it to workload groups

5657

create resource pool

58pooladmin

59with (

60min_iops_per_volume = 100,

61max_iops_per_volume = 100

62);

6364

create resource pool poolbackup

65with (

66min_iops_per_volume = 1,

67max_iops_per_volume = 1

68);

6970

create resource pool poolreports

71with (

72min_iops_per_volume = 2,

73max_iops_per_volume = 2

74);

7576

alter workload group

77groupadmin

7879

using pooladmin;

8081

alter workload group

82groupbackup

8384

using poolbackup;

8586

alter workload group

87groupreports

8889

using poolreports;

9091

alter resource governor reconfigure;

9293

go

通過這個配置,sql server將會限制io資源池的負載,從而滿足2個iops給使用者report,1個iops給使用者backup。通過設定io資源調控器對客戶設定最大的工作負載限制,一方面可以達到**的效能,同時還會保護其他的使用者效能不受影響。

限制:

io資源調控器主要是針對物理io(磁碟讀寫)的限制,對邏輯io(記憶體)是不起作用的。此外,io資源調控器也只會限制使用者完成任務產生的讀寫io。對於一些sql

server 發起的io,是源於sql本身的後台程序,例如:checkpoint, lazy writer。這部分的io都在預設的internal工作負荷組中,是無法被限制的。所以io資源調控器對io的控制主要的兩個應用場景為限制重建索引和備份帶來的大量磁碟開銷。

SQL Server 2014裡的效能提公升

在這篇文章裡我想小結下sql server 2014引入各種驚豔效能提公升!快取池擴充套件的想法非常簡單 把頁檔案儲存在非常快的儲存上,例如ssd硬碟,用來擴充套件快取池。快取池擴充套件來得非常方便,如果你不能給你的資料庫伺服器物理上增加更多的記憶體,可以考慮使用快取池擴充套件。資源調控器首次是在s...

SQL Server 2014裡的IO資源調控器

在本文中,我們將來看看sql server 2014在資源調控器方面增加了哪些新的功能。資源調控器 resource governor 是從sql server 2008開始出現的一項功能。它是用於管理 sql server 工作負荷和系統資源使用情況的功能。在sql server 2014之前,資...

sql server 2014記憶體表

記憶體資料庫,指的是將資料庫的資料放在記憶體中直接操作。相對於存放在磁碟上,記憶體的資料讀寫速度要高出很多,故可以提高應用的效能。微軟的sql server 2014已於2014年4月1日正式發布,sql 2014乙個主要的功能即為記憶體資料庫。目前來說,資料庫映象和複製是無法與記憶體優化表相容的,...