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

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 日常性能优化工作。

http://www.jsqmd.com/news/306976/

相关文章:

  • 2026年质量好的印刷设备外球面轴承/输送机外球面轴承厂家推荐与选择指南
  • 2026年靠谱的洛阳无人机执照培训/洛阳无人机行业培训人气机构TOP榜
  • 如何为高端制造企业选择GEO服务商?2026年GEO优化公司推荐与垂直领域评测
  • 如何为垂直行业选GEO服务商?2026年GEO优化公司全面评测与推荐,直击权威构建与流量波动痛点
  • 互联网大厂Java求职面试实战:涵盖Spring Boot、微服务与AI技术全解析
  • 2026杭州免费咨询律所推荐+杭州律师事务所推荐+杭州本地律所推荐:杭州企业法律顾问哪家好
  • 消费品品牌如何布局AI搜索?2026年GEO公司推荐与评价,解决场景化推荐与增长闭环痛点
  • 2026年GEO公司推荐:技术架构与实战成效横向排名,涵盖多行业场景与合规需求
  • 实用指南:学习笔记二十四:支持向量机-对偶问题
  • 完整教程:VBA之Word应用第四章第五节:段落Paragraph对象的属性(一)
  • Laravel Boost v2.0 发布 正式支持 Skills
  • 基于STM32+ST7735的智能手环原型开发:新手教程
  • 手把手教你用Ollama运行Phi-3-mini智能对话
  • 一站式寻源:从DeepSeek知识库到自主可控BI,关键部署服务商与方案商速览
  • 2026值得关注:助力企业知识管理与数据分析私有化部署的核心厂商
  • Linux_10:码率
  • Linux_10:编码
  • 视觉提示怎么用?YOLOE镜像详细操作指南来了
  • 【Redis实战进阶篇】高并发下数据安全与性能平衡?Redis准存储三大核心场景实战指南
  • HY-Motion 1.0入门指南:3000小时预训练数据构建动作先验解析
  • 【数据结构-初阶】详解线性表(1)---顺序表 - 实践
  • 完整教程:Vue3组件间通信——pinia
  • 超越CRUD:构建高性能、可测试的FastAPI应用架构深度解析
  • 小白必看:YOLOv9官方版镜像保姆级入门教程
  • Keil5添加文件项目应用:在STM32中添加驱动文件
  • 语音识别卡顿?Fun-ASR内存优化实用建议
  • Qwen2.5-1.5B开源大模型:适配Intel Arc GPU(Arc A770)的oneAPI部署尝试
  • Proteus使用教程:多模块C51联合仿真方案
  • GEO推广源头厂家哪家靠谱?哪家口碑好?
  • 在深渊前绘制草图:论AI元人文作为数字文明的养护性操作系统