Tag Archives: Intel Nehalem

NUMA 架构与数据库性能

在这次的 Oracle Open World 上,Hammerora 的作者 Steve Shaw 做了一个关于 Linux 平台 Oracle 调优的演讲,其中重点提到了 NUMA 架构对于 Intel Nehalem CPU 上跑 Oracle 的性能影响。

对于传统 SMP 来说,CPU 增多未必系统性能就好,因为共享系统总线的限制了 CPU 数量,CPU 越多内部通信量越大共享总线越容易达到瓶颈。而 NUMA 架构则多少缓解了这个扩展问题,其大致机理是通过给每个核提供单独的本地内存,进而提高可扩展性。而每个核访问本地内存和其它核上的内存时间是不一样的,所以,应用程度对于内存的访问是有比较大的讲究的。从硬件到操作系统再到应用程序,都要支持 NUMA 才会发挥真正的处理能力。

在这里倒是可以插入介绍一下阿姆达尔定律(Amdahl’s Law),这个定律指出并行处理器环境中的速度受制于程序串行的部分,也即暗示说多核未必性能就那么好。

Intel Nehalem microarchitecture

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 特性了。

4130467396_b00ea856b8.jpg