share-Nothing原理


Share nothing理論在數據庫設計和優化中的實踐應用

  首先介紹share nothing概念。最早接觸它是在 DataBaseManagentSystem一書的並行數據庫章節中。

  並行數據庫要求盡可能的去並行執行數據庫操作,從而提高性能。在並行計算體系結構實現中有很多可選的體系結構。包括:

  share-memory:多個cpu共享同一片內存,cpu之間通過內部通訊機制(interconnection network)進行通訊;

  share-disk  : 每一個cpu使用自己的私有內存區域,通過內部通訊機制直接訪問所有磁盤系統。

  Share-nothing: 每一個cpu都有私有內存區域和私有磁盤空間,而且2個cpu不能訪問相同磁盤空間,cpu之間的通訊通過網絡連接。3種體系結構如下圖:

  Share disk                         share nothing                          share memory 

  shared memory 體系結構的cpu之間通過主存進行通訊,具有很高的效率;但當更多的cpu被添加到主機上時,內存競爭contetion就成為瓶頸,cpu越多,瓶頸越 厲害。Shared disk也存在同樣問題,因為磁盤系統由 Interconnection Network 連接在一起。

  Shared memory和shared disk的基本問題是interference:當添加更多的cpu,系統反而減慢,因為增加了對內存訪問(memroy access)和網絡帶寬(network bandwidth)的競爭。這樣shared nothing體系得到了廣泛的推廣。

  Shared nothing體系是數據庫穩定增長,當隨着事務數量不斷增加,增加額外的cpu和主存就可以保證每個事務處理時間不變。

  總的來說,shared nothing降低了競爭資源的等待時間,從而提高了性能。反過來,如果一個數據庫應用系統要獲得良好的可擴展的性能,它從設計和優化上就要考慮 shared nothing體系結構。Share nothing means few contention.它在oracle數據庫設計和優化上有很多相同之處。

  Share nothing 對數據庫應用主要體現在多用戶並行訪問系統時候,優化數據庫操作的response time上。如果數據庫操作能夠順利獲得所需要的資源,不發生等待事件,自然可以減少response time. 同時也體現在操作盡量少占用資源上,避免浪費時間在無用功上。

  如Sequence的實現方式。如果使用Oracle Sequence ,oracle可以緩存sequence,這樣最小的降低多個Session獲得唯一序列的競爭。如果設計為實體化表存儲sequence value方式,每次獲得sequence value都需要鎖住紀錄,這樣產生了嚴重資源競爭,導致hot block.同時增加了Response time.

  如存儲過 程的使用,也體現着share nothing原理。將多個sql 封裝在存儲過程中,避免了不必要的SQL*Net message from/to client, SQL*Net data from/to client 等等待事件。這體現了設計良好的應用使用最少的資源完成工作。

  如在優化sql/表結構設計上,share nothing意味着降低查詢的執行成本—— I/O和cpu usage.這主要體現在降低consistent gets上。

  在物理設計上,share nothing體現在避免磁盤熱點塊,協調進程對磁盤的競爭,平衡磁盤利用率上。

  Oracle自身設計上很多都體現了Share Nothing特性;在設計可擴展的數據庫應用的時候也要注意到這點。

參考:

http://oracle.chinaitlab.com/optimize/39626.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM