news 2026/2/8 0:26:27

Oracle 19c入门学习教程,从入门到精通,Oracle系统调优 —— 内存结构与参数优化详解(15)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle 19c入门学习教程,从入门到精通,Oracle系统调优 —— 内存结构与参数优化详解(15)

Oracle系统调优 —— 内存结构与参数优化详解


一、环境准备:Oracle 安装与调优前提

注意:系统调优需具备 DBA 权限,建议在测试环境(如 Oracle 21c XE)中操作。

1. 安装 Oracle Database 21c XE(简要回顾)

Windows / Linux 安装后验证:
sqlplus sys/your_password@localhost:1521/XE as sysdba

2. 调优前必备权限

确保当前用户具有以下权限(通常为SYSSYSTEM):

GRANTALTERSYSTEMTOyour_dba_user;-- 查看动态性能视图GRANTSELECTONv_$sgaTOyour_dba_user;GRANTSELECTONv_$parameterTOyour_dba_user;-- 其他常用视图:v$sgastat, v$pgastat, v$sysstat 等

💡 Oracle 21c 默认使用自动内存管理(AMM)或自动共享内存管理(ASMM),但本章将深入手动调优细节。


二、核心语法知识点详解与案例


1. Oracle 初始化参数分类

Oracle 参数分为三类:

类型特点修改方式
静态参数需重启生效修改spfile后重启
动态参数(可立即生效)ALTER SYSTEM即时生效SCOPE = MEMORY
动态参数(可持久化)可写入spfileSCOPE = BOTH(默认)

✅ 推荐使用spfile(二进制参数文件),而非pfile(文本文件)。

查看参数当前值:
-- 查看所有参数SHOWPARAMETER;-- 查看特定参数(如 sga_target)SHOWPARAMETER sga_target;-- 查询 v$parameter 视图SELECTname,value,isdefault,issys_modifiableFROMv$parameterWHEREnameLIKE'%sga%';

2. 主要系统调优参数介绍

参数作用调优建议
MEMORY_TARGET总内存(SGA + PGA)自动管理Oracle 11g+ 推荐启用
SGA_TARGETSGA 自动管理总大小若不用 MEMORY_TARGET,则设此值
PGA_AGGREGATE_TARGETPGA 总目标大小控制排序、哈希等内存
DB_CACHE_SIZE数据缓冲区大小影响物理读性能
SHARED_POOL_SIZE共享池大小存储 SQL、PL/SQL、字典缓存
LOG_BUFFER日志缓冲区大小影响事务提交速度

⚠️ 若设置MEMORY_TARGET > 0,则SGA_TARGETPGA_AGGREGATE_TARGET由 Oracle 自动分配。


3. 系统全局区(SGA)优化

3.1 理解 SGA 内存结构

SGA 由以下主要组件构成:

  • Database Buffer Cache:缓存数据块
  • Shared Pool:缓存 SQL、执行计划、数据字典
  • Redo Log Buffer:缓存重做日志
  • Large Pool(可选):用于 RMAN、并行查询
  • Java Pool(可选):Java 存储
  • Streams Pool(可选):流复制
查看 SGA 分配:
-- 查看 SGA 总体SHOWSGA;-- 详细各组件使用情况SELECT*FROMv$sgastatORDERBYpool,name;

4. 调整日志缓冲区(Redo Log Buffer)

作用:
  • 缓存事务产生的重做记录,减少磁盘 I/O。
  • 大小由LOG_BUFFER控制(静态参数,需重启)。
查看当前大小:
SHOWPARAMETER log_buffer;-- 输出示例:log_buffer = 67108864 (约 64MB)
调整方法(需重启):
-- 创建 pfile 临时修改(不推荐生产直接改 spfile)CREATEPFILE='/tmp/initXE.ora'FROMSPFILE;-- 编辑 initXE.ora,添加:-- *.log_buffer=134217728 -- 128MB-- 重启数据库SHUTDOWNIMMEDIATE;STARTUP PFILE='/tmp/initXE.ora';-- 重建 spfile(可选)CREATESPFILEFROMPFILE='/tmp/initXE.ora';

✅ 一般建议:OLTP 系统可设为 100–500 MB;若频繁出现"log buffer space"等待事件,则需增大。


5. 调整共享池(Shared Pool)

作用:
  • 存储SQL 语句、执行计划、PL/SQL 代码、数据字典缓存
  • 过小 → 频繁硬解析(Hard Parse)→ CPU 飙升。
  • 过大 → 内存浪费。
关键参数:
-- 手动指定大小(若未启用 SGA_TARGET)ALTERSYSTEMSETshared_pool_size=512M SCOPE=BOTH;
监控共享池效率:
-- 计算软解析率(越高越好,>95% 为佳)SELECT1-(SUM(reloads)/SUM(pins))AS"Soft Parse Ratio"FROMv$librarycache;-- pins: 总访问次数,reloads: 重新加载次数(硬解析)-- 查看共享池使用情况SELECTpool,name,bytes/1024/1024ASmbFROMv$sgastatWHEREpool='shared pool'ANDnameIN('free memory','sql area','dictionary cache');

✅ 建议:启用CURSOR_SHARING = FORCE(谨慎)或使用绑定变量减少硬解析。


6. 调整数据库缓冲区(DB Cache)

作用:
  • 缓存从磁盘读取的数据块,减少物理 I/O。
  • DB_CACHE_SIZE控制(默认块大小缓存)。
调整语法:
-- 设置默认缓冲区为 1GBALTERSYSTEMSETdb_cache_size=1G SCOPE=BOTH;
监控缓存命中率:
-- 计算逻辑读 vs 物理读SELECT1-(phy.value/(cur.value+con.value))AS"Buffer Cache Hit Ratio"FROMv$sysstat cur,v$sysstat con,v$sysstat phyWHEREcur.name='db block gets'ANDcon.name='consistent gets'ANDphy.name='physical reads';

✅ 健康值:OLTP > 90%,DSS(数据仓库)可低至 70%。


7. SGA 调优建议

场景建议
OLTP 系统增大 Shared Pool(SQL 复用高),适度 DB Cache
DSS/报表系统增大 DB Cache(全表扫描多),Shared Pool 可较小
混合负载启用SGA_TARGET,让 Oracle 自动调配
内存充足启用MEMORY_TARGET(Oracle 11g+)
启用自动 SGA 管理(推荐):
-- 关闭手动参数ALTERSYSTEM RESET shared_pool_size SCOPE=SPFILE SID='*';ALTERSYSTEM RESET db_cache_size SCOPE=SPFILE SID='*';-- 设置 SGA_TARGETALTERSYSTEMSETsga_target=2G SCOPE=SPFILE;-- 重启生效SHUTDOWNIMMEDIATE;STARTUP;

🔁 Oracle 会自动在 Shared Pool、DB Cache、Large Pool 之间动态分配内存。


8. 排序区优化(PGA 相关)

8.1 排序区与其他内存区的关系
  • 专用服务器模式(Dedicated Server):排序内存从PGA分配。
  • 共享服务器模式(Shared Server):排序内存从UGA(位于 SGA Large Pool)分配。

✅ Oracle 9i+ 使用PGA_AGGREGATE_TARGET统一管理 PGA,不再使用SORT_AREA_SIZE(已废弃)。

查看 PGA 使用:
SELECT*FROMv$pgastat;-- 关注:aggregate PGA target parameter, total PGA allocated
调整 PGA:
-- 设置 PGA 总目标为 1GBALTERSYSTEMSETpga_aggregate_target=1G SCOPE=BOTH;
监控排序活动:
-- 查看排序相关统计SELECTname,valueFROMv$sysstatWHEREnameLIKE'%sort%';-- 关键指标:-- sorts (memory) → 内存排序(快)-- sorts (disk) → 磁盘排序(慢,应尽量避免)

✅ 健康比例:sorts (disk) / sorts (memory) < 5%


9. 专用模式 vs 共享模式下的排序区调整

模式内存来源调优参数
专用模式PGAPGA_AGGREGATE_TARGET
共享模式SGA(Large Pool)LARGE_POOL_SIZE
判断当前连接模式:
-- 查看是否使用共享服务器SHOWPARAMETER shared_servers;-- 若 shared_servers > 0,则部分会话使用共享模式
调整 Large Pool(共享模式):
ALTERSYSTEMSETlarge_pool_size=256M SCOPE=BOTH;

💡 共享模式下,若LARGE_POOL_SIZE不足,UGA 会从 Shared Pool 分配,导致 Shared Pool 碎片。


三、综合性调优案例

场景:OLTP 电商数据库性能下降

症状:
  • 用户反馈“下单慢”
  • AWR 报告显示:高 CPU、大量硬解析、磁盘排序
调优步骤:
步骤 1:检查内存配置
-- 当前内存设置SHOWPARAMETER memory_target;-- 0(未启用 AMM)SHOWPARAMETER sga_target;-- 0(未启用 ASMM)SHOWPARAMETER pga_aggregate_target;-- 200M(太小!)-- SGA 手动分配SHOWPARAMETER shared_pool_size;-- 128MSHOWPARAMETER db_cache_size;-- 512M
步骤 2:启用自动内存管理(假设服务器有 8GB 内存)
-- 设置总内存为 4GB(留一半给 OS)ALTERSYSTEMSETmemory_target=4G SCOPE=SPFILE;ALTERSYSTEMSETmemory_max_target=4G SCOPE=SPFILE;-- 重启数据库SHUTDOWNIMMEDIATE;STARTUP;
步骤 3:验证自动分配效果
-- 查看实际分配SELECTcomponent,current_size/1024/1024ASmbFROMv$memory_dynamic_components;-- 输出示例:-- SHARED POOL 1024 MB-- DEFAULT BUFFER CACHE 2048 MB-- PGA TARGET 1024 MB
步骤 4:监控硬解析与排序
-- 软解析率(应 >95%)SELECT1-(SUM(reloads)/SUM(pins))FROMv$librarycache;-- 排序磁盘比(应 <5%)SELECTdisk.valueAS"Disk Sorts",mem.valueAS"Memory Sorts",ROUND(disk.value/NULLIF(mem.value,0)*100,2)AS"Disk Sort %"FROM(SELECTvalueFROMv$sysstatWHEREname='sorts (disk)')disk,(SELECTvalueFROMv$sysstatWHEREname='sorts (memory)')mem;
步骤 5:应用层配合(开发建议)
  • 使用绑定变量替代字面量,减少硬解析:

    -- ❌ 差:每次都是新 SQLSELECT*FROMordersWHEREuser_id=1001;SELECT*FROMordersWHEREuser_id=1002;-- ✅ 好:同一 SQL,不同绑定值SELECT*FROMordersWHEREuser_id=:user_id;

四、常用诊断脚本汇总

1. 内存总体视图

-- SGA + PGA 总览SELECT'SGA'ASarea,SUM(value)/1024/1024ASmbFROMv$sgaUNIONALLSELECT'PGA',value/1024/1024FROMv$pgastatWHEREname='total PGA allocated';

2. 缓存命中率

-- Buffer Cache Hit RatioSELECT1-(phy.value/(cur.value+con.value))AShit_ratioFROMv$sysstat cur,v$sysstat con,v$sysstat phyWHEREcur.name='db block gets'ANDcon.name='consistent gets'ANDphy.name='physical reads';

3. 共享池健康度

-- Free memory in Shared Pool(应 >10%)SELECTbytes/1024/1024ASfree_mb,(bytes/(SELECTSUM(bytes)FROMv$sgastatWHEREpool='shared pool'))*100ASpct_freeFROMv$sgastatWHEREpool='shared pool'ANDname='free memory';

五、总结与最佳实践

调优方向建议
内存管理优先启用MEMORY_TARGET(11g+)或SGA_TARGET+PGA_AGGREGATE_TARGET
Shared Pool避免硬解析 → 使用绑定变量,监控v$librarycache
DB Cache提高命中率 → 增大db_cache_size或启用自动管理
PGA/排序减少磁盘排序 → 增大pga_aggregate_target
日志缓冲区OLTP 可适当增大(100–500MB),但收益递减
监控定期生成 AWR/ASH 报告,关注 Top 5 等待事件

调优不是一次性的:需结合业务增长、数据量变化持续监控与调整。


✅ 本章覆盖 Oracle SGA/PGA 内存结构、关键参数、监控方法及实战调优流程,适用于 DBA 日常性能优化工作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 19:34:34

Z-Image-Turbo支持中文提示词,描述更自然

Z-Image-Turbo支持中文提示词&#xff0c;描述更自然 Z-Image-Turbo不是又一个“能跑就行”的图像生成模型&#xff0c;而是真正把中文表达逻辑吃透的AI绘画工具。它不强迫你翻译成英文、不依赖生硬的关键词堆砌、不让你反复试错调整语法结构——你用日常说话的方式写提示词&a…

作者头像 李华
网站建设 2026/2/4 6:53:52

GLM-4V-9B实战:电商商品图智能描述生成全攻略

GLM-4V-9B实战&#xff1a;电商商品图智能描述生成全攻略 1. 为什么电商运营急需这张“嘴” 你有没有遇到过这些场景&#xff1a; 每天上架30款新品&#xff0c;每张主图都要配5条不同风格的文案&#xff1a;卖点版、情感版、短视频口播版、小红书种草版……写到凌晨两点&am…

作者头像 李华
网站建设 2026/2/6 14:26:05

Keil5下载及安装教程:STM32开发环境手把手搭建

以下是对您提供的博文内容进行 深度润色与结构化重构后的专业级技术文章 。全文严格遵循您的所有要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、有温度、有经验沉淀&#xff1b; ✅ 摒弃模板化标题&#xff08;如“引言”“总结”&#xff09;&#xff0c;代之…

作者头像 李华
网站建设 2026/2/4 14:29:28

Qwen3-VL-4B ProGPU优化部署:显存占用降低35%,推理速度提升2.1倍

Qwen3-VL-4B Pro GPU优化部署&#xff1a;显存占用降低35%&#xff0c;推理速度提升2.1倍 1. 为什么需要一个真正能跑得动的4B视觉语言模型&#xff1f; 你有没有试过下载一个标榜“多模态”的大模型&#xff0c;结果刚加载就报错OOM&#xff08;显存不足&#xff09;&#x…

作者头像 李华
网站建设 2026/2/7 7:28:06

YOLOv13镜像实测:3步完成模型预测演示

YOLOv13镜像实测&#xff1a;3步完成模型预测演示 在目标检测工程实践中&#xff0c;最令人沮丧的时刻往往不是模型不收敛&#xff0c;而是——环境配了两小时&#xff0c;连第一张图都没跑出来。你下载完镜像、启动容器、cd进目录&#xff0c;却卡在ModuleNotFoundError: No …

作者头像 李华
网站建设 2026/2/8 0:05:58

RexUniNLU中文-base参数详解:DeBERTa架构适配与显存优化实践

RexUniNLU中文-base参数详解&#xff1a;DeBERTa架构适配与显存优化实践 1. 为什么需要关注RexUniNLU的参数配置 你有没有遇到过这样的情况&#xff1a;模型下载下来了&#xff0c;代码也跑通了&#xff0c;但一输入长文本就报OOM&#xff08;显存不足&#xff09;&#xff1…

作者头像 李华