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