正如熟悉Oracle的,在部署的时候建议配置Huge Page,而不是使用默认的PageTable内存映射表,原因是Linux的内存管理采取的是分页存取机制:把较大的物理内存分为了一个个固定大小(4KB)的内存页进行管理。每块内存页通过PageTable中的一个元组来维护虚拟/物理内存之间的映射。CPU为了提高虚拟/物理内存之间的转换效率,也会在TLB中缓存一定量的Page Table元组。
对于Oracle这种多进程架构程序来说,当服务端使用的共享内存较大,且并发连接数较多时,由于操作系统对于每个进程都要维护单独的内存映射,PageTable中的元组数目将会变得非常多,所占用的内存大小也会特别大。Linux为了应对这种场景,降低多进程下PageTable的内存消耗。自从2.6及以上内核版本提供了内存页大小为2MB的管理方式,称为Huge Page。如果使用Huge Page的话,相同物理内存使用量的情况下内存页的数目变少,减少了PageTable元组的条目个数,从而降低了系统的内存占用。
Lightdb和Oracle一样,是多进程数据库,同样支持大页,如果服务器物理内存大于128GB,尤其是达到256GB甚至更高时,强烈建议开启Linux系统的hugepage,同时将大页内存设置为shared_buffers的1.1~1.2倍,关于shared_buffers的介绍可参考官方文档https://www.hs.net/lig
htdb/docs/html/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY。这不仅仅是因为大页的性能会高一些,也是为了避免页表过大,造成服务器资源紧张