当前位置: 首页 > news >正文

Oracle HugePages到底该怎么配置?

在Oracle数据库运维中,HugePages(大页内存)是提升内存访问效率的关键配置——它通过减少CPU页表项(TLB)缺失次数,降低内存管理开销,尤其对SGA(系统全局区)较大的生产环境至关重要。

一、各个版本的特点

1. 核心视图解析(按版本分类)

Oracle对HugePages的监控能力随版本迭代增强,需针对性选择视图:

视图名称适用版本核心作用
V$SGAINFO11g及以上查询SGA总大小(HugePages主要服务对象)
V$HUGEPAGE_INFO12cR1及以上直接获取HugePage单页大小、已分配数量
V$PARAMETER所有版本查询SGA最大尺寸(避免动态扩展超配)
V$SGA_DYNAMIC_INFO11g及以上补充SGA动态扩展信息(如自动内存管理)

2. SQL查询方案

方案1:Oracle 12cR1及以上(支持V$HUGEPAGE_INFO)

此版本可直接通过V$HUGEPAGE_INFO获取HugePage原生数据,SQL查询更简洁:

-- 1. 查询SGA总大小(单位:字节):HugePages主要为SGA服务,排除非SGA共享内存
SELECT SUM(VALUE) AS SGA_TOTAL_BYTES 
FROM V$SGAINFO 
WHERE NAME = 'Total System Global Area';-- 2. 查询HugePage配置与使用状态(单页大小、已分配数量)
SELECT HUGE_PAGE_SIZE AS HUGEPAGE_SIZE_BYTES,  -- 单页大小(字节)CURRENT_HUGE_PAGES AS ALLOCATED_HUGEPAGES,  -- 当前已分配HugePages数量RECOMMENDED_HUGE_PAGES AS ORACLE_RECOMMENDED  -- Oracle建议的HugePages数量(19c+新增)
FROM V$HUGEPAGE_INFO;-- 3. 查询SGA最大允许尺寸(避免动态扩展导致HugePages不足)
SELECT NAME, VALUE AS MAX_SIZE_BYTES, DISPLAY_VALUE AS MAX_SIZE_HUMAN  -- 人性化显示(如8G)
FROM V$PARAMETER 
WHERE NAME IN ('sga_max_size', 'memory_max_target');  -- 覆盖自动内存管理场景
方案2:Oracle 11g(无V$HUGEPAGE_INFO)

11g需结合SGA信息与操作系统视图(通过DBMS_UTILITYV$OSSTAT)补充HugePage数据:

-- 1. 查询SGA总大小与最大尺寸(同12c+)
SELECT SUM(VALUE) AS SGA_TOTAL_BYTES 
FROM V$SGAINFO 
WHERE NAME = 'Total System Global Area';SELECT NAME, VALUE AS MAX_SIZE_BYTES, DISPLAY_VALUE AS MAX_SIZE_HUMAN 
FROM V$PARAMETER 
WHERE NAME IN ('sga_max_size', 'memory_max_target');-- 2. 通过V$OSSTAT获取HugePage单页大小(11g间接方案)
SELECT VALUE AS HUGEPAGE_SIZE_BYTES 
FROM V$OSSTAT 
WHERE STAT_NAME = 'HUGE_PAGE_SIZE';  -- 部分11g版本需启用相关统计-- 3. 若V$OSSTAT无数据,通过DBMS_UTILITY调用系统命令(备选方案)
SET SERVEROUTPUT ON;
DECLAREl_hugepage_size_kb NUMBER;
BEGIN-- 调用系统命令获取HugePage单页大小(需数据库主机权限)DBMS_UTILITY.EXEC_DDL('CREATE OR REPLACE DIRECTORY TMP_DIR AS ''/tmp''');DBMS_UTILITY.EXEC_DDL('CREATE OR REPLACE PROCEDURE GET_HUGEPAGE_SIZE(p_size OUT NUMBER)ASl_file UTL_FILE.FILE_TYPE;l_line VARCHAR2(100);BEGINl_file := UTL_FILE.FOPEN(''TMP_DIR'', ''hugepage.tmp'', ''W'');UTL_FILE.PUT_LINE(l_file, ''cat /proc/meminfo | grep Hugepagesize'');UTL_FILE.FCLOSE(l_file);EXECUTE IMMEDIATE ''!sh /tmp/hugepage.tmp > /tmp/hugepage.result'';l_file := UTL_FILE.FOPEN(''TMP_DIR'', ''hugepage.result'', ''R'');UTL_FILE.GET_LINE(l_file, l_line);p_size := TO_NUMBER(SUBSTR(l_line, INSTR(l_line, '' '') + 1));UTL_FILE.FCLOSE(l_file);END;');GET_HUGEPAGE_SIZE(l_hugepage_size_kb);DBMS_OUTPUT.PUT_LINE('HugePage单页大小(KB):' || l_hugepage_size_kb);DBMS_OUTPUT.PUT_LINE('HugePage单页大小(字节):' || l_hugepage_size_kb * 1024);
END;
/

二、基于SQL结果的HugePages计算与配置

按“精准计算+缓冲冗余”原则确定最终vm.nr_hugepages值,计算逻辑与原脚本一致,但数据来源更可靠。

1. 计算公式(通用)

设通过SQL获取以下参数:

  • SGA_TOTAL:SGA总大小(字节,建议取SGA_MAX_SIZE避免动态扩展超配);
  • HP_SIZE:HugePage单页大小(字节);

则所需HugePages数量计算公式为:

所需HugePages数量 = CEIL(SGA_TOTAL / HP_SIZE) + 5
  • CEIL():向上取整(确保SGA完全适配大页,无碎片);
  • +5:缓冲冗余(应对SGA临时扩展或其他Oracle进程的大页需求)。

2. 计算示例(基于12c+ SQL结果)

假设SQL查询结果如下:

  • SGA_MAX_SIZE:8589934592字节(8G);
  • HP_SIZE:2097152字节(2M);

计算过程:

  1. 单页可承载SGA:8589934592 ÷ 2097152 = 4096;
  2. 向上取整后:4096(无余数,直接取整);
  3. 加缓冲:4096 + 5 = 4101;

最终需配置vm.nr_hugepages = 4101

3. 系统配置步骤(Linux环境)

  1. 临时生效配置(立即应用,重启后失效):
sysctl -w vm.nr_hugepages=4101
  1. 永久生效配置(写入系统配置文件):
echo "vm.nr_hugepages = 4101" > /etc/sysctl.d/oracle.conf
sysctl -p /etc/sysctl.d/oracle.conf  # 加载配置
  1. 验证配置结果(通过SQL或系统命令):
-- Oracle视图验证(12c+)
SELECT CURRENT_HUGE_PAGES AS ACTUAL_HUGEPAGES FROM V$HUGEPAGE_INFO;-- 系统命令验证(辅助)
grep HugePages_Total /proc/meminfo

三、完整优化方案实践:从查询到监控

为实现HugePages配置的自动化与可视化,可结合“SQL查询+Shell脚本+定时任务”构建完整流程:

1. 自动化计算脚本(SQL+Shell混合)

#!/bin/bash
# 基于Oracle SQL的HugePages自动计算脚本
# 依赖sqlplus客户端,需配置ORACLE_HOME与TNS_ADMIN# 数据库连接信息(建议通过wallet免密登录,避免明文密码)
DB_USER="sys as sysdba"
DB_CONN="localhost:1521/orcl"# 1. 通过SQL获取SGA_MAX_SIZE(字节)
SGA_MAX=$(sqlplus -S $DB_USER/$DB_CONN <<EOF
SET HEAD OFF FEEDBACK OFF
SELECT VALUE FROM V\$PARAMETER WHERE NAME = 'sga_max_size';
EOF
)# 2. 通过SQL获取HugePage单页大小(字节,12c+)
HP_SIZE=$(sqlplus -S $DB_USER/$DB_CONN <<EOF
SET HEAD OFF FEEDBACK OFF
SELECT HUGE_PAGE_SIZE FROM V\$HUGEPAGE_INFO;
EOF
)# 3. 计算所需HugePages数量
if [[ -n "$SGA_MAX" && -n "$HP_SIZE" && $SGA_MAX -gt 0 && $HP_SIZE -gt 0 ]]; thenNR_HP=$(( (SGA_MAX + HP_SIZE - 1) / HP_SIZE + 5 ))  # 向上取整+缓冲echo "计算结果:需配置 vm.nr_hugepages = $NR_HP"# 自动更新配置(生产环境建议先校验,再手动执行)# echo "vm.nr_hugepages = $NR_HP" > /etc/sysctl.d/oracle.conf# sysctl -p /etc/sysctl.d/oracle.conf
elseecho "SQL查询失败,无法获取SGA或HugePage数据"exit 1
fi

2. 定时监控任务(crontab)

通过crontab定时执行脚本,监控HugePages配置是否与需求匹配:

# 每天凌晨2点执行计算,输出日志到/var/log/oracle_hugepages.log
0 2 * * * /home/oracle/scripts/calc_hugepages.sh >> /var/log/oracle_hugepages.log 2>&1
http://www.dtcms.com/a/569710.html

相关文章:

  • 河源市seo网站设计抖音带运营团队有用吗
  • 2025年11月4日 AI快讯
  • SAP定价过程
  • ArrayList常见面试题二
  • 网站建设中期报告织梦网站怎么做索引地图
  • 关键字匹配高效算法
  • PySide6 Win10记事本从零到一——第八章 查看菜单界面与功能实现
  • Linux之arm SMMUv3 驱动重要宏和函数解析(11)
  • 网站功能介绍是什么自贡网站设计
  • 做企业网站设wordpress多媒体权限
  • CTF WEB入门 命令执行篇 50-70
  • 利用网上菜谱做网站公众号开发公司排行榜
  • 免费搭建视频网站硬件开发板
  • Mysql中页分裂、合并的问题
  • Qt 的 QSqlDatabase 不能跨线程复用
  • Qt-QtCharts
  • 某番切小说畅听红果等提示“低版本不安全”的解决方案
  • 昆明网站seo技术厂家网站设计远程培训
  • Linux基本架构
  • 任务调度框架:PowerJob、XXL-Job、OpenJob
  • 做模型挣钱的网站wordpress中英文切换
  • TensorFlow Keras
  • 萧山做网站的企业wordpress集成关注公众和登陆
  • 详解EtherNet/IP转CAN边缘计算网关:基恩士PLC与CAN IO卡通讯配置步骤
  • 网站权重的提升河北网站制作多少钱
  • .net实现redis下单超卖(jmeter高并发测试)(自己记录用)
  • 全自动壁纸采集源码
  • 公司用员工信息做网站域名备案网站建站描述撰写
  • Python类中方法种类介绍
  • AI研究:大语言模型(LLMs)需要怎样的硬件算力