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體現在避免磁盤熱點塊,協調進程對磁盤的競爭,平衡磁盤利用率上。