SQL Server2008 新特性 Resource Governor
Sql Server2008 推出了已經有一段時間了,這裡給大家介紹一下 SQL Server2008 的一個很不錯的新特性,Resource Governor。
相信大家都遇到過,一個服務器上面運行多個數據庫的情況,如果1個數據庫占用資源過多,很可能直接導致另外一個數據庫無法處理,直到超時的情況。過去這種情況基本無法處理(當然不排除使用三方程序處理的方法)。嘿嘿,在新的SQL Server 2008 中,就可以完美的解決這個問題了。答案就是Resource Governor。
Resource Governor 可以通過創建資源池(Resource Pool)的方式,對不同資源池分別分配服務器資源(CPU,內存),這裡設置的是,資源池最繁忙時期的分配值。簡單的說,現在我有兩個數據庫,DataBaseA和DataBaseB,那麼我們可以創建兩個資源池PoolA和PoolB,給PoolA分配10%的CPU和內存,PoolB分配90%的CPU和內存。那麼當DataBaseA和DataBaseB都繁忙的時候,系統會分別分配相應的資源給他們,讓他們都能夠完成自己的工作(當然,性能可能有所下降,畢竟只使用10%的資源),從而避免了高並發性時,資源獨占的情況。很好吧,下面我們就通過一個實例來給大家演示一下。
1. 首先可以查看一下當前資源池的配置情況
USE master;
GO
SELECT * FROM sys.dm_resource_governor_configuration;
GO
如果如上圖所示,那麼說明目前沒有創建任何資源池。(創建資源池的時候需要綁定一個classifIEr的函數,如果綁定了,會顯示函數的ObjectID)
2. 創建2個資源池MarketingPool和DevelopmentPool,
CREATE RESOURCE POOL MarketingPool
WITH (MAX_CPU_PERCENT = 10);
GO
CREATE RESOURCE POOL DevelopmentPool
WITH (MAX_CPU_PERCENT = 90);
GO
MarketingPool分配了10%CPU資源,DevelopmentPool分配了90%CPU資源。(當然你也可以加上內存的分配,不過個人感覺一般CPU比較重要,內存這東西不好說)
3. 可以先看一下當前Resource Governor的配置情況
SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
你會發現,如上所示結果,只有兩個資源池,並且不是我們創建的。
internal和default資源池是系統默認的資源池,如果沒有手動設置Resource Governor的話,創建的數據庫會被默認放到default資源池當中。(後面你還會看到對應的 WORKLOAD GROUP)
為什麼我們創建的資源池沒有看到呢?其實是我們的配置還沒有設定上去,SQL Server08的設置修改後,需要手動 RECONFIGURE 來重置配置信息。