资讯动态

Oracle 19c数据库内存管理优化(内存管理方式调整及内存扩容)

发布时间:2026/10/20 3:54:48 来源:尧图企业网站定制
目录一、准确判断当前内存管理模式1.1.整体判断规则1.2.在当前实例执行 SQL 检查1当前实例参数2SPFILE中所有实例参数3SGA动态组件4PGA信息统计1.3.操作系统层检查1基础原则二、根据模式选择调整路径流程概要2.1.ASMM 模式推荐2.2.AMM 模式RAC 不支持建议迁移到 ASMM2.3.手动管理模式三、详细调整步骤按模式3.1.ASMM 模式调整 SGA1前置准备备份SPFILE2检查当前 SGA_MAX_SIZE3添加虚拟机内存后修改 SGA_MAX_SIZE 并滚动重启4查看SGA正常后动态调整 SGA_TARGET5按需调整 PGA复现内存保护机制6验证3.2.AMM 模式迁移到 ASMM 并调整 SGA为什么推荐ASMM?原因为什么极力推荐切换至ASMM?3.2.1.前置操作1备份SPFILE2确认当前内存模式3.2.2.迁移步骤1禁用AMM并设置ASMM参数2处理SPFILE中的残留参数关键避坑3使用新PFILE重启实例4重建SPFILE5修改 OS 内核参数附带计算过程6滚动重启实例7参数验证8启用 HugePages可选且极力推荐3.3.手动模式迁移到 ASMM1查询当前各组件大小2设置 ASMM 参数3重置手动组件参数让 ASMM 自动管理4修改 OS 内核参数四、验证与注意事项4.1.调整后验证4.2.注意事项4.3.总结表问题背景近期业务方反馈部分核心业务出现卡顿、响应变慢的情况。结合 AWR 报告分析发现数据库实例的 SGA 配置偏小Buffer Cache 命中率下降、物理读增多共享池也出现一定的争用导致 SQL 执行效率降低。为缓解业务卡慢问题需要对当前内存管理模式进行梳理并合理扩大 SGA 配置提升数据库整体性能。本次主要是为了熟悉整体内存优化执行流程。AWR截图声明这里我以实验的方式来作为扩容流程验证主要是验证扩容过程中需要注意的检查步骤及相关操作步骤一、准确判断当前内存管理模式1.1.整体判断规则检查项AMMASMM手动管理MEMORY_TARGET 0 0 0SGA_TARGET通常为 0 或自动值 0 0PGA_AGGREGATE_TARGET通常为 0 或自动值 0可能 0 或手动/dev/shm约等于 MEMORY_MAX_TARGET可能较小可能较小HugePages通常未使用常用可能使用alert logAutomatic Memory ManagementAutomatic Shared Memory Managementmanual如果 MEMORY_TARGET 0 →AMM如果 MEMORY_TARGET 0 且 SGA_TARGET 0→ASMM如果 MEMORY_TARGET 0且 SGA_TARGET 0 →手动管理注意在 RAC 中AMM 已不受支持。如果发现 MEMORY_TARGET 0 时应尽快迁移到 ASMM。1.2.在当前实例执行 SQL 检查PROMPT 调整行宽和字段列宽 SET LINESIZE 200 COL name FORMAT A25 COL value FORMAT A20 COL sid FORMAT A10 PROMPT 当前实例参数 COL name FOR A22 COL value_raw FOR A12 COL value_gb FOR 999.99 SELECT name, value AS value_raw, CASE WHEN REGEXP_LIKE(value, ^[0-9]$) THEN ROUND(TO_NUMBER(value)/1024/1024/1024, 2) END AS value_gb FROM v$parameter WHERE name IN ( memory_target,memory_max_target, sga_target,sga_max_size,pga_aggregate_target, db_cache_size,shared_pool_size,large_pool_size, java_pool_size,streams_pool_size,use_large_pages ) ORDER BY name; PROMPT SPFILE 中所有实例参数 SELECT sid, name, value/1024/1024/1024 as value_GB FROM v$spparameter WHERE name IN ( memory_target,memory_max_target, sga_target,sga_max_size,pga_aggregate_target, db_cache_size,shared_pool_size,large_pool_size, java_pool_size,streams_pool_size,use_large_pages ) ORDER BY name, sid; PROMPT SGA 动态组件 SELECT component, current_size/1024/1024/1024 AS cur_gb, min_size/1024/1024/1024 AS min_gb, max_size/1024/1024/1024 AS max_gb, user_specified_size/1024/1024/1024 AS user_gb FROM v$sga_dynamic_components ORDER BY current_size DESC; PROMPT PGA 统计 SELECT name, value/1024/1024/1024 AS gb FROM v$pgastat WHERE name IN ( aggregate PGA target parameter, aggregate PGA auto target, total PGA allocated, maximum PGA allocated );1当前实例参数关键解读参数值含义memory_target0AMM未启用memory_max_target0AMM 上限为 0确认 AMM 关闭sga_target3,808,428,032 (~3.55 GB)ASMM 已启用SGA 目标大小sga_max_size3,808,428,032 (~3.55 GB)SGA 可增长到的上限当前查询大小 与 sga_target 相等pga_aggregate_target1,266,679,808 (~1.18 GB)PGA 自动管理目标db_cache_size等0各子池由 ASMM自动调节0 表示交给 SGA_TARGET 统一分配use_large_pagesTRUE启用大页HugePages需 OS 侧配置到位否则会退化2SPFILE中所有实例参数关键解读其中VALUE_GB为空则表示参数大小没有显式写进 SPFILE中反之有大小的及已经写入到SPFILE中。3SGA动态组件关键解读组件CUR (GB)MIN (GB)MAX (GB)USER (GB)说明DEFAULT buffer cache2.31252.31252.31250主数据缓冲区shared pool1.0468751.0468751.0468750共享池Shared IO Pool0.1250.1250.1250.125显式配置streams pool0.031250.031250.031250Streams 用large pool0.0156250.0156250.0156250RMAN/并行用其余 15 个组件0000未启用合计 2.3125 1.046875 0.125 0.03125 0.015625 3.53125 GB≈ 3.55 GB✅ 与内存里的 sga_target 3,808,428,0323.55GB吻合。SGA 已全部用满没有余量给自动调整。我这里是测试环境满足现实情况。4PGA信息统计关键解读峰值maximum PGA allocated 0.89 GB 目标 1.18 GB→ 从未触顶说明 PGA 目前够用。一般在生产环境中SGA内存不足更为常见。1.3.操作系统层检查free -ggrep -E HugePages_Total|HugePages_Free|Hugepagesize /proc/meminfodf -h /dev/shmsysctl kernel.shmmax kernel.shmall vm.nr_hugepages1基础原则单个共享内存段最大值kernel.shmmax 的值必须大于或等于单个数据库实例的 SGA_MAX_SIZE。如果设置过小SGA会被拆分成多个共享内存段增加管理开销并可能影响性能。系统共享内存总页数kernel.shmall 的值必须满足 ceil(shmmax / PAGE_SIZE)否则即使 shmmax 足够系统也会因总配额不足而分配失败计算公式示例若SGA总大小为8GB则系统预留大页数量grep Hugepagesize /proc/meminfo确认二、根据模式选择调整路径流程概要2.1.ASMM 模式推荐这是 RAC 的标准模式。调整 SGA 分两步检查 SGA_MAX_SIZE 是否足够大。如果当前 SGA_MAX_SIZE 已经 ≥ 目标值例如 300G则只需动态调整 SGA_TARGET无需重启如果SGA_MAX_SIZE小于目标值必须先修改SGA_MAX_SIZE静态参数滚动重启实例再动态调整 SGA_TARGET。修改前务必确认 OS 内核参数kernel.shmmax、kernel.shmall、vm.nr_hugepages足够。2.2.AMM 模式RAC 不支持建议迁移到 ASMM如果确认是 AMM不应该直接调大MEMORY_TARGET而因该先将 RAC 迁移到 ASMM备份 SPFILE。查询当前实际 SGA 和 PGA 大小。在 SPFILE 中为每个实例设置建议一次验证通过后再执行MEMORY_TARGET0MEMORY_MAX_TARGET0SGA_MAX_SIZE375G(按需)SGA_TARGET300G(目标值)PGA_TARGET300G(目标值)修改 OS 内核参数。滚动重启实例。验证并启用 HugePages可选。2.3.手动管理模式建议先转换为 ASMM下边会讲解为什么建议将AMM切换至ASMM。三、详细调整步骤按模式3.1.ASMM 模式调整 SGA假设目标SGA_TARGET4GSGA_MAX_SIZE4GPGA_AGGREGATE_TARGET1.5G(1536M)实例名 rac01、rac02。注意Oracle 的参数解析器不支持小数单位如 1.5G、0.5G 等。参数值必须是整数单位可以是 K、M、G但不能带小数点否则会报如下错误ORA-32005: error while parsing size specification [1.5G]1前置准备备份SPFILE这是最关键的一步。如果迁移后实例无法启动可以使用备份文件快速恢复。SQL create pfile/tmp/init_before_asmm.ora from spfile;务必记录下这个备份文件的路径。2检查当前 SGA_MAX_SIZESQL SHOW PARAMETER sga_max_size;SQL SHOW PARAMETER sga_target;注意1如果 SGA_MAX_SIZE ≥ 4G直接跳到步骤 4。如果 SGA_MAX_SIZE 4G继续步骤 3。3添加虚拟机内存后修改 SGA_MAX_SIZE 并滚动重启将原来的运行内存由6G增至8G修改SGA_MAX_SIZE-- 节点1SIDSELECT inst_id, instance_name, host_name FROM gv$instance;SQL ALTER SYSTEM SET sga_max_size 4G SCOPESPFILE SIDp19c01;-- 节点2验证完节点1之后SQL ALTER SYSTEM SET sga_max_size 4G SCOPESPFILE SIDp19c02;滚动重启# 先操作节点1进行先行验证数据库名srvctl stop instance -d P19C0 -i p19c01srvctl start instance -d P19C0 -i p19c01[gridp19c01 ~]$ srvctl stop instance -d P19C0 -i p19c01 [gridp19c01 ~]$ [gridp19c01 ~]$ [gridp19c01 ~]$ ps -ef | grep oracle root 6778 1 4 12:41 ? 00:00:43 /u01/app/19.3.0/grid/jdk/jre/bin/java -server -Xms32m -Xmx64m -Djava.awt.headlesstrue -Ddisable.checkForUpdatetrue oracle.rat.tfa.TFAMain /u01/app/19.3.0/grid/tfa/p19c01/tfa_home grid 8170 1 1 12:43 ? 00:00:16 /u01/app/19.3.0/grid/jdk/bin/java -server -Xms30M -Xmx512M -Djava.awt.headlesstrue -Ddisable.checkForUpdatetrue -DTRACING.ENABLEDfalse -XX:ParallelGCThreads1 -cp /u01/app/19.3.0/grid/jlib/cha.jar:/u01/app/19.3.0/grid/jlib/chaconfig.jar:/u01/app/19.3.0/grid/jlib/cha-diag-msg.jar:/u01/app/19.3.0/grid/jlib/clsce.jar:/u01/app/19.3.0/grid/jlib/srvm.jar:/u01/app/19.3.0/grid/jlib/srvmhas.jar:/u01/app/19.3.0/grid/jlib/srvmasm.jar:/u01/app/19.3.0/grid/jlib/netcfg.jar:/u01/app/19.3.0/grid/jdbc/lib/ojdbc8.jar:/u01/app/19.3.0/grid/ucp/lib/ucp.jar:/u01/app/19.3.0/grid/jlib/fte.jar:/u01/app/19.3.0/grid/jlib/jai_core.jar:/u01/app/19.3.0/grid/jlib/mlibwrapper_jai.jar:/u01/app/19.3.0/grid/jlib/vecmath.jar:/u01/app/19.3.0/grid/jlib/jai_codec.jar:/u01/app/19.3.0/grid/jlib/jh.jar oracle.cha.server.CHADDriver grid 8650 1 0 12:44 ? 00:00:00 oracleASM1_ocr (DESCRIPTION(LOCALYES)(ADDRESS(PROTOCOLbeq))) grid 8655 1 0 12:44 ? 00:00:00 oracleASM1_asmb_asm1 (DESCRIPTION(LOCALYES)(ADDRESS(PROTOCOLbeq))) grid 8696 1 0 12:44 ? 00:00:00 oracleASM1 (DESCRIPTION(LOCALYES)(ADDRESS(PROTOCOLbeq))) grid 8719 1 0 12:44 ? 00:00:00 oracleASM1 (DESCRIPTION(LOCALYES)(ADDRESS(PROTOCOLbeq))) root 11990 8821 0 12:48 pts/0 00:00:00 su - oracle oracle 11991 11990 0 12:48 pts/0 00:00:00 -bash grid 18501 16378 0 12:57 pts/1 00:00:00 grep --colorauto oracle [gridp19c01 ~]$ [gridp19c01 ~]$ crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.LISTENER.lsnr ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE ora.chad ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE ora.net1.network ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE ora.ons ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 ONLINE OFFLINE STABLE ora.DATA.dg(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 OFFLINE OFFLINE STABLE ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE p19c02 STABLE ora.OCR.dg(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 OFFLINE OFFLINE STABLE ora.asm(ora.asmgroup) 1 ONLINE ONLINE p19c01 Started,STABLE 2 ONLINE ONLINE p19c02 Started,STABLE 3 OFFLINE OFFLINE STABLE ora.asmnet1.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 OFFLINE OFFLINE STABLE ora.cvu 1 ONLINE ONLINE p19c02 STABLE ora.p19c0.db 1 ONLINE ONLINE p19c02 Open,HOME/u01/app/o racle/product/19.3.0 /dbhome_1,STABLE 2 OFFLINE OFFLINE Instance Shutdown,ST ABLE ora.p19c01.vip 1 ONLINE ONLINE p19c01 STABLE ora.p19c02.vip 1 ONLINE ONLINE p19c02 STABLE ora.qosmserver 1 ONLINE ONLINE p19c02 STABLE ora.scan1.vip 1 ONLINE ONLINE p19c02 STABLE -------------------------------------------------------------------------------- [gridp19c01 ~]$ [gridp19c01 ~]$ [gridp19c01 ~]$ srvctl start instance -d P19C0 -i p19c01 [gridp19c01 ~]$ [gridp19c01 ~]$ crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.LISTENER.lsnr ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE ora.chad ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE ora.net1.network ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE ora.ons ONLINE ONLINE p19c01 STABLE ONLINE ONLINE p19c02 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 ONLINE OFFLINE STABLE ora.DATA.dg(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 OFFLINE OFFLINE STABLE ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE p19c02 STABLE ora.OCR.dg(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 OFFLINE OFFLINE STABLE ora.asm(ora.asmgroup) 1 ONLINE ONLINE p19c01 Started,STABLE 2 ONLINE ONLINE p19c02 Started,STABLE 3 OFFLINE OFFLINE STABLE ora.asmnet1.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE p19c01 STABLE 2 ONLINE ONLINE p19c02 STABLE 3 OFFLINE OFFLINE STABLE ora.cvu 1 ONLINE ONLINE p19c02 STABLE ora.p19c0.db 1 ONLINE ONLINE p19c02 Open,HOME/u01/app/o racle/product/19.3.0 /dbhome_1,STABLE 2 ONLINE ONLINE p19c01 Open,HOME/u01/app/o racle/product/19.3.0 /dbhome_1,STABLE ora.p19c01.vip 1 ONLINE ONLINE p19c01 STABLE ora.p19c02.vip 1 ONLINE ONLINE p19c02 STABLE ora.qosmserver 1 ONLINE ONLINE p19c02 STABLE ora.scan1.vip 1 ONLINE ONLINE p19c02 STABLE -------------------------------------------------------------------------------- [gridp19c01 ~]$# 验证节点1正常后可以操作节点2srvctl stop instance -d 数据库名 -i p19c02srvctl start instance -d 数据库名 -i p19c024查看SGA正常后动态调整 SGA_TARGET查看SGA空间大小动态调整SGA_TARGET-- 节点1SQL ALTER SYSTEM SET sga_target 4G SCOPEBOTH SIDp19c01;-- 节点2SQL ALTER SYSTEM SET sga_target 4G SCOPEBOTH SIDp19c02;5按需调整 PGA复现内存保护机制SQL ALTER SYSTEM SET pga_aggregate_target 1536M SCOPEBOTH SIDp19c01;出现报错注意这是因为Oracle 19c 对 SGA 和 PGA 的总和有一个默认的安全限制通常是物理内存的 70%、80%Oracle 在实例启动时检查内存分配发现 SGA PGA 的总和超出了物理内存的安全阈值80%左右。如果超出了安全阈值会触发数据内存保护机制最明显的表现就是数据库卡在mount状态却无法open这时候也可以去查看日志信息。参考链接pro-oracle: Oracle Database 19c -- ORA-00700: soft internal error, arguments: [pga physmem limit]SQL ALTER SYSTEM SET pga_aggregate_target 1536M SCOPEBOTH SIDp19c01;6验证SQL SHOW PARAMETER sga_target;SQL SHOW PARAMETER sga_max_size;SQL SELECT SUM(value)/1024/1024/1024 AS sga_gb FROM v$sga;SQL SELECT component, current_size/1024/1024/1024 AS gb FROM v$sga_dynamic_components ORDER BY current_size DESC;SQL SHOW PARAMETER sga_target;3.2.AMM 模式迁移到 ASMM 并调整 SGA为什么推荐ASMM?原因为什么极力推荐切换至ASMM?老版本中AMM由于底层操作系统不能有效支持HugePage大内存服务器性能差内存访问延迟很高并且AMM的管理方式会存在跨SGA/PGA内存抢占如果业务高峰期PGA暴涨AMM会强行从SGA中抢占内存→SGA内存区Shared Pool/Buffer Cache这时会突然缩小→容易触发大量硬解析造成性能骤然下降的问题。相反ASMM只负责SGA内存区域天然与PGA进行隔离且ASMM能完美的支持HugePage内存边界清晰波动可控这也是为什么需要选择ASM的方式。如果仍需使用AMM方式扩容注意以下区别AMM自动内存管理Oracle 通过 /dev/shm 来分配和管理共享内存因此如果使用 AMM/dev/shm的大小必须足够大通常需要手动去进行调整如在 /etc/fstab 中添加 tmp /dev/shm tmpfs defaults,size8G,示例如下图修改完之后重新mount一下 /dev/shm后还需修改/etc/sysctl.conf文件其中kernel.shmmax、kernel.shmall需要重新进行计算。ASMM自动共享内存管理Oracle 使用传统的System V 共享内存和HugePages完全不依赖/dev/shm。因此迁移到 ASMM 后/dev/shm的大小对数据库不再关键。迁移前的重要准备在开始操作前请务必完成以下准备工作以确保数据安全;3.2.1.前置操作1备份SPFILE这是最关键的一步。如果迁移后实例无法启动可以使用备份文件快速恢复。SQL create pfile/tmp/init_before_asmm.ora from spfile;务必记录下这个备份文件的路径。2确认当前内存模式检查当前参数确认AMM正在运行。SQL show parameter memory_target;SQL show parameter sga_target;例如如果memory_target非零则说明使用的是AMM当前我这里是0显然已经开启了sga_target和pga_aggregate_target。也就是说如果查出来的值为零则确认AMM未启用19c默认安装时已将AMM方式进行弃用。3.2.2.迁移步骤以下操作需要在所有RAC节点上执行。建议使用sid*以确保参数修改应用到整个集群。1禁用AMM并设置ASMM参数通过ALTER SYSTEM命令修改SPFILE。以下示例参数值如SGA_TARGET4G仅为参考请根据您的实际内存规划和业务需求进行调整。-- 禁用AMMSQL ALTER SYSTEM SET memory_target0 SCOPEspfile SID*;SQL ALTER SYSTEM SET memory_max_target0 SCOPEspfile SID*;-- 启用ASMM并设置SGA和PGA的目标大小SQL ALTER SYSTEM SET sga_target4G SCOPEspfile SID*;SQL ALTER SYSTEM SET sga_max_size4G SCOPEspfile SID*;SQL ALTER SYSTEM SET pga_aggregate_target1536M SCOPEspfile SID*;-- 示例为关键SGA组件设置最小值以防止被过度压缩SQL ALTER SYSTEM SET shared_pool_size2G SCOPEspfile SID*;SQL ALTER SYSTEM SET db_cache_size1G SCOPEspfile SID*;注意sga_max_size跟上边一样也应大于或等于sga_target且所有节点的参数值应保持一致。2处理SPFILE中的残留参数关键避坑执行完上述命令后不要直接重启数据库。因为SPFILE中可能仍残留memory_max_target和memory_target参数直接重启可能会遇到ORA-00843或ORA-00849错误。正确的做法是创建一个新的PFILE并手动删除其中的AMM参数。-- 从当前SPFILE创建PFILESQL create pfile/tmp/init_asmm.ora from spfile;然后使用文本编辑器打开/tmp/init_asmm.ora文件删除其中所有包含memory_max_target和memory_target的行。3使用新PFILE重启实例使用清理后的PFILE文件重启数据库。SQL shutdown immediate;SQL startup pfile/tmp/init_asmm.ora;如果启动成功说明ASMM配置已生效。4重建SPFILE确认数据库使用新PFILE启动正常后基于它重建SPFILE并恢复使用SPFILE启动。SQL create spfile from pfile/tmp/init_asmm.ora;SQL shutdown immediate;SQL startup;最后可以再次创建SPFILE的备份并检查确认memory_target为0sga_target大于0即表示已成功迁移至ASMM。5修改 OS 内核参数附带计算过程确保 kernel.shmmax ≥ SFA_MAX_SIZEkernel.shmall足够vm.nr_hugepages按需设置需提前根据实际规划并结合上边的公式进行计算。# 示例SGA_MAX_SIZE375Gkernel.shmmax 402653184000kernel.shmall 98304000vm.nr_hugepages 192000执行生效sysctl -p1计算 kernel.shmmax基本换算1 GB 1024 MB1 MB 1024 KB1 KB 1024 Bytes所以1 GB 1024 × 1024 × 1024 1,073,741,824 字节375 × 1,073,741,824 402,653,184,000 字节2计算 kernel.shmall2048 KB 2,097,152 字节。计算过程1 KB 1024 字节2048 × 1024 2,097,152 字节也就是 2 MB因为 2,097,152 ÷ 1024 ÷ 1024 2 MB。3计算 vm.nr_hugepages402,653,184,000总大小 / 2,097,152页大小 192000页数量这个计算结果说明375 GB 的内存正好需要 192,000 个 2 MB 的大页来承载。注意脚本vm.nr_hugepages可以通过这个命令find $ORACLE_HOME -name hugepages_settings.sh 2/dev/null查看是否有执行脚本但19c版本不存在。手动计算vm.nr_hugepages (SGA_MAX_SIZE 字节数) / (2 * 1024 * 1024) 余量。余量一般建议加 5% 左右并向上取整。例如如果 SGA_MAX_SIZE 4GB 4294967296 字节6滚动重启实例srvctl stop instance -d 数据库名 -i rac1srvctl start instance -d 数据库名 -i rac1# 验证节点1srvctl stop instance -d 数据库名 -i rac2srvctl start instance -d 数据库名 -i rac27参数验证SQL SHOW PARAMETER memory_target; -- 应为 0SQL SHOW PARAMETER sga_target; -- 应为 4 GSQL SHOW PARAMETER sga_max_size; -- 应为 4 GSQL SHOW PARAMETER pga_aggregate_target; -- 应为 1.5 G1536MSQL SELECT SUM(value)/1024/1024/1024 AS sga_gb FROM v$sga;8启用 HugePages可选且极力推荐SQL ALTER SYSTEM SET use_large_pages TRUE SCOPESPFILE SIDrac1;SQL ALTER SYSTEM SET use_large_pages TRUE SCOPESPFILE SIDrac2;SQL show parameter use_large_pages然后滚动重启并检查grep Huge /proc/meminfo。3.3.手动模式迁移到 ASMM1查询当前各组件大小SELECT component, current_size/1024/1024/1024 AS gb FROM v$sga_dynamic_components;2设置 ASMM 参数-- 节点1SQL ALTER SYSTEM SET sga_target 4G SCOPESPFILE SIDrac1;SQL ALTER SYSTEM SET sga_max_size 4G SCOPESPFILE SIDrac1;SQL ALTER SYSTEM SET pga_aggregate_target 1536M SCOPESPFILE SIDrac1;-- 节点2SQL ALTER SYSTEM SET sga_target 4G SCOPESPFILE SIDrac2;SQL ALTER SYSTEM SET sga_max_size 4G SCOPESPFILE SIDrac2;SQL ALTER SYSTEM SET pga_aggregate_target 1536M SCOPESPFILE SIDrac2;3重置手动组件参数让 ASMM 自动管理SQL ALTER SYSTEM RESET db_cache_size SCOPESPFILE SIDrac1;SQL ALTER SYSTEM RESET shared_pool_size SCOPESPFILE SIDrac1;SQL ALTER SYSTEM RESET large_pool_size SCOPESPFILE SIDrac1;SQL ALTER SYSTEM RESET java_pool_size SCOPESPFILE SIDrac1;SQL ALTER SYSTEM RESET streams_pool_size SCOPESPFILE SIDrac1;-- 节点2同理4修改 OS 内核参数同上。四、验证与注意事项4.1.调整后验证-- SGA 总大小SQL SELECT SUM(value)/1024/1024/1024 AS sga_gb FROM v$sga;-- 各组件分配SQL SELECT component, current_size/1024/1024/1024 AS gb FROM v$sga_dynamic_components ORDER BY current_size DESC;-- PGA 使用SQL SELECT name, value/1024/1024/1024 AS gb FROM v$pgastatWHERE name IN (aggregate PGA target parameter,total PGA allocated);-- 参数确认SQL SHOW PARAMETER memory_target;SQL SHOW PARAMETER sga_target;SQL SHOW PARAMETER sga_max_size;SQL SHOW PARAMETER pga_aggregate_target;OS 层free -ggrep Huge /proc/meminfoipcs -m4.2.注意事项RAC 中不要使用 AMM。如果当前是 AMM优先迁移到 ASMM。必须指定 SID。RAC 中实例级参数优先于全局参数修改时明确指定 SIDrac01、SIDrac02。逐节点滚动重启。不要同时重启两个节点确保另一个节点能承担负载。内核参数和数据库参数配合修改。kernel.shmmax、kernel.shmall、vm.nr_hugepages 必须提前调整。SGA_MAX_SIZE是静态参数修改后必须重启SGA_TARGET 是动态参数可在线调整。备份 SPFILE。操作前执行 CREATE PFILE/tmp/init_backup.ora from spfile;。4.3.总结表模式推荐动作ASMM检查 SGA_MAX_SIZE不够则改大并滚动重启然后动态调 SGA_TARGETAMM迁移到 ASMM设 MEMORY_TARGET0设 SGA_TARGET、SGA_MAX_SIZE、PGA_AGGREGATE_TARGET滚动重启手动迁移到 ASMM设 SGA_TARGET、SGA_MAX_SIZE、PGA_AGGREGATE_TARGET 重置手动组件参数滚动重启

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑