從SQL Server 7.0以來排程算法并沒有很大的改變。
算法概述:
排程從配置設定NUMA節點開始,使用循環配置設定的方式,當一下連結來了,先配置設定給Node1,然後配置設定給Node2,然後在Node1
配置設定了NUMA節點之後,在配置設定排程器,根據Load factor來做排程,Load factor可以簡單的認為是配置設定給排程器的任務數量
task配置設定是根據Load factor,如果首先的排程器比其他排程器多了120%,那麼選擇其他排程器,否則現在首選排程器
SQL Server 2012排程算法隻在企業版上做了修改
新的連接配接配置設定:新的連接配接是用環形循環配置設定,和前面提到的一樣。所有的sql server 2012 産品都是這樣配置設定連接配接的,然後查詢目标節點把連接配接配置設定給負荷最小的排程器,然後這個排程器變為這個連接配接的首選排程器。

新的連接配接并沒有首選排程器,是以需要再配置設定的節點内給連接配接配置設定一個排程器,負荷最小的排程器被選中,如圖的例子現在了Node1的sched2.
SQL Server 2012之前和非企業版
這個比較簡單,當task被請求,使用首選排程器,繼續上面的例子如圖:是sched2,當load factor是其他排程器120%以上的時候就需要重新選中排程器。
SQL Server 2012企業版
在企業版中,對load factor的算法進行了改進。
每個排程器,都有一個以cpu為目标的,資源池,并是有load factor對能力進行跟蹤。并不是Load factor一樣120%,而是通過每個資源池的平均cpu
排程還是以首選排程器開始,如果排程之後,并沒有比同節點内的所有排程器平均少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 忽略負載均衡,總是排程給首選排程器