日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

oracle數據庫菜鳥教程 sqlserver日志查看

在《深入解析SQL Server并行執(zhí)行原理及實踐(上)》談完并行執(zhí)行的原理,咱們再來談談優(yōu)化,到底并行執(zhí)行能給我們帶來哪些好處,我們又應該注意什么呢,下面展開 。
Amdahl’s Law
再談并行優(yōu)化前我想有必要談談阿姆達爾定律,可惜老爺子去年已經駕鶴先去了 。

oracle數據庫菜鳥教程 sqlserver日志查看


其中 P:可以并行的百分比
N:算法并行計算使用的“CPU”
這里我們舉個簡單的例子,我們來做一份大餐,如圖1-1所示:

oracle數據庫菜鳥教程 sqlserver日志查看


圖1-1
土豆泥,荷蘭豆,雞排還有整體組合各需十分鐘 。在這里前三個食材是可以共同執(zhí)行的,也就是說4個步驟中3步可并行 P=3/4,其中3個食材可同時加工N=3,則根據公式S(N)=1/(1-0 。75)+0 。75/3 =2這個操作整體相比完全串行可提升200%即做這個大餐的時間由40分鐘,縮短到20分鐘 。
這里實際引申出一個事實,整體的操作時間和整體事務中串行的比例多少有很大關聯,這個引申到我們的并行調優(yōu)中,并行可以改進查詢,但受串行部分影響也是很大的,同時也告之我們沒有必要過度串行優(yōu)化,還是做大餐,即便并行可做的越來越多,但改進的效果卻越發(fā)不明顯,過度無謂的優(yōu)化我們是應該避免的,如圖1-2:

oracle數據庫菜鳥教程 sqlserver日志查看


圖1-2
SQL Server中禁止并行的一些操作
上面我們了解了并行的操作性,但在SQL Server并不是所有操作都可以并行的,有些操作符會導致整個執(zhí)行計劃無法并行,而有些會使得某些分支(branch)無法并行,下面羅列出相關的操作符對并行的影響,這些感興趣的朋友可以自行測試 。
執(zhí)行計劃禁止并行
T-SQL scalar functions
更新表變量數據
訪問系統(tǒng)表
動態(tài)游標
Branche不能并型
TOP(global)
2012以前窗口函數(Row_Number)
Multi -Statement Function
Backward scan
CTE遞歸
并行執(zhí)行的優(yōu)點
說了一些限制,我們再來簡單說下優(yōu)點,要不開此文章的意義何在 。實際上在上半部分文章中大家可能已經感受到它的優(yōu)點了,這里再簡單總結下 。實際上在并行中,計算工作是均勻的分配在參與并行的threads中,所有的threads同時工作,無先后之分 。某些操作中threads自身的工作完成后還會協助threads工作,雖然會有短暫的CXPACKET等待(數據分布,預估等問題)但基本可以解決或是緩解 。
執(zhí)行時分支(Branchs)間有時可以是無順序的,更好地增加了并行 。
針對CPU-Bound的操作,SQL Server可以說時隨著CPU(并行度)的增加,性能也基本是線性增加的 。
并行相關的設置
SQL Server中有并行相關的一些設置,主要有兩個:并行閾值及最大并行度 。
并行閾值:上篇已經提到過,查詢子樹大小觸發(fā)并行的條件,此值的設定仁者見仁智者見智了,一般設定為實例執(zhí)行計劃編譯的平均查詢子樹大小上下幅度不超過20%
最大并行度:查詢中的操作符可同時采用的線程數 。這個值便隨著NUMA的誕生應尤為注意,早在SQL 2005研發(fā)階段,NUMA開始出現,而SQL 2005也提供了支持,但程度有限,隨著SQLOS的進一步演化在SQL2008時對其支持已經很不錯了,這里有大家都知道的NUMA架構下的foreign memory問題,實際上SQL Server在采用并行時會試圖將并行的線程都集中在某個NUMA節(jié)點下,所以我們在配置初始參數時并行度最好控制在某個NUMA節(jié)點的核數內,而且最好是偶數,這里面涉及到很多SQLOS的知識,限于篇幅就不深入了 。

推薦閱讀