国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sql server 2012 數據引擎任務調度算法解析(下)

2024-08-31 00:54:17
字體:
來源:轉載
供稿:網友
sql server 2012 數據引擎任務調度算法解析(下)

上次我們說到,sql server 2012的企業版的任務調度流程,一直到給新連接分配了scheduler,都是與以前的版本算法是一致的,只有在進行任務分配的時候,算法才有了細微的調整。

新算法的目的是盡量減小在同一NUMA節點內隨機分配scheduler帶來的性能影響(原來的算法也不能稱為隨機,因為是按負載系數進行分配的,但是由于負載系數會不確定,所以暫時將原分配算法定性為:隨機~~)

我們知道,在sql server 2008版本以后,引入了Resource Governor(后文簡稱RG),在2012版本中,微軟就將Resource Governor這個特性應用到了任務調度算法中來,這里需要注意的是,如果沒有開啟RG功能,那么sqlos將會把default RG設置應用到算法中。

PS:如果不知道Resource Governor是什么的同學請參考MSDN:https://msdn.microsoft.com/en-us/library/bb933866(v=sql.100).aspx

如果對RG有了解,就會知道RG是一個對資源進行分配的設置選項,它可以對CPU或內存的最大、最小可用資源進行配置。

每個scheduler也都有自己的目標資源池,每個SCHEDULER的資源池大小基本等于RG最大配置/scheduler總數的平均值

scheduler cpu pool=max cpu/scheduler count

圖為default的RG設置

假設共有4個可用的scheduler,那么每個sheduler的可用cpu上限大概就是25%必須要注意的一點是,新的調度算法并沒有將當前CPU使用率做為一個參考指標,換句話說,有可能一個scheduler已經占用了CPU80%的計算資源,但是在進行任務調度的時候,還是按照100/4=25%進行計算的

OK,下面我們開始說明一下新的算法流程:

當需要給task指派一個scheduler的時候,如果首選scheduler(PReferredscheduler)在添加這個task后,不會使得當前scheduler的平均任務資源利用率下降到當前NUMA節點內平均資源利用率的80%以下,則將任務指派給首選scheduler;反之,則將任務分配給同一NUMA節點中有最多可用資源的sheduler上。

如果寫成邏輯公式則是這種計算方式:

if (preferredscheduler pool target/runable task+1)>avg (sum(scheduler pool target/runable task))*0.8

  preferredscheduler task+1

else

  mostpool resourcescheduler task+1

也許這樣說起來并不直觀,我們用一些圖例和計算說明一下具體流程

依然模擬了這樣一個環境:2NUMA,四核,1433端口綁定到NUMA0,使用默認的RG設置(也就是MAX CPU=100%)

我們可以列出下表

全局的平均值則=(5.56+4.55)/2=5.05,那么80%數據值為5.05*0.8=4.04

1.

在sche1發起了一個任務分配的任務,計算公式則如下

scheduler1 avg = 50/(11+1)=4.17

我們發現4.17這個數值要高于全局平均使用率的80%(4.04),那么這個任務還是會分配給首選scheduler,也就是sche1

(這里注意:如果按以前版本負載系數的算法,則是(11+1)/9=1.33,在sche1添加這個任務,任務負載會超出sch0的20%以上,則此任務則會分配給sche0)

2.

上面的表格變為如下:

全局的平均值則=(5.56+4.17)/2=4.86,那么80%數據值為4.86*0.8=3.89

3.

接下來我們再繼續在sche1上添加新的任務,計算公式則如下

scheduler1 avg = 50/(12+1)=3.85<3.89

則新的任務會分配到非首選schduler上,也就是sche0上,表格變成

我們可以看出,通過新的算法,并沒有對不同的scheduler上的任務造成過大的數量差距,而且減小了在不同scheduler上切換任務的次數

以上就是sql server 2012任務調度算法的一些基本內容

補充

在服務器啟動時候,我們可以使用2個trace flag進行調度算法的指定,當然和一般的trace flag一樣,如果不是特別需要且經驗非常豐富的DBA,不要對這些看似高大上的參數進行調整

-T8008 - 使用2012企業版之前的調度算法,也就是我在第一篇中寫到的算法

-T8016 - 強制指派任務到首選scheduler上(基本上等于不進行什么算法判斷了)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梅州市| 株洲市| 乃东县| 城固县| 绥棱县| 新龙县| 泸水县| 洛川县| 商丘市| 衡水市| 新乐市| 延长县| 教育| 高邮市| 茂名市| 巴马| 时尚| 南涧| 丹阳市| 涟水县| 肥东县| 元氏县| 田林县| 海盐县| 敦化市| 潜江市| 兴和县| 西安市| 牡丹江市| 马尔康县| 敖汉旗| 东光县| 尖扎县| 邯郸县| 夏邑县| 阿克| 肥东县| 甘孜县| 昔阳县| 徐州市| 南阳市|