NUMA 架構與資料庫效能

2021-08-22 03:07:28 字數 1285 閱讀 1103

在這次的 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 --show
numa 這個常看到的術語,似乎一直以來沒有得到 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核心訪問它們一般只有幾納秒,非常快。一級快取又可以進一步分為指令快取與資料快取。但是一級快取與二級快取都比較小,可以儲存的指...