Oracle大页分配不再——优化性能提升利器
Oracle数据库是世界著名的企业级数据库之一,数据库中的性能优化一直是数据库管理员和开发人员们关注的重点。随着实际业务数据量的不断增加,减少数据库I/O的次数和提高I/O的吞吐量,是提高Oracle性能的必经之路。而大页(Hugepages)技术则是减少I/O和提升I/O性能的一项重要技术。
大页是指在传统虚拟内存管理方式下,操作系统仅仅能以4KB为单位来管理内存,而这种单位比较小,对于大内存数据库系统,需要生成大量的页表来管理内存,页表的数量多,级别深,需要的CPU几乎是线性的。这会影响操作系统管理内存的效率。
借助大页技术,系统将传统4KB的页面变为了更大的页面,如2、4、16 MB等,因为每个大页的管理只需要一组页面表(Page Tables),所以系统的管理效率得到了很大的提高,同时操作系统也能够更快的完成虚拟内存管理,减少内存碎片,并提高系统的吞吐量和稳定性。
然而,早期的大页技术在Oracle数据库环境中使用存在着一些问题,特别是在部署RAC时使用大页技术,缺少支持大页技术的组件或者配置错误可能导致系统内存出现泄漏或者大页分配失败等问题,这些问题给系统的性能带来了负面的影响。
现在,从Oracle 12.1.0.2版本开始,Oracle大页分配不再,代之以新的进程级大页(Transparent Hugepages),这是根据内核4.0版本的Transparency Huge Page(THP)机制而实现的。新的大页分配技术将大页的管理效率得到了极大的提高,同时还能够兼容旧的大页技术。
新的进程级大页分配比旧的大页分配更加高效,它能够在Oracle 12c R2中减少CPU使用率,为系统提供更好的性能表现。使用大页分配技术可以减少CPU与内存之间的数据传输,提高内存访问速度和吞吐量,以及降低实际使用的物理内存数量。
Oracle 12.2c和Oracle 18c的数据库默认开启进程级大页分配,这使得数据库分配得更加高效,提高了整体性能。如果你采用Oracle 11g或更早版本的数据,也可以启用新的进程级大页分配来提高性能。
下面是启用进程级大页分配的方法:
1.检查操作系统是否支持进程级大页
[root@oracledb ~]# grep AnonHugePages /proc/meminfo
AnonHugePages: 262144 kB
2.对Oracle用户设置进程级大页开启参数
# vi /etc/security/limits.conf
oracle soft memlock 966367488
oracle hard memlock 966367488
oracle soft nofile 65536
oracle hard nofile 65536
3.重新读取etc/security/limits.conf文件
# su - oracle
$ ulimit -l
966367488
4.启动数据库实例
使用起来全新的进程级大页分配技术非常方便和便利,但是需要我们的操作系统、硬件环境和Oracle数据库版本满足一定的要求。建议采用最新的Oracle版本和硬件环境,以保证在性能和稳定性上都获得最佳表现。