国产探花免费观看_亚洲丰满少妇自慰呻吟_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上(基本上等于不進行什么算法判斷了)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明溪县| 郑州市| 翁牛特旗| 隆安县| 高邑县| 榆中县| 海城市| 达拉特旗| 水城县| 益阳市| 城市| 临沧市| 虹口区| 无棣县| 綦江县| 堆龙德庆县| 平安县| 长宁区| 台安县| 西乌珠穆沁旗| 东阿县| 昌图县| 昭觉县| 内乡县| 沽源县| 浏阳市| 吉林市| 和平县| 环江| 福鼎市| 宜良县| 西乌珠穆沁旗| 道孚县| 苏州市| 宜兴市| 临江市| 比如县| 阳朔县| 马鞍山市| 盐城市| 工布江达县|