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

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看( 四 )


幸好,在SQL Server實(shí)現(xiàn)并行運(yùn)算的運(yùn)算符”nestloop”與之相似 。上篇中并行nested loop join的原理中已經(jīng)提到 。
并行Nest loop Join實(shí)現(xiàn)方式
在并行循環(huán)嵌套中,外表數(shù)據(jù)Scan,seek多線程(threads)同時(shí)進(jìn)行(Map),而內(nèi)表的在每個(gè)thread上串行執(zhí)行(Reduce) 。
優(yōu)點(diǎn):

  • 可以減少執(zhí)行過(guò)程中各線程數(shù)據(jù)流的數(shù)據(jù)交換
  • 顯著的減少內(nèi)存需求
上述查詢我用如下的方式實(shí)現(xiàn):

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看


執(zhí)行中輸出實(shí)際執(zhí)行計(jì)劃可以看出,此計(jì)劃中消耗的內(nèi)存15MB,和上述的執(zhí)行計(jì)劃相比有指數(shù)級(jí)的下降,同時(shí)執(zhí)行時(shí)間為不到2s,保證執(zhí)行時(shí)間的同時(shí)明顯降低了資源消耗,從而避免了實(shí)例級(jí)的影響 。
已經(jīng)很美好了:)
如圖7-3:

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看


圖7-3
到這里其實(shí)我們已經(jīng)達(dá)到了我們想要的效果,但還可以更好嗎?我們還需要多了解些 。
上面我講到了并行nest loops的優(yōu)點(diǎn),少資源占用,少數(shù)據(jù)交換 。但就像在我以前的文章中說(shuō)的那樣:”任何術(shù)都是有缺陷的”,前文已經(jīng)提到了并行中很可能造成數(shù)據(jù)的傾斜,如上圖7-3中藍(lán)線中標(biāo)注的外表seek,實(shí)際是只在一個(gè)thread中完成的 。優(yōu)化器為我們加了數(shù)據(jù)交換,使得外部的數(shù)據(jù)在多個(gè)threads下分布均衡與內(nèi)表匹配提升效率,但優(yōu)化器可不會(huì)每次都如此“好心”(智能) 。
其實(shí)在并行seek,scan中由于實(shí)現(xiàn)方式在05到08的過(guò)程變化很大(前文提到過(guò)),使得操作更需注意,這里我們直接上新的方案 。

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看



oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看


通過(guò)查詢時(shí)輸出執(zhí)行計(jì)劃 如圖7-4所示 。
我們可以看到通過(guò)將外表數(shù)據(jù)放入臨時(shí)表中,使得內(nèi)存消耗進(jìn)一步降低,而數(shù)據(jù)較為平均的分布到多個(gè)threads中,你可能看到其中不少threads是沒(méi)有數(shù)據(jù)的,其實(shí)有時(shí)需要我們根據(jù)查詢管控并行度的 。而在執(zhí)行時(shí)間上有可能得到進(jìn)一步的改善!

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看


【oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看】圖7-4
至此,還有沒(méi)有更好的方案呢,當(dāng)然有,優(yōu)化器就是讓我們玩的!
我們可以通過(guò)臨時(shí)表緩解數(shù)據(jù)分布不均的問(wèn)題,但臨時(shí)表創(chuàng)建導(dǎo)入也是成本啊,我們也可以用其他方式誘導(dǎo)優(yōu)化器讓數(shù)據(jù)分布徹底均勻,還記得前面說(shuō)的Round Robin嗎?這里我用特定的寫(xiě)法引導(dǎo)他的數(shù)據(jù)exchange.徹底平均分配,

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看


如圖7-5:

oracle數(shù)據(jù)庫(kù)菜鳥(niǎo)教程 sqlserver日志查看


圖7-5
至此這個(gè)優(yōu)化更合理的解決了面臨的問(wèn)題!
我們的并行原理及實(shí)踐也到此為止吧 。
說(shuō)點(diǎn)題外話,不少朋友認(rèn)為SQL Server是小兒科,沒(méi)內(nèi)容,技術(shù)含量不高,而且在國(guó)內(nèi)的互聯(lián)網(wǎng)公司中又顯得格格不入 。這種想法真心Too Naive 。這里我可以告訴大家,SQL Server,乃至關(guān)系型數(shù)據(jù)庫(kù)的水很深 。如果你是相關(guān)的從業(yè)者,全身心地投入進(jìn)來(lái)吧,其實(shí)很好玩 。

推薦閱讀