天天看點

SQL Server 2012中Task是如何排程的?

     從SQL Server 7.0以來排程算法并沒有很大的改變。

算法概述:

     排程從配置設定NUMA節點開始,使用循環配置設定的方式,當一下連結來了,先配置設定給Node1,然後配置設定給Node2,然後在Node1

     配置設定了NUMA節點之後,在配置設定排程器,根據Load factor來做排程,Load factor可以簡單的認為是配置設定給排程器的任務數量

     task配置設定是根據Load factor,如果首先的排程器比其他排程器多了120%,那麼選擇其他排程器,否則現在首選排程器

SQL Server 2012排程算法隻在企業版上做了修改

     新的連接配接配置設定:新的連接配接是用環形循環配置設定,和前面提到的一樣。所有的sql server 2012 産品都是這樣配置設定連接配接的,然後查詢目标節點把連接配接配置設定給負荷最小的排程器,然後這個排程器變為這個連接配接的首選排程器。

SQL Server 2012中Task是如何排程的?

     新的連接配接并沒有首選排程器,是以需要再配置設定的節點内給連接配接配置設定一個排程器,負荷最小的排程器被選中,如圖的例子現在了Node1的sched2.

SQL Server 2012之前和非企業版

     這個比較簡單,當task被請求,使用首選排程器,繼續上面的例子如圖:是sched2,當load factor是其他排程器120%以上的時候就需要重新選中排程器。

SQL Server 2012中Task是如何排程的?

SQL Server 2012企業版

     在企業版中,對load factor的算法進行了改進。

     每個排程器,都有一個以cpu為目标的,資源池,并是有load factor對能力進行跟蹤。并不是Load factor一樣120%,而是通過每個資源池的平均cpu

SQL Server 2012中Task是如何排程的?

排程還是以首選排程器開始,如果排程之後,并沒有比同節點内的所有排程器平均少80%,那麼可以排程,否則做排程平衡,選擇可用資源最多的排程器。

     排程的例子(筆者認為例子有些錯誤,是以做了修改):

Scheduler

RG Pool Target

Pool Runnable Tasks

Avg Pool/Task

1

50

10

5

2

8

6.25

Currently Best Target – More resources to provide for tasks in the same pool

假設sched1 可以為每個task提供5,那麼sched2可以提供6.25

目前平均是 (5+6.25)/2 = 5.625

當有一個任務要被配置設定,首選是sched1那麼如果被配置設定,可提供 50/11 = 4.545 > 5.625*0.8 = 4.5008是以可以配置設定

11

4.545

  Not below 80th percentile

目前平均= 5.3977 (6.25 + 4.5454/2) 

然後又有一個新的要配置設定,首選還是sched1,50/12 = 4.1666 < (4.545+6.25)/2*0.8 = 4.3181是以需要做調整,選擇自願最多的一個排程器

4.5454

9

5.55

 Added task

目前平均值 5.047 (5.55 + 4.5454 / 2)

相關Trace Flag

     -T8008 強制排程,不管scheduler提示,總是排程給最小的負荷(使用最小load factor或者資源池)

     -T8016 忽略負載均衡,總是排程給首選排程器