背景
所有并行執(zhí)行查詢的DBMS都提供了以下幾個好處:
- 提高吞吐量和延遲性能。
- 提高可用性酷麦。
- 可能降低總體擁有成本(TCO)矿卑。
在并行或分布式DBMS中,數(shù)據(jù)庫分布在多個資源上以提高并行性沃饶。
數(shù)據(jù)庫“顯示”為應(yīng)用程序的單個數(shù)據(jù)庫實例母廷。單節(jié)點DBMS的SQL查詢應(yīng)該在并行或分布式DBMS上生成相同的結(jié)果。
并行DBMS:
- 節(jié)點在物理上彼此靠近糊肤。
- 節(jié)點與高速LAN連接琴昆。
- 假設(shè)節(jié)點之間的通信成本快速可靠。
分布式DBMS:
- 節(jié)點可以相距很遠(yuǎn)馆揉。
- 節(jié)點使用公共網(wǎng)絡(luò)連接业舍。
- 節(jié)點之間的通信成本較慢,故障也不容忽視升酣。
并行的類型
- Inter-Query:DBMS同時執(zhí)行不同的查詢舷暮。這可以提高吞吐量并減少延遲。查詢更新數(shù)據(jù)庫時噩茄,并發(fā)性很棘手下面。
- Intra-Query:DBMS并行執(zhí)行單個查詢的操作。這減少了長時間運行的查詢的延遲巢墅。
Process Models
DBMS Process Model定義了系統(tǒng)如何支持來自多用戶應(yīng)用程序/環(huán)境的并發(fā)請求诸狭。
DBMS由更多或更多的Worker組成,他們負(fù)責(zé)代表客戶端執(zhí)行任務(wù)并返回結(jié)果君纫。
方法#1 - Process per Worker:
- 每個worker都是一個單獨的OS進(jìn)程驯遇,因此依賴于OS調(diào)度程序。
- 將共享內(nèi)存用于全局?jǐn)?shù)據(jù)結(jié)構(gòu)蓄髓。
- 進(jìn)程崩潰不會導(dǎo)致整個系統(tǒng)崩潰叉庐。
方法#2 - 進(jìn)程池:
- Worker使用池中任何可用的任何進(jìn)程。
- 仍然依賴于OS調(diào)度程序和共享內(nèi)存会喝。
- 由于無法保證在查詢之間使用相同的進(jìn)程陡叠,因此這種方法可能對CPU緩存局部性不利玩郊。
方法#3 - 每個WORKER一個線程:
- 具有多個工作線程的單個進(jìn)程。
- DBMS必須管理自己的計劃枉阵。
- 可能會或可能不會使用調(diào)度線程译红。
- 雖然線程崩潰(可能)會導(dǎo)致整個系統(tǒng)崩潰,但我們必須確保編寫高質(zhì)量的代碼以確保不會發(fā)生這種情況兴溜。
使用多線程體系結(jié)構(gòu)的優(yōu)點是每個上下文切換的開銷更少侦厚,并且您不必管理共享模型。 每個工作者模型的線程并不意味著您具有查詢內(nèi)并行性(intra-query
parallelism)拙徽。
對于每個查詢計劃刨沦,DBMS必須決定執(zhí)行的位置,時間和方式:
? 它應(yīng)該使用多少個任務(wù)膘怕?
? 它應(yīng)該使用多少個CPU核心想诅?
? 任務(wù)執(zhí)行的CPU核心是什么?
? 任務(wù)應(yīng)在何處存儲其輸出岛心?
多個QUERY的并行
如果都是讀来破,比較簡單。涉及到寫鹉梨,很難做對讳癌。要用到隔離或者鎖。我會在之后的2PL,OCC,MVCC里介紹
單個QUERY的并行
此類并行性的目標(biāo)是通過并行執(zhí)行其運算符來提高單個查詢的性能存皂。 每個關(guān)系運算符都有并行算法晌坤。
Intra-Operator Parallelism
- 查詢計劃的運算符被分解為獨立實例,這些實例在不同的數(shù)據(jù)子集上執(zhí)行相同的函數(shù)旦袋。
- DBMS在查詢計劃中插入exchange運算符骤菠,以合并來自子運算符的結(jié)果。
交換運算符阻止DBMS在計劃中執(zhí)行它上面的運算符疤孕,直到它從子節(jié)點接收到所有數(shù)據(jù)
Inter-Operator Parallelism
- 操作重疊商乎,以便將數(shù)據(jù)從一個階段傳遞到下一個階段而不實現(xiàn)。這有時稱為流水線并行祭阀。
-
此方法未在傳統(tǒng)關(guān)系DBMS中廣泛使用鹉戚。 并非所有算子都能在他們看到孩子們的所有元組之前發(fā)出輸出。 這在流處理系統(tǒng)中更常見专控,該系統(tǒng)是在輸入元組流上不斷執(zhí)行查詢的系統(tǒng)抹凳。
IO 并行
如果磁盤始終是主要瓶頸,則使用其他進(jìn)程/線程并行執(zhí)行查詢將無法提高性能伦腐。因此赢底,我們需要一種方法將數(shù)據(jù)庫拆分為多個存儲設(shè)備。
多磁盤并行
配置OS /硬件以將DBMS的文件存儲在多個存儲設(shè)備中⌒叶常可以通過存儲設(shè)備和RAID配置來完成粹庞。這對DBMS是透明的。它不能讓W(xué)orker在不同的設(shè)備上運行洽损,因為它不知道潛在的并行性庞溜。
基于文件的分區(qū)
某些DBMS允許您指定每個單獨數(shù)據(jù)庫的磁盤位置。緩沖池管理器將頁面映射到磁盤位置趁啸。如果DBMS將每個數(shù)據(jù)庫存儲在單獨的目錄中强缘,這在文件系統(tǒng)級別也很容易。但是不傅,可能會共享日志文件。
邏輯分區(qū)
將單個邏輯表拆分為單獨存儲/管理的不相交的物理段赏胚。這種分區(qū)對于應(yīng)用程序來說理想地是透明的访娶。也就是說,應(yīng)用程序應(yīng)該能夠訪問邏輯表而無需關(guān)心事物的存儲方式觉阅。
垂直分區(qū):
- 將表的屬性存儲在單獨的位置(如列存儲)崖疤。
-
必須存儲元組信息以重建原始記錄。
水平分區(qū):
- 根據(jù)某些分區(qū)鍵將表的元組劃分為不相交的段典勇。
-
有不同的方法來決定如何分區(qū)(例如劫哼,散列,范圍或謂詞分區(qū))割笙。每種方法的功效取決于查詢权烧。