在這次的 Oracle Open World 上,Hammerora 的作者 Steve Shaw 做了一個關(guān)于 Linux 平臺 Oracle 調(diào)優(yōu)的演講,其中重點提到了 NUMA 架構(gòu)對于 Intel Nehalem CPU 上跑 Oracle 的性能影響。
對于傳統(tǒng) SMP 來說,CPU 增多未必系統(tǒng)性能就好,因為共享系統(tǒng)總線的限制了 CPU 數(shù)量,CPU 越多內(nèi)部通信量越大共享總線越容易達到瓶頸。而 NUMA 架構(gòu)則多少緩解了這個擴展問題,其大致機理是通過給每個核提供單獨的本地內(nèi)存,進而提高可擴展性。而每個核訪問本地內(nèi)存和其它核上的內(nèi)存時間是不一樣的,所以,應(yīng)用程度對于內(nèi)存的訪問是有比較大的講究的。從硬件到操作系統(tǒng)再到應(yīng)用程序,都要支持 NUMA 才會發(fā)揮真正的處理能力。
在這里倒是可以插入介紹一下阿姆達爾定律(Amdahl's Law),這個定律指出并行處理器環(huán)境中的速度受制于程序串行的部分,也即暗示說多核未必性能就那么好。

Image via Wikipedia
對一個 DBA 來說,Intel 的 Nehalem CPU (右圖為結(jié)構(gòu)示意圖)最值得關(guān)注的特性當屬 NUMA (Non-Uniform Memory Access) 架構(gòu)方面的改進。
從 Oracle 數(shù)據(jù)庫 8i 開始支持 NUMA 特性,NUMA 在10.2.0.4 與 11.1 上是默認啟用的,不過在之前的版本以及 11.2 之后默認是關(guān)閉該特性的。在 Intel 平臺上,Oracle Validated RPM 包安裝后將激活 NUMA。安裝的時候,當 Oracle 檢測到硬件與操作系統(tǒng)支持 NUMA 的時候,會自動啟用 NUMA 支持,Linux 在內(nèi)核 2.6.9-67 以后自動支持 NUMA 。至于硬件上的開關(guān)是通過 BIOS ,如果硬件支持,則 BIOS 默認是激活(enable)該特性的。操作系統(tǒng)層面的開啟可以通過核心參數(shù)添加 numa=off 的方式來達到。
可以通過操作系統(tǒng)命令查看相關(guān)的狀態(tài):
# numactl --show
NUMA 這個??吹降男g(shù)語,似乎一直以來沒有得到 DBA 們足夠的重視。需要注意的是,硬件、操作系統(tǒng)、應(yīng)用軟件(Oracle) 三者都要支持 NUMA ,才能充分利用這一特性。對于支持 NUMA 的 DB 環(huán)境,理論上來說內(nèi)存請求的利用應(yīng)該會更有效一些。至于具體的性能數(shù)據(jù)還要看實測結(jié)果,暫時恐怕難以給出,留待以后補充吧。必須要說的是,作為DBA,在啟用某個特性的時候,一定要明白這個特性的來龍去脈,以及潛在的影響。
--EOF--
對于一些不能充分利用多核的軟件,比如某些 Web 服務(wù)器或者 Proxy,或者需要考慮一下如何利用 NUMA 特性了。而類似跑數(shù)據(jù)統(tǒng)計的應(yīng)用,"CPU的并行"得到利用之后或許應(yīng)該考慮如何更充分利用 NUMA 特性了。