在這次的 oracle open world 上,hammerora 的作者 steve shaw 做了乙個關於 linux 平台 oracle 調優的演講,其中重點提到了 numa 架構對於 intel nehalem cpu 上跑 oracle 的效能影響。
對於傳統 smp 來說,cpu 增多未必系統效能就好,因為共享系統匯流排的限制了 cpu 數量,cpu 越多內部通訊量越大共享匯流排越容易達到瓶頸。而 numa 架構則多少緩解了這個擴充套件問題,其大致機理是通過給每個核提供單獨的本地記憶體,進而提高可擴充套件性。而每個核訪問本地記憶體和其它核上的記憶體時間是不一樣的,所以,應用程度對於記憶體的訪問是有比較大的講究的。從硬體到作業系統再到應用程式,都要支援 numa 才會發揮真正的處理能力。
在這裡倒是可以插入介紹一下阿姆達爾定律(amdahl』s law),這個定律指出並行處理器環境中的速度受制於程式序列的部分,也即暗示說多核未必效能就那麼好。
image via wikipedia
對乙個 dba 來說,intel 的 nehalem cpu (右圖為結構示意圖)最值得關注的特性當屬 numa (non-uniform memory access) 架構方面的改進。
從 oracle 資料庫 8i 開始支援 numa 特性,numa 在10.2.0.4 與 11.1 上是預設啟用的,不過在之前的版本以及 11.2 之後預設是關閉該特性的。在 intel 平台上,oracle validated rpm 包安裝後將啟用 numa。安裝的時候,當 oracle 檢測到硬體與作業系統支援 numa 的時候,會自動啟用 numa 支援,linux 在核心 2.6.9-67 以後自動支援 numa 。至於硬體上的開關是通過 bios ,如果硬體支援,則 bios 預設是啟用(enable)該特性的。作業系統層面的開啟可以通過核心引數新增 numa=off 的方式來達到。
# numactl --shownuma 這個常看到的術語,似乎一直以來沒有得到 dba 們足夠的重視。需要注意的是,硬體、作業系統、應用軟體(oracle) 三者都要支援 numa ,才能充分利用這一特性。對於支援 numa 的 db 環境,理論上來說記憶體請求的利用應該會更有效一些。至於具體的效能資料還要看實測結果,暫時恐怕難以給出,留待以後補充吧。必須要說的是,作為dba,在啟用某個特性的時候,一定要明白這個特性的來龍去脈,以及潛在的影響。
延伸閱讀資料
–eof–
對於一些不能充分利用多核的軟體,比如某些 web 伺服器或者 proxy,或者需要考慮一下如何利用 numa 特性了。而類似跑資料統計的應用,」cpu的並行」得到利用之後或許應該考慮如何更充分利用 numa 特性了。
google+
numa架構與效能解析
說到伺服器的numa架構,大家或許都知道。numa架構在中大型系統上一直非常盛行,也是高效能的解決方案,尤其在系統延遲方面表現都很優秀。但numa架構對伺服器的相關效能到底有什麼影響,怎樣設定會更好呢?本文在此解析一下。1 什麼是numa numa non uniform memory access...
numa節點 簡單聊聊資料庫與NUMA
早期的計算機系統一直處於硬體資源匱乏的階段,cpu,記憶體都是十分稀缺的資源,因此在發展smp架構的系統的時候,早期都是使用uma 統一記憶體架構 的架構的,所有的cpu訪問記憶體的時候都是通過北橋的匯流排控制器統一訪問記憶體。記憶體上的資料通過匯流排可以以相同的延時傳輸給任何一顆cpu。在只有一兩...
Redis 多核CPU與NUMA架構優化
當今的cpu一般會有多顆核心 我們稱為物理核心 每顆核心都有自己的一級快取 簡稱l1 cache 與二級快取 簡稱l2 cache 這兩集快取都比較小,一般都是kb級別,cpu核心訪問它們一般只有幾納秒,非常快。一級快取又可以進一步分為指令快取與資料快取。但是一級快取與二級快取都比較小,可以儲存的指...