Share nothing理論在數(shù)據(jù)庫設(shè)計和優(yōu)化中的實踐應(yīng)用航揉,首先介紹share nothing概念碗暗。最早接觸它是在 DataBaseManagentSystem一書的并行數(shù)據(jù)庫章節(jié)中。并行數(shù)據(jù)庫要求盡可能的去并行執(zhí)行數(shù)據(jù)庫操作被因,從而提高性能锻霎。在并行計算體系結(jié)構(gòu)實現(xiàn)中有很多可選的體系結(jié)構(gòu)蹈矮。
#包括:
1. share-memory:多個cpu共享同一片內(nèi)存,cpu之間通過內(nèi)部通訊機(jī)制(interconnection network)進(jìn)行通訊畜眨;
2. share-disk:每一個cpu使用自己的私有內(nèi)存區(qū)域昼牛,通過內(nèi)部通訊機(jī)制直接訪問所有磁盤系統(tǒng)。
3. share-nothing:每一個cpu都有私有內(nèi)存區(qū)域和私有磁盤空間康聂,而且2個cpu不能訪問相同磁盤空間贰健,cpu之間的通訊通過網(wǎng)絡(luò)連接。
#三種體系結(jié)構(gòu)如下圖:
? ? ? ? ? ? ? Share disk???????????????????????? share nothing????????????????????????? share memory
Shared memory 體系結(jié)構(gòu)的cpu之間通過主存進(jìn)行通訊恬汁,具有很高的效率伶椿;但當(dāng)更多的cpu被添加到主機(jī)上時,內(nèi)存競爭contetion就成為瓶頸,cpu越多脊另,瓶頸越 厲害导狡。Shared disk也存在同樣問題,因為磁盤系統(tǒng)由 Interconnection Network 連接在一起偎痛。
Shared memory和shared disk的基本問題是interference:當(dāng)添加更多的cpu旱捧,系統(tǒng)反而減慢,因為增加了對內(nèi)存訪問(memroy access)和網(wǎng)絡(luò)帶寬(network bandwidth)的競爭看彼。這樣shared nothing體系得到了廣泛的推廣廊佩。
Shared nothing體系是數(shù)據(jù)庫穩(wěn)定增長,當(dāng)隨著事務(wù)數(shù)量不斷增加靖榕,增加額外的cpu和主存就可以保證每個事務(wù)處理時間不變标锄。
總的來說,shared nothing降低了競爭資源的等待時間茁计,從而提高了性能料皇。反過來,如果一個數(shù)據(jù)庫應(yīng)用系統(tǒng)要獲得良好的可擴(kuò)展的性能星压,它從設(shè)計和優(yōu)化上就要考慮 shared nothing體系結(jié)構(gòu)践剂。Share nothing means few contention.它在oracle數(shù)據(jù)庫設(shè)計和優(yōu)化上有很多相同之處。
Share nothing 對數(shù)據(jù)庫應(yīng)用主要體現(xiàn)在多用戶并行訪問系統(tǒng)時候娜膘,優(yōu)化數(shù)據(jù)庫操作的response time上逊脯。如果數(shù)據(jù)庫操作能夠順利獲得所需要的資源,不發(fā)生等待事件竣贪,自然可以減少response time. 同時也體現(xiàn)在操作盡量少占用資源上军洼,避免浪費時間在無用功上。
如Sequence的實現(xiàn)方式演怎。如果使用OracleSequence 匕争,oracle可以緩存sequence,這樣最小的降低多個Session獲得唯一序列的競爭爷耀。如果設(shè)計為實體化表存儲sequence value方式甘桑,每次獲得sequence value都需要鎖住紀(jì)錄,這樣產(chǎn)生了嚴(yán)重資源競爭歹叮,導(dǎo)致hot block.同時增加了Response time.
如存儲過 程的使用跑杭,也體現(xiàn)著share nothing原理。將多個sql 封裝在存儲過程中盗胀,避免了不必要的SQL*Net message from/to client艘蹋, SQL*Net data from/to client 等等待事件。這體現(xiàn)了設(shè)計良好的應(yīng)用使用最少的資源完成工作票灰。
如在優(yōu)化sql/表結(jié)構(gòu)設(shè)計上女阀,share nothing意味著降低查詢的執(zhí)行成本—— I/O和cpu usage.這主要體現(xiàn)在降低consistent gets上宅荤。在物理設(shè)計上,share nothing體現(xiàn)在避免磁盤熱點塊浸策,協(xié)調(diào)進(jìn)程對磁盤的競爭冯键,平衡磁盤利用率上。
Oracle自身設(shè)計上很多都體現(xiàn)了Share Nothing特性庸汗;在設(shè)計可擴(kuò)展的數(shù)據(jù)庫應(yīng)用的時候也要注意到這點惫确。