HugePages与Oracle

Hugepages 是 Linux 内核的一项特性,它允许使用比标准内存页(通常为 4KB)大得多的内存页。常见的大小有 2MB 和 1GB。对于 Oracle 数据库,配置 HugePages 是提升大内存环境下性能和稳定性的核心优化手段。

核心优势

  • 降低 CPU 开销:大幅减少操作系统页表(Page Table)的大小,从而减少 CPU 在虚拟地址到物理地址转换时的计算压力。
  • 提高 TLB 命中率:更大的内存页意味着转换检测缓冲区(TLB)可以覆盖更多的内存区域,显著加快内存访问速度。
  • 内存锁定(非交换) :HugePages 会被锁定在物理内存中,不会被交换(Swap)到磁盘,确保 SGA 始终保持极高性能。

关键限制与注意事项

  • 不兼容 AMM :HugePages 无法与自动内存管理MEMORY_TARGET)同时使用。必须切换到自动共享内存管理 (ASMM) (即设置 SGA_TARGETPGA_AGGREGATE_TARGET)。
  • 禁用透明大页 (THP) :根据 Oracle 官方文档 (MOS Note 1557478.1),必须禁用 Transparent HugePages (THP),因为它会导致运行时性能波动或 RAC 节点重启。
  • 静态预分配:HugePages 需要在操作系统级别预先分配,数据库启动时若物理内存不足则无法使用。

快速配置步骤

  1. 计算页数 :运行 Oracle 提供的 hugepages_settings.sh 脚本 来根据当前的 SGA 大小计算所需的 vm.nr_hugepages 数量。
  2. 修改内核参数 :在 /etc/sysctl.conf 中添加:
    • vm.nr_hugepages = <计算出的数值>
  3. 配置限制 :在 /etc/security/limits.conf 中为 oracle 用户配置内存锁定限制(数值需略大于 SGA):
    • oracle soft memlock <KB数值>
    • oracle hard memlock <KB数值>
  4. 设置数据库参数
    • ALTER SYSTEM SET USE_LARGE_PAGES=ONLY SCOPE=SPFILE; (设为 ONLY 可确保如果无法使用大页,数据库将拒绝启动,防止误进入标准内存页模式)。

page table entry (PTE) --页表项--8字节

Page Table--页表

在内存管理中,Page Table(页表) 的大小直接取决于Page(页面)的数量。对于 12GB 的 SGA,使用 Huge Pages 可以大幅减少页表项,从而节省显著的内存空间。

以下是基于 x86_64 架构(页表项通常为 8 字节)的详细对比计算:

  1. 不使用 Huge Pages (标准 4KB 页面)
  • 页面数量 :12GB / 4KB = 3,145,728 个页面
  • 页表项内存消耗
    • 每个进程访问 SGA 时,都需要维护这些映射。
    • 单个进程的页表开销:3,145,728 × 8 字节 ≈ 24 MB
  • 总消耗 :如果有 100 个数据库连接(进程),总页表内存消耗将达到 2.4 GB。这部分内存完全属于内核开销,不包含在 SGA 内部。
  1. 使用 Huge Pages (标准 2MB 页面)
  • 页面数量 :12GB / 2MB = 6,144 个页面
  • 页表项内存消耗
    • 页表层级减少,直接在 PMD 级别映射。
    • 单个进程的页表开销:6,144 × 8 字节 ≈ 48 KB
  • 总消耗 :同样 100 个进程,总页表内存消耗仅为 4.8 MB 左右。

核心差异对比表

维度 标准页面 (4KB) Huge Pages (2MB) 节省比例
页面数量 ~314.5 万 6,144 ~512倍减少
单个进程页表大小 ~24 MB ~48 KB 约 99.8%
100个进程总开销 ~2.4 GB ~4.8 MB 极显著降低

结论

对于 12GB 的 SGA,使用 Huge Pages 可以将页表占用的内存从 GB 级别降低到 MB 级别 。除了节省物理内存,更重要的意义在于显著提升了 TLB 命中率,减少了 CPU 在地址转换上的开销,在大并发场景下性能提升通常在 5% - 15% 之间。

相关推荐
Bioinfo Guy29 分钟前
高分Panel复现系列|转录因子网络太乱?用模块框把重点圈出来
数据库·生物信息学·生信可视化
ltl2 小时前
Disaggregated DB 合集:Socrates、PolarDB、Taurus 的共同模式
数据库
Blossom i4 小时前
大数据预处理与采集实验一:使用Python操作MySQL数据库
数据库·mysql
雾时之林5 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
老纪的技术唠嗑局6 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
CLOUD ACE7 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄7 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex
少晓年7 小时前
从 MySQL 迁移到人大金仓 KingbaseES:完整指南与实践
数据库·mysql
SelectDB8 小时前
Apache Doris AI RAG 实战:从基础 RAG 到知识图谱增强的技术能力与选型
数据库
SelectDB8 小时前
电商企业 PostgreSQL 迁移 Apache Doris:80TB 分析数据统一平台技术能力与实践
数据库