許多有經(jīng)驗的數(shù)據(jù)庫開發(fā)或者DBA都曾經(jīng)頭痛于并行查詢計劃,尤其在較老版本的數(shù)據(jù)庫中(如sqlserver2000、oracle 7、mysql等)。但是隨著硬件的提升,尤其是多核處理器的提升,并行處理成為了一個提高大數(shù)據(jù)處理的高效方案尤其針對OLAP的數(shù)據(jù)處理起到了很好的作用。
充分高效地利用并行查詢需要對調(diào)度、查詢優(yōu)化和引擎工作等有一個比較好的了解,但是針對一般場景的應用我們只需要如何常規(guī)使用即可,這里也就不深入描述了,感興趣可以一起討論。
那么這里我就簡單介紹下SQLServer中并行的應用?
什么是并行?
我們從小就聽說過“人多力量大”、“人多好辦事”等,其思想核心就是把一個任務分給許多人,這樣每個人只需要做很少的事情就能完成整個任務。更重要的是,如果額外的人專門負責分配工作,那么任務的完成時間就可以大幅減少了。
數(shù)糖豆
設想你正面對一個裝滿各式各樣糖豆的罐子,并且要求書有多少個。假設你能平均每秒數(shù)出五個,需要大于十分鐘才能數(shù)完這個盒子里的3027個糖豆。
如果你有四個朋友幫助你去做這個任務。你就有了多種策略來安排這個數(shù)糖豆任務,那讓我們模仿SQLServer 將會采取的策略來完成這個任務。你和4個朋友圍坐在一個桌子四周,糖果盒在中心,用勺子從盒子中拿出糖豆分給大家去計數(shù)。每個朋友還有一個筆和紙去記錄數(shù)完的糖豆的而數(shù)量。
一旦一個人輸完了并且盒子空了,他們就把自己的紙給你。當你收集完每個人的計數(shù),然后把所有的數(shù)字加在一起就是糖豆的數(shù)量。這個任務也就完成了。大概1-2分鐘,完成的效率提高了四倍多。當然四個人累加也是十分鐘左右甚至還要多