程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sqlserver如何限制某個job占用太多資源

sqlserver如何限制某個job占用太多資源

編輯:關於SqlServer
 

可以通過多種配置數據庫服務器的方式來提高性能。如索引、統計信息、hints、物理設計和服務器配置等。

當你完成上面那些配置後,還依舊有少量存儲過程、查詢運行得很慢時,由於硬件資源限制,可能已經沒什麼好調整。如一個數據庫服務器支撐著多個應用系統,其中一個是報表系統,而報表系統往往都是非常耗資源的。

在2008之前,對於這種問題,很難作出有效的解決方法。從2008開始,引入了一個資源調控器(ResourceGovernor)來協助解決這類問題。資源調控器(下面簡稱RG),可以管理服務器上CPU和內存資源。不同類型的請求可以被分配到不同的資源。

RG的功能可以分為3個組件:

1、 分類(Classification)

2、 資源池(Resource pool)

3、 工作負荷組(Workload group)

RG的基本功能/體系


 

分類(Classification):定義一個用戶自定義標量函數作為RG的分類函數,每當請求到達時,分類函數就會執行,區分請求的類型,然後放到特定的工作負荷組(Workload Group)中。

 

工作負載組(WorkloadGroup):一個邏輯單元,包含了一組資源。屬於特定的資源池(Resource Pool)SQLServer創建了兩個默認的工作負載組,internal和default。

 

資源池(ResourcePool):包含對請求分配特定工作負載組的資源規則定義,SQLServer同樣創建了兩個資源池internal和default。

 

通過SQLServerManagement Studio 配置資源調控器:
在開始之前,先來創建一個現實環境,假設AdventureWorks數據庫是生產數據庫,且有數十億的數據。這個庫提供多個應用程序使用。一個應用程序是用於web程序,一個是OLTP。另外一個應用程序是報表系統。當查詢報表的時候,會影響到web程序,為了解決這個問題,可以借助RG來保存web程序的CPU和內存資源。這裡保留web程序獲得最少50%的CPU和內存,報表使用25%。

本文將演示使用SQLServer Management Studio(下稱SSMS)來實現。

 

准備工作:
本文將創建兩個資源池和工作負載組。用於給web和報表程序之用。獨立的用戶名分類函數區分請求很有幫助,基於用戶名,分類函數將發送請求到特定的工作負載組。

 

步驟:
1、 打開ssms,確保這個登錄有管理員權限,如果不能,那需要有Alter LOGIN和CONTROL SERVER的權限。

2、 在新建窗口輸入,注意本文使用AdventureWorks2012數據庫:

 


[sql] view plaincopyprint?
USE master
GO

Create LOGIN [AW_WebAppUser] WITH PASSWORD=N'AW_WebAppUser123' ,DEFAULT_DATABASE=AdventureWorks2012
GO

USE AdventureWorks2012
GO

Create USER [AW_WebAppUser] FOR LOGIN [AW_WebAppUser]
GO
Alter ROLE [db_owner] ADD MEMBER [AW_WebAppUser]
GO

Create LOGIN [AW_ReportAppUser] WITH PASSWORD=N'AW_ReportAppUser123',DEFAULT_DATABASE=AdventureWorks2012
GO

USE AdventureWorks2012
GO
Create USER [AW_ReportAppUser] FOR LOGIN [AW_ReportAppUser]
GO
Alter ROLE [db_owner] ADD MEMBER [AW_ReportAppUser]
GO

USE master
GO

Create LOGIN [AW_WebAppUser] WITH PASSWORD=N'AW_WebAppUser123' ,DEFAULT_DATABASE=AdventureWorks2012
GO

USE AdventureWorks2012
GO

Create USER [AW_WebAppUser] FOR LOGIN [AW_WebAppUser]
GO
Alter ROLE [db_owner] ADD MEMBER [AW_WebAppUser]
GO

Create LOGIN [AW_ReportAppUser] WITH PASSWORD=N'AW_ReportAppUser123',DEFAULT_DATABASE=AdventureWorks2012
GO

USE AdventureWorks2012
GO
Create USER [AW_ReportAppUser] FOR LOGIN [AW_ReportAppUser]
GO
Alter ROLE [db_owner] ADD MEMBER [AW_ReportAppUser]
GO

 

 

3、 創建分類函數:


[sql] view plaincopyprint?
USE MASTER
GO

Create FUNCTION dbo.RGClassifier( )
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @Workload_GroupName SYSNAME

IF SUSER_NAME() = 'AW_WebAppUser'
SET @Workload_GroupName = 'rg_WebApp'

ELSE
IF SUSER_NAME() = 'AW_ReportAppUser'
SET @Workload_GroupName = 'rg_ReportApp'

ELSE
SET @Workload_GroupName = 'default'
RETURN @Workload_GroupName
END

USE MASTER
GO

Create FUNCTION dbo.RGClassifier( )
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @Workload_GroupName SYSNAME

IF SUSER_NAME() = 'AW_WebAppUser'
SET @Workload_GroupName = 'rg_WebApp'

ELSE
IF SUSER_NAME() = 'AW_ReportAppUser'
SET @Workload_GroupName = 'rg_ReportApp'

ELSE
SET @Workload_GroupName = 'default'
RETURN @Workload_GroupName
END

 

 


4、 打開ssms,右鍵資源調控器節點,選擇【屬性】,就見到如下:

 

 

5、 點擊啟用【啟用資源調控器】:

 

 

6、 在分類函數名下拉框中,選擇dbo.RGClassifier():

 

 

7、 在資源池網格中,可以找到兩個默認資源池defalut和internal,現在添加一個新的資源池叫做rp_WebApp,並配置為如圖,記住總和不能超過100:

 

 

8、 在資源池的工作負荷組:rp_WebApp中,創建一個新的工作負荷組rg_WebApp,並配置CPU時間為300:  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved