第12 24周 並行執行計畫

2021-09-06 23:52:19 字數 1735 閱讀 9912

在這一期的效能調優培訓裡,我想詳細講解下sql server裡的並行執行計畫(parallel execution plans)。執行乙個有並行執行計畫的查詢,意味著sql server從執行計畫裡進行必須的運算子需要使用多執行緒。首先我會介紹下並行執行計畫裡最常用的運算子,然後我們來分析下sql server是如何決定是否要使用並行執行計畫。

對於並行執行計畫最常見的誤解就是多執行緒只用於整個執行計畫。這是錯誤的,因為sql server可以分配多個工作執行緒給所有可並行(parallelism-aware)運算子。這就意味者乙個大型的並行計畫可以消耗大量的執行緒。sql server在並行計畫裡區分2類運算子:可並行(parallelism-aware)運算子,和稱為交換運算子(exchange operators)

sql server使用下列3個交換運算子:

當你閱讀並行執行計畫時,你總會看到2種運算子的結合。每個執行計畫必須生成乙個單執行緒的結果,因此在並行執行計畫的結尾,你總能看到gather streams運算子。

查詢優化器是否生成乙個並行執行計畫也取決於你使用的查詢結構是否會阻止並行計畫,例如:

在並行計畫裡,也有很多查詢結構會強制序列區域(這部分操作會使用並行計畫):

在你的並行計畫裡,序列區域越少,你的查詢越快。當你下次寫你的查詢時,好好考慮這點。

每個執行計畫都會被sql server分配乙個成本因素(cost factor)。成本因素就是用來告訴sql server這個執行計畫有多貴的簡單數字。這個數字越大,執行計畫執行的關聯成本就越高。

sql server有乙個稱為並行開銷閥值(cost threshold for parallelism)的配置選項,用來定義成本因素,在哪個點查詢優化會考慮使用並行計畫。預設這個配置選項是5,也就說查詢高於這個成本值,只要並行計畫可行,就會使用並行計畫。

當並行計畫被查詢優化器編譯好後,最大並行度(

max degree of parallelism(maxdop))選項定義對執行計畫中的每個並行運算子可用執行緒數。我剛才提過,並行執行計畫裡的每個運算子都可以用多執行緒執行,而不是整個執行計畫。當然在並行執行計畫裡,執行緒可以被前乙個運算子共享和重用。可以通過伺服器屬性->高階->並行配置這些屬性:

預設最大並行度(maxdop)選項值是0,因此sql server會預設將並行查詢穿過所有分配給sql server的cpu核心。當你使用numa(non uniform memory access)系統時,這個會導致效能問題。最佳實踐是限制maxdop選項值,在numa節點裡的核心數(包括超執行緒的核心數)範圍內。這樣就可以保證sql server的並行計畫呆在numa節點內。

這一期的效能調優培訓裡我講解了sql server裡的並行執行計畫,你學到了在並行執行計畫裡涉及到的各種運算子,還有在sql server裡你如何配置並行度。如果你想對並行計畫有更深入的了解,可以看下…………(此次內容待完善)。

看完這篇文章,效能調優培訓

0812_12_並行執行計畫.rar

AsyncTask並行執行

使用asynctask時發現乙個奇怪的現象,即建立多個任務的時候,他是乙個乙個按順序執行的,查資料之後發現 在1.5中初始引入的時候,asynctask 執行 asynctask.execute 起來是順序的,當同時執行多個 asynctask的時候,他們會按照順序乙個乙個執行。前面乙個執行完才會執...

ORACLE 的並行執行

1.並行查詢 例如 select count from big table 未設定並行查詢時,這個查詢是典型的序列查詢,不設計並行化,可以用 select from big table dbms xplan.display 檢視一下執行計畫。啟用並行查詢方法多種,可直接在查詢中使用乙個提示,或者修改...

Oracle並行執行簡介

一.概念介紹 並行執行,就是將乙個大型序列任務物理地劃分為多個較小的部分,這些較小的部分可以同時進行處理。這就好比蓋房子,有一些事情可以同時進行,比如 鋪設管線和電路配線可以同時進行。盡量讓能同時進行的事情同時處理,能夠大大提高整個任務的執行速度。二.並行執行使用場景 並行執行並不是萬能藥,有時候並...