Oracle 12c内存优化实战:从19G降到8G的完整操作记录(附避坑指南)

Oracle 19c升级全攻略:从11g/12c平滑迁移到长期支持版(附避坑清单) 本文详细介绍了从Oracle 11g/12c升级到19c长期支持版(LTS)的完整迁移方案,包括升级前的战略规划、分阶段升级路径设计、关键配置优化与性能调校,以及升级后验证与监控体系。通过版本升级路线图和避坑清单,帮助数据库管理员顺利完成迁移,提升系统安全性和性能。 阅读详情

Oracle 12c内存优化实战:从19G降到8G的完整操作记录(附避坑指南)

在数据库运维工作中,Oracle实例的内存占用过高是DBA经常遇到的棘手问题。特别是在资源受限的环境中,过高的内存消耗不仅会影响数据库性能,还可能导致整个系统响应迟缓。本文将分享一个真实案例,详细记录如何通过SQL*Plus命令行将Oracle 12c的SGA从19G成功降至8G的全过程,并附上关键注意事项和常见问题解决方案。

1. 环境准备与现状分析

在开始调整之前,我们需要全面了解当前Oracle实例的内存配置情况。通过SQL*Plus连接到数据库后,执行以下命令查看SGA的当前设置:

SQL> show parameter sga;

NAME                     TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga        boolean     FALSE
lock_sga                 boolean     FALSE
pre_page_sga                 boolean     TRUE
sga_max_size                 big integer 19648M
sga_min_size                 big integer 0
sga_target               big integer 19648M
unified_audit_sga_queue_size         integer     1048576

从输出可以看到,当前SGA_TARGET和SGA_MAX_SIZE都设置为19648M(约19G),这对于大多数中小型数据库来说明显过高。在调整前,我们需要确认几个关键点:

  1. 数据库负载特征:是OLTP型还是OLAP型?不同的负载类型对SGA和PGA的需求比例不同
  2. 物理内存总量:服务器实际可用内存是多少?通常建议SGA不超过物理内存的60%
  3. 其他运行服务:是否有其他重要服务与Oracle共享服务器资源?

重要提示:在进行任何参数修改前,强烈建议备份当前的SPFILE或PFILE,以便在出现问题时能够快速恢复。可以使用以下命令创建备份:

CREATE PFILE='/path/to/pfile_backup.ora' FROM SPFILE;

2. 分步调整SGA参数

2.1 修改SGA_TARGET和SGA_MAX_SIZE

SGA_TARGET和SGA_MAX_SIZE是控制SGA大小的两个关键参数。它们之间的关系需要特别注意:

  • SGA_TARGET:指定Oracle自动管理的SGA内存总量
  • SGA_MAX_SIZE:设置SGA可以增长到的最大大小

调整时必须确保SGA_TARGET ≤ SGA_MAX_SIZE,否则数据库将无法启动。以下是具体的修改命令:

SQL> alter system set sga_target=8192m scope=spfile;
System altered.

SQL> alter system set sga_max_size=8192m scope=spfile;
System altered.

这里我们将两个参数都设置为8G(8192M)。使用scope=spfile表示修改将写入服务器参数文件,重启后生效。

2.2 验证参数修改

在重启实例前,可以检查参数是否已正确设置:

SQL> show parameter sga;

NAME                     TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                 big integer 8G
sga_target               big integer 8G
...

如果发现设置错误,可以立即修正。常见的错误包括:

  • 单位不一致(如一个用M,一个用G)
  • SGA_TARGET大于SGA_MAX_SIZE
  • 值设置过低导致无法满足基本运行需求

3. 重启Oracle实例

参数修改完成后,需要重启数据库使更改生效。这是关键且风险较高的操作,建议在维护窗口期进行。

3.1 优雅关闭数据库

使用以下命令关闭数据库:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

shutdown immediate会等待当前活动事务完成后再关闭,相比shutdown abort更为安全。

3.2 启动数据库

启动命令非常简单:

SQL> startup;
ORACLE instance started.

Total System Global Area 8589934592 bytes
Fixed Size                  12478408 bytes
Variable Size             2986346552 bytes
Database Buffers          5570035712 bytes
Redo Buffers               21073920 bytes
Database mounted.
Database opened.

启动输出中"Total System Global Area"显示为8589934592字节(即8G),表明内存调整已成功应用。

4. 验证调整结果

重启后,需要确认新的内存设置是否生效以及数据库运行是否正常。

4.1 检查SGA参数

SQL> show parameter sga;

NAME                     TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                 big integer 8G
sga_target               big integer 8G
...

4.2 监控性能指标

调整后需要特别关注以下性能指标:

  • 缓冲区缓存命中率:反映数据块在内存中的命中情况
  • 库缓存命中率:反映SQL和PL/SQL对象的复用效率
  • 共享池使用情况:避免出现内存碎片

可以使用以下SQL查询关键指标:

SELECT 
    (1 - (phy.value / (cur.value + con.value))) * 100 "Buffer Cache Hit Ratio"
FROM 
    v$sysstat cur, 
    v$sysstat con, 
    v$sysstat phy
WHERE 
    cur.name = 'db block gets'
    AND con.name = 'consistent gets'
    AND phy.name = 'physical reads';

理想情况下,缓冲区缓存命中率应保持在95%以上。如果显著下降,可能需要适当增加DB_CACHE_SIZE。

5. 常见问题与解决方案

在实际调整过程中,可能会遇到各种问题。以下是几个典型场景及解决方法:

5.1 数据库无法启动

如果设置的值过低,可能导致数据库无法启动,报错类似:

ORA-00821: Specified value of sga_target 512M is too small, needs to be at least 636M

解决方法:

  1. 创建一个PFILE手动编辑:
CREATE PFILE='/tmp/init_temp.ora' FROM SPFILE;
  1. 编辑该文件,将出错的参数设置为0或合理值
  2. 使用PFILE启动数据库:
STARTUP PFILE='/tmp/init_temp.ora';
  1. 重新创建SPFILE:
CREATE SPFILE FROM PFILE='/tmp/init_temp.ora';

5.2 性能显著下降

如果调整后发现性能明显变差,可能需要考虑:

  1. 逐步增加SGA_TARGET,每次增加1-2G,观察性能变化
  2. 调整SGA内部组件大小,如增加DB_CACHE_SIZE或SHARED_POOL_SIZE
  3. 检查AWR报告,找出性能瓶颈的具体原因

5.3 多租户环境下的调整

在CDB/PDB架构中,还需要考虑:

  • CDB级别的SGA设置会影响所有PDB
  • 可以为重要PDB分配更多的SGA资源
  • 使用Resource Manager控制各PDB的内存使用

6. 进阶优化建议

完成基本的内存调整后,还可以考虑以下优化措施:

6.1 自动内存管理

Oracle提供了更高级的内存管理方式:

  • AMM (Automatic Memory Management):通过MEMORY_TARGET参数统一管理SGA和PGA
  • ASMM (Automatic Shared Memory Management):仅自动管理SGA内部组件

启用AMM的示例:

ALTER SYSTEM SET memory_target=12G SCOPE=SPFILE;
ALTER SYSTEM SET sga_target=0 SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=0 SCOPE=SPFILE;

6.2 SGA内部组件调优

即使使用ASMM,也可以为特定组件设置最小值:

ALTER SYSTEM SET db_cache_size=4G SCOPE=SPFILE;
ALTER SYSTEM SET shared_pool_size=2G SCOPE=SPFILE;
ALTER SYSTEM SET large_pool_size=512M SCOPE=SPFILE;

6.3 监控与动态调整

建立定期监控机制,根据负载变化动态调整:

-- 查看SGA组件大小
SELECT component, current_size/1024/1024 "Size (MB)" 
FROM v$sga_dynamic_components;

-- 调整共享池大小(立即生效)
ALTER SYSTEM SET shared_pool_size=3G SCOPE=BOTH;

7. 长期维护策略

内存优化不是一次性的工作,而需要持续关注:

  1. 建立基线:记录优化后的性能指标作为基准
  2. 定期审查:每月检查内存使用情况,特别是业务增长后
  3. 容量规划:预测未来6-12个月的内存需求,提前规划升级
  4. 文档记录:详细记录每次调整的参数、时间和影响

通过以上步骤,我们成功将Oracle 12c实例的SGA从19G降低到8G,在保证性能的同时显著减少了内存占用。在实际操作中,每个环境都有其特殊性,建议先在测试环境验证调整方案,再应用到生产环境。

龙蜥Anolis OS 23实战:6.1内核下ORACLE 19C安装避坑全记录 本文详细记录了在龙蜥Anolis OS 23(搭载6.1内核)上安装ORACLE 19C数据库的全过程,包括环境准备、关键配置、图形界面安装及常见问题解决方案。针对Anolis OS特有的兼容性问题,提供了实用的避坑指南,帮助DBA和运维人员顺利完成企业级数据库部署,充分发挥6.1内核的性能优势。 阅读详情

相关推荐

Win11系统下Oracle19c安装避坑指南:从下载到Navicat连接全流程解析

本文提供了一份详尽的Win11系统下Oracle19c安装与Navicat连接全流程指南。内容涵盖从安装包下载、环境预检、关键配置抉择,到安装后服务管理,并重点解析了Navicat连接Oracle19c时常见的OCI驱动配置与错误排错方案,旨在帮助用户高效搭建稳定的本地数据库开发环境。

prometheus5watch的博客 1148

Oracle11g和12c的比较

Oracle11g和12c的比较 一.差异比较 11g oracle 11g在DBA管理上有很多完善,大大提升了DBA对数据库的管控能力,提供的很多自动特性,增强了调优,备份恢复,错误诊断等的功能,大大减轻DBA的低端管理工作; 相对来说,这个版本的升级比较平滑一些; 合并和扩展oracle的功能以实现网格计算的优势,将数据中心从分散的系统资源孤岛转换为包含服务器和存储的共享池。 3)GI提供更强大的oracleASM支持,GI作为集群软件除了支持数据库集群,还...

supermancome的博客 5204

Oracle 11g/19c 数据泵性能优化:并行度、压缩与网络链路实战对比

本文深入探讨Oracle 11g/19c数据泵(expdp/impdp)在TB级数据迁移中的性能优化策略,通过实测对比分析PARALLEL参数、COMPRESSION算法和NETWORK_LINK配置的最佳实践。文章提供黄金法则公式计算最佳并行度,详细比较不同压缩级别的效率,并分享网络链路优化技巧,帮助DBA显著提升数据泵操作效率。

weixin_33701617的博客 1218

在CentOS 7上无图形界面搞定Oracle 19c:一份给运维的静默安装避坑实录

本文详细介绍了在CentOS 7服务器上通过纯命令行静默安装Oracle 19c的完整实战经验,重点解析了官方文档未提及的常见问题与解决方案。从环境准备、系统参数调优到静默安装的核心步骤,提供了经过验证的配置模板和监控技巧,帮助运维人员高效完成Oracle 19c的部署,避免生产环境中的潜在风险。

weixin_30680385的博客 477

Oracle 19c Docker镜像避坑指南:从权限错误到EM页面访问失败的完整排错记录

本文详细解析了Oracle 19c Docker镜像部署中的常见问题及解决方案,包括权限配置、EM页面访问失败等实战排错技巧。通过图文并茂的安装步骤和深度排错指南,帮助开发者高效解决Docker环境下的Oracle部署难题,提升运维效率。

weixin_30847865的博客 344

Win11下Oracle19c安装避坑指南:从下载到Navicat连接的完整流程

本文详细介绍了在Windows 11系统下安装Oracle19c数据库并连接Navicat的完整流程,包括环境准备、安装包获取与验证、详细安装步骤、关键配置与优化、Navicat连接实战技巧等。特别针对安装过程中可能遇到的常见错误提供了解决方案,帮助开发者高效完成Oracle19c的部署与连接。

weixin_29247219的博客 368

Oracle 19C参数优化建议

在SQL指令计划启用时,多表连接的复杂查询的解析时间更长,建议设置为0,禁用该功能 disable creation of directives,屏蔽BUG。12c的新特性中lgwr是多个进程,该新特性容易导致lgwr进程夯住,而当lgwr进程夯住时,仅有的解决方法是重启数据库实例。对于自动扩展的UNDO表空间,oracle 会根据该参数设定的阈值尽可能的保留UNDO 信息的时间,为86400秒,即1天。决定是否开启日志强制切换功能,为了减少故障时数据损失,可以设置该参数,强制进行日志切换。

qq_18743743的博客 1496

Oracle 11g到19c数据库迁移实战:Data Pump全流程详解与避坑指南

数据库迁移是企业系统升级和架构演进中的关键环节,其核心在于实现数据的安全、高效转移与版本兼容。从原理层面看,迁移的本质是将数据、对象及元数据从源环境逻辑或物理地复制到目标环境,同时确保业务连续性和数据一致性。在技术价值上,成功的迁移不仅能提升系统性能与安全性,还能解锁新版本的高级特性,如多租户架构和自动化管理功能。常见的应用场景包括老旧系统升级、等保合规改造以及云化部署。本文聚焦于Oracle数据库从11g到19c的升级,深入剖析了使用Oracle Data Pump进行逻辑迁移的完整流程,涵盖了兼容性评估

weixin_33816300的博客 382

国产系统迁移实战:将传统Oracle 19c数据库从CentOS平稳迁移到OpenEuler的完整操作记录

本文详细记录了将传统Oracle 19c数据库从CentOS迁移到国产OpenEuler操作系统的完整实战流程。通过系统兼容性分析、OpenEuler专项配置、Oracle 19c深度适配安装、数据迁移验证及性能调优等关键步骤,为企业提供了一套经过验证的国产化数据库迁移方案,确保业务平稳过渡。

weixin_30291791的博客 413

Oracle 11g到19c数据库迁移实战:数据泵全流程与避坑指南

数据库迁移是企业系统演进中的关键环节,其核心在于将数据、架构与应用从一个环境安全、高效地转移到另一个环境。从原理上看,迁移不仅涉及数据的物理或逻辑移动,更关乎数据一致性、业务连续性和性能保障。技术价值在于通过迁移实现系统现代化,提升稳定性、安全性和可维护性,同时为引入新特性(如更智能的优化器、更好的多租户支持)奠定基础。应用场景广泛,包括版本升级、硬件更换、云化转型以及容灾建设等。本文聚焦于Oracle数据库从经典版本11g向长期支持版本19c的升级,深入剖析了如何利用数据泵(Data Pump)这一核心工

weixin_33796177的博客 394

Oracle19c安装避坑指南:从下载到远程连接的全流程实战(Windows10环境)

本文提供了在Windows 10环境下安装Oracle 19c的完整实战指南,重点分享了从下载、安装到配置远程访问的全流程避坑经验。文章详细解析了安装过程中的关键步骤、常见问题排查方法,并指导如何配置Oracle SQL Developer等工具实现远程连接,帮助开发者和DBA高效完成部署。

weixin_29285605的博客 462

在CentOS 7.6上安装Oracle 19c,我踩过的那些坑和避坑指南(附依赖包下载)

本文详细介绍了在CentOS 7.6上安装Oracle 19c单实例的完整指南,包括系统准备、依赖包处理、安装过程中的常见问题及解决方案。通过实战经验分享,帮助DBA避开典型陷阱,顺利完成部署,并提供安装后的优化建议和日常维护技巧。

weixin_33725515的博客 331

Oracle19c安装避坑指南:Redhat7环境下的完整配置流程

本文详细介绍了在Redhat7环境下安装Oracle19c的完整配置流程,包括系统环境准备、存储架构设计、软件安装技巧及性能调优等关键步骤。特别针对实际部署中常见的技术难点和性能瓶颈,提供了专业的解决方案和优化建议,帮助DBA团队高效完成企业级数据库部署。

weixin_30500105的博客 466

在VMware上折腾Oracle 19c RAC:一个DBA的踩坑实录与完整配置清单

本文详细记录了在VMware虚拟环境中部署Oracle 19c RAC双实例的完整过程,包括环境规划、系统配置、ASM磁盘管理及集群软件安装等关键步骤。作者分享了实战中的避坑技巧和优化建议,特别针对Linux系统调优和RAC特有参数设置提供了实用指南,助力DBA高效完成高可用数据库集群部署。

weixin_30521161的博客 410

Oracle19c核心进程解析:PMON进程深度分析

本文深入解析了Oracle PMON进程的架构演进与优化实践,重点分析了19c版本的技术创新。文章系统梳理了PMON从Oracle7到19c的四代架构演进,详细阐述了19c三层架构体系(控制层、执行层、监控层)的设计原理。通过对进程清理、锁管理、服务注册等核心机制的深度剖析,提出了参数调优矩阵、负载均衡策略等优化方法,并辅以电商和金融系统的实际案例验证。最后展望了云原生环境下PMON架构的革新方向,包括容器化适配、智能预测性清理和量子安全加密等前沿技术。文章为DBA提供了从基础原理到高级优化的完整技术指南,

minebmw7的博客 1233

Oracle 19c在CentOS 7.6上安装避坑全记录:从RPM预装到图形化配置,一次搞定

本文详细记录了Oracle 19c在CentOS 7.6上的完整安装流程,从系统环境准备、RPM预装到图形化配置,提供了一套经过实战验证的避坑指南。特别针对国内网络环境优化了YUM源配置,并分享了内核参数调优、依赖冲突解决等实用技巧,帮助DBA高效完成企业级数据库部署。

weixin_30571465的博客 547
上一篇: Matlab实战:5分钟搞定BPSK调制解调系统(附误码率分析与星座图代码)
下一篇: 从Win10到Win11的退步?深度解析CMD文件拖放功能被禁背后的安全逻辑
普通网友
博客等级 码龄4年 95粉丝 1459原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值