SGA性能调整与优化:从内部结构到实战思路
SGA(System Global Area)是Oracle数据库的核心内存区域,承载着数据缓存、共享SQL解析、日志缓冲等关键功能,其性能直接决定数据库整体运行效率。
一、BUFFER CACHE:数据缓存的核心优化
BUFFER CACHE是SGA中占比最大的组件,负责缓存数据文件中的数据块,减少磁盘I/O开销。其优化的核心是平衡缓存命中率与数据块争用,提升数据访问效率。
1.1 内部结构解析
BUFFER CACHE的高效运行依赖于严谨的内部组织架构,关键组成包括:
- BUFFER HEADER:每个数据块对应一个BUFFER HEADER,记录块的状态(如是否被修改、所属表空间、SCN等),是数据块管理的核心元数据。
- HASH CHAIN与HASH BUCKET:BUFFER HEADER通过哈希算法映射到HASH BUCKET,再通过HASH CHAIN串联相同哈希值的BUFFER HEADER,实现数据块的快速查找。
- LRU LIST:分为LRU(Least Recently Used)链和LRUW(LRU Write)链,用于管理数据块的淘汰与写入策略,确保热点数据常驻缓存。
1.2 关键等待事件与争用
BUFFER CACHE相关的等待事件直接反映性能瓶颈,核心包括:
- FREE BUFFER WAITS:缓存中无空闲缓冲区时触发,说明缓存容量不足或脏块写入磁盘缓慢。
- BUFFER BUSY WAITS:数据块被其他会话占用(如正在写入磁盘、被锁定)时触发,体现数据块争用。
- LATCH争用:核心LATCH包括
CACHE BUFFERS CHAINS(哈希链访问竞争)和CACHE BUFFERS LRU CHAIN(LRU链操作竞争),高并发场景下易成为瓶颈。
1.3 优化指标与实战思路
核心优化指标
- BUFFER CACHE命中率:理想值应高于95%,可通过
V$BUFFER_POOL_STATISTICS视图的PHYSICAL_READS和LOGICAL_READS计算(命中率=1-物理读/逻辑读)。 - AWR报告争用指标:关注“Latch Miss Rate”(LATCH缺失率)、“Buffer Busy Waits”平均等待时间,超过20ms需重点优化。
- 缓存大小建议值:根据业务类型调整,OLTP系统建议占物理内存的40%-60%,OLAP系统可适当降低(30%-45%),预留内存给PGA和操作系统。
具体优化思路
- 内存不足优化:若命中率低于90%且存在FREE BUFFER WAITS,优先增大
DB_CACHE_SIZE(动态参数,无需重启);若已达物理内存上限,可通过DB_CACHE_ADVICE视图评估最优缓存大小,或清理非热点数据(如临时表、大表全扫描数据)。 - 数据块争用解决:针对BUFFER BUSY WAITS,通过
V$SESSION_WAIT的P1(数据块地址)定位争用块,检查是否为热点表(如频繁更新的订单表),可采用分区表拆分、增加索引分散访问、调整事务提交频率等方式缓解。 - LATCH争用优化:
CACHE BUFFERS CHAINS争用可通过增加DB_BLOCK_SIZE减少块数量,或使用DBMS_STATS收集表统计信息优化SQL执行计划;CACHE BUFFERS LRU CHAIN争用可调整DB_WRITER_PROCESSES(增加写进程)、优化CHECKPOINT策略减少脏块堆积。
二、SHARED POOL:共享资源的高效管理
SHARED POOL用于缓存SQL语句、PL/SQL程序、数据字典等共享对象,其优化核心是减少硬解析、避免内存碎片,提升共享资源复用率。
2.1 内部结构与核心概念
- 堆管理(Heap Management):SHARED POOL以堆(Heap)为单位管理内存,每个堆包含多个子堆(Sub Pool),避免单堆竞争,11g后默认启用自动子堆分配。
- CHUNK:内存分配的最小单位,分为自由块(Free Chunk)、占用块(Allocated Chunk)和回收块(Recycle Chunk),碎片问题本质是自由块碎片化导致无法满足大对象分配需求。
- LIST结构:通过
FREE LIST(管理自由块)、LRU LIST(管理占用块淘汰)、RESERVED FREE LIST(预留大对象分配空间)实现内存高效调度。
2.2 关键问题与优化思路
核心问题诊断
- 内存碎片:表现为
ORA-04031错误(共享池内存不足),即使SHARED_POOL_SIZE足够,也因自由块碎片化无法分配连续空间。 - 硬解析过多:SQL语句未绑定变量、大小写不一致等导致重复解析,消耗CPU和内存资源,可通过
V$SQL视图的PARSE_CALLS和EXECUTIONS判断(硬解析率=解析次数/执行次数,理想值<10%)。 - SGA内存抖动:频繁调整
SHARED_POOL_SIZE、DB_CACHE_SIZE等参数,导致内存重新分配,引发性能波动。
具体优化思路
- 减少硬解析:强制应用程序使用绑定变量(如
WHERE id = :1),启用CURSOR_SHARING = FORCE(自动绑定相似SQL);规范SQL编写,避免大小写混用、多余空格等导致的解析差异。 - 碎片优化:设置
SHARED_POOL_RESERVED_SIZE(预留10%-20%共享池空间给大对象),定期执行ALTER SYSTEM FLUSH SHARED_POOL(谨慎使用,避免业务高峰期);对于频繁加载卸载的大PL/SQL程序,使用DBMS_SHARED_POOL.KEEP固定到内存。 - 子堆与内存分配调整:若存在子堆争用,可通过
_KGL_SHARED_CACHE_SIZE调整子堆大小;禁用自动内存管理(AMM),手动分配SHARED_POOL_SIZE和DB_CACHE_SIZE,避免内存抖动。
三、LIBRARY CACHE:共享SQL的解析与争用优化
LIBRARY CACHE是SHARED POOL的核心子组件,存储SQL语句、PL/SQL程序的解析树和执行计划,其优化重点是减少解析开销和LATCH争用。
3.1 内部结构与等待事件
- 核心对象:包括
Library Cache Handle(SQL语句、PL/SQL程序的标识)和Library Cache Object(解析树、执行计划等具体内容)。 - 关键等待事件:
LATCH: LIBRARY CACHE:解析SQL时竞争Library Cache Handle导致,常见于硬解析过多场景。LIBRARY CACHE LOCK/PIN:执行SQL时竞争Library Cache Object导致,可能因锁等待、依赖对象失效引发。
3.2 SQL解析过程与优化
SQL解析分为三个层级,优化的核心是提升软解析和软软解析占比:
- 硬解析:SQL首次执行时,需完成语法分析、语义分析、执行计划生成,开销最大。
- 软解析:SQL已存在于Library Cache,无需重新生成执行计划,仅需验证权限和依赖对象状态。
- 软软解析:同一会话重复执行相同SQL,可直接复用解析结果,开销最小。
优化措施
- 提升软解析率:通过绑定变量、规范SQL编写减少硬解析,确保
V$SQL中相同逻辑SQL的VERSION_COUNT(版本数)尽可能小。 - 解决LIBRARY CACHE争用:若存在
LIBRARY CACHE LOCK,通过V$SESSION_WAIT的P1RAW参数定位争用对象(如SELECT * FROM X$KGLLK WHERE KGLLKHDL = :P1RAW),检查是否有长期运行的事务占用锁;若存在LATCH: LIBRARY CACHE,增加SHARED_POOL_SIZE或优化SQL解析效率。 - 清理无效对象:定期执行
UTLRP.SQL编译无效的PL/SQL程序和视图,避免因依赖对象失效导致解析失败。
四、ROW CACHE:数据字典的缓存优化
ROW CACHE(字典缓存)用于缓存数据字典信息(如表结构、用户权限、索引定义),减少数据字典查询的磁盘I/O。其优化核心是避免LATCH争用和缓存不足。
4.1 关键指标与故障诊断
- 核心指标:
V$ROWCACHE视图的GETS(请求次数)、GETMISSES(缺失次数),缓存命中率=1-缺失次数/请求次数,理想值高于95%。 - 常见故障:
LATCH: ROW CACHE OBJECTS争用,表现为数据库全局性缓慢,尤其在大量用户登录、频繁创建对象的场景中。
4.2 优化思路与故障处理
- 缓存大小调整:若命中率低于90%,增大
SHARED_POOL_SIZE(ROW CACHE属于SHARED POOL子集),或通过DBMS_SHARED_POOL.KEEP将高频访问的字典对象固定到内存。 - LATCH争用处理:若出现
LATCH: ROW CACHE OBJECTS,通过以下步骤诊断:- 执行
SELECT * FROM V$LATCHHOLDER WHERE NAME = 'row cache objects'定位锁持有者。 - 检查是否有大量DDL操作(如CREATE TABLE、ALTER INDEX)并发执行,暂时停止非紧急DDL。
- 若为Oracle Bug导致,应用对应PSU补丁(如10gR2的Bug 4493447)。
- 执行
- 实战案例:某系统出现频繁
LATCH: ROW CACHE OBJECTS等待,通过跟踪发现是大量用户同时查询DBA_TABLES字典表,优化方案为:创建字典表的物化视图,定期刷新,将用户查询指向物化视图,减少ROW CACHE访问压力。
五、LOG BUFFER:日志缓冲的高效写入优化
LOG BUFFER用于缓存redo日志条目,待积累到一定量后由LGWR进程写入在线日志文件,其优化核心是减少日志写入延迟和等待事件。
5.1 核心配置与等待事件
- 关键参数:
LOG_BUFFER(日志缓冲大小,默认较小,建议设置为物理内存的1%-2%,最大不超过16MB)。 - 核心等待事件:
LOG FILE SYNC:事务提交时等待LGWR将日志写入磁盘,延迟过高会导致事务响应缓慢。REDO WASTAGE:日志条目因空间不足被拆分,导致日志文件碎片化,增加I/O开销。
5.2 优化思路
- 调整LOG_BUFFER大小:若
V$SYSTEM_EVENT中LOG FILE SYNC平均等待时间超过20ms,且REDO WASTAGE占比过高,适当增大LOG_BUFFER(需重启数据库),减少日志拆分。 - 优化LGWR写入效率:确保在线日志文件分散存储在不同磁盘(避免I/O竞争),启用异步I/O(如AIX的
aio0设备、Linux的libaio);减少小事务频繁提交,合并批量操作(如批量插入时每1000条提交一次)。 - 减少日志量:禁用不必要的日志生成(如临时表的
NOLOGGING属性),使用DIRECT PATH INSERT(仅在归档模式下支持),避免重复写入相同日志内容。
六、SGA优化实战Checklist
前置准备
1. 工具与权限
BUFFER CACHE优化 Checklist
1. 监控核心指标(每日/周执行)
| 指标类型 | 监控SQL/方法 | 合格阈值 | 异常判断标准 |
|---|---|---|---|
| 缓存命中率 | SELECT 1 - (PHYSICAL_READS / LOGICAL_READS) AS HIT_RATE FROM V$BUFFER_POOL_STATISTICS; |
>95% | <90%(内存不足)、90%-95%(需关注) |
| FREE BUFFER等待 | SELECT EVENT, TOTAL_WAITS, AVG_WAIT_TIME FROM V$SYSTEM_EVENT WHERE EVENT LIKE 'free buffer waits'; |
平均等待<10ms | 平均等待>20ms(脏块写入慢) |
| BUFFER BUSY等待 | SELECT EVENT, TOTAL_WAITS, AVG_WAIT_TIME FROM V$SYSTEM_EVENT WHERE EVENT LIKE 'buffer busy waits'; |
平均等待<20ms | 平均等待>50ms(数据块争用) |
| LATCH争用 | SELECT NAME, MISSES, GETS, (MISSES/GETS)*100 AS MISS_RATE FROM V$LATCH WHERE NAME IN ('cache buffers chains', 'cache buffers lru chain'); |
缺失率<1% | 缺失率>3%(LATCH竞争激烈) |
2. 诊断异常根因(指标超阈值时执行)
SELECT p1 "数据块地址", DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(p1) "文件号", DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(p1) "块号", OWNER, SEGMENT_NAME, SEGMENT_TYPE FROM V$SESSION_WAIT sw, DBA_EXTENTS de WHERE sw.EVENT = 'buffer busy waits' AND de.FILE_ID = DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(sw.p1) AND de.BLOCK_ID <= DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(sw.p1) AND de.BLOCK_ID + de.BLOCKS > DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(sw.p1);
3. 优化措施(按需执行)
| 异常场景 | 优化操作 | 注意事项 |
|---|---|---|
| 缓存命中率低 | 1. 动态增大DB_CACHE_SIZE:ALTER SYSTEM SET DB_CACHE_SIZE=XXG SCOPE=BOTH;(11g后支持)2. 清理非热点数据: ALTER TABLE 大表名 CACHE NO;(避免全表扫描占用缓存) |
1. 预留20%-30%内存给PGA/操作系统 2. 若为RAC,所有节点需同步调整 |
| 数据块争用(热点表) | 1. 分区表拆分:将高频更新表(如订单表)按时间/地区分区 2. 增加索引:对频繁查询的列建索引,分散块访问 3. 调整事务:减少单事务更新行数,避免长期锁块 |
分区需业务配合,索引需避免过度创建(影响DML) |
| LATCH争用(CACHE BUFFERS CHAINS) | 1. 增大DB_BLOCK_SIZE(需重建数据库,谨慎!)2. 优化SQL:通过AWR定位全表扫描SQL,增加索引 3. 调整 _DB_BLOCK_HASH_BUCKETS(隐含参数,需Oracle支持) |
隐含参数调整前需备份参数文件 |
4. 优化验证(执行后1-24小时复查)
SHARED POOL优化 Checklist
1. 监控核心指标(每日执行)
| 指标类型 | 监控SQL/方法 | 合格阈值 | 异常判断标准 |
|---|---|---|---|
| 硬解析率 | SELECT (PARSE_CALLS - SOFT_PARSES) / PARSE_CALLS * 100 AS HARD_PARSE_RATE FROM V$SYSSTAT WHERE NAME = 'parse calls'; |
<10% | >20%(硬解析过多) |
| 内存碎片 | SELECT REQUESTS, MISSES, (MISSES/REQUESTS)*100 AS RESERVED_MISS_RATE FROM V$SHARED_POOL_RESERVED; |
<5% | >10%(碎片严重) |
| ORA-04031错误 | SELECT * FROM V$DIAG_ALERT_EXT WHERE MESSAGE_TEXT LIKE '%ORA-04031%' AND ORIGINATING_TIMESTAMP > SYSDATE-1; |
0次/天 | ≥1次/天(碎片或内存不足) |
| SGA内存抖动 | SELECT BEGIN_TIME, END_TIME, DB_CACHE_SIZE, SHARED_POOL_SIZE FROM V$SGA_DYNAMIC_COMPONENTS_HISTORY WHERE END_TIME > SYSDATE-1; |
波动<10% | 波动>20%(自动内存管理失控) |
2. 诊断异常根因(指标超阈值时执行)
SELECT SQL_TEXT, EXECUTIONS, PARSE_CALLS, (PARSE_CALLS/EXECUTIONS) AS PARSE_PER_EXEC FROM V$SQL WHERE EXECUTIONS > 100 AND (PARSE_CALLS/EXECUTIONS) > 0.2 -- 解析次数/执行次数>20% ORDER BY PARSE_PER_EXEC DESC;
3. 优化措施(按需执行)
| 异常场景 | 优化操作 | 注意事项 |
|---|---|---|
| 硬解析过多 | 1. 启用绑定变量:ALTER SYSTEM SET CURSOR_SHARING=FORCE SCOPE=BOTH;(自动绑定相似SQL)2. 规范应用:要求开发人员使用绑定变量(如 WHERE id = :1)3. 固定高频SQL: EXEC DBMS_SHARED_POOL.KEEP('SQL_ID', 'SQL'); |
1. CURSOR_SHARING=FORCE可能影响SQL计划稳定性 2. 固定SQL前需验证执行计划最优 |
| 内存碎片严重 | 1. 调整预留空间:ALTER SYSTEM SET SHARED_POOL_RESERVED_SIZE=XXM SCOPE=SPFILE;(建议为SHARED_POOL_SIZE的10%-20%)2. 手动清理碎片: ALTER SYSTEM FLUSH SHARED_POOL;(业务低峰执行!)3. 禁用AMM: ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;(避免自动调整导致碎片) |
1. 预留空间调整需重启数据库 2. FLUSH会导致所有共享对象失效,需提前通知业务 |
| ORA-04031错误 | 1. 增大SHARED_POOL_SIZE:ALTER SYSTEM SET SHARED_POOL_SIZE=XXG SCOPE=BOTH;(11g后支持动态调整)2. 清理无效对象: @?/rdbms/admin/utlrp.sql(编译无效PL/SQL)3. 排除Bug:查询MOS确认是否为已知Bug(如11gR2的Bug 14065287) |
若为Bug,需应用对应PSU补丁 |
4. 优化验证(执行后12-48小时复查)
LIBRARY CACHE优化 Checklist
1. 监控核心指标(每日执行)
| 指标类型 | 监控SQL/方法 | 合格阈值 | 异常判断标准 |
|---|---|---|---|
| LIBRARY CACHE LOCK等待 | SELECT EVENT, TOTAL_WAITS, AVG_WAIT_TIME FROM V$SYSTEM_EVENT WHERE EVENT = 'library cache lock'; |
<100次/天,平均等待<50ms | >500次/天或平均等待>100ms |
| LIBRARY CACHE PIN等待 | SELECT EVENT, TOTAL_WAITS, AVG_WAIT_TIME FROM V$SYSTEM_EVENT WHERE EVENT = 'library cache pin'; |
<50次/天,平均等待<30ms | >200次/天或平均等待>80ms |
| 无效对象数量 | SELECT COUNT(*) FROM DBA_OBJECTS WHERE STATUS = 'INVALID' AND OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'VIEW'); |
<10个 | >50个(依赖失效) |
2. 诊断异常根因(指标超阈值时执行)
SELECT b.SID, a.USER_NAME, a.KGLNAOBJ AS OBJECT_NAME -- 争用对象名 FROM X$KGLLK a, V$SESSION b WHERE a.KGLLKHDL IN ( SELECT P1RAW FROM V$SESSION_WAIT WHERE WAIT_TIME=0 AND EVENT='library cache lock' ) AND a.KGLLKMOD <> 0 -- 锁持有者(非等待者) AND b.SADDR = a.KGLLKUSE;
3. 优化措施(按需执行)
| 异常场景 | 优化操作 | 注意事项 |
|---|---|---|
| LIBRARY CACHE LOCK/PIN争用 | 1. 终止长期锁会话:ALTER SYSTEM KILL SESSION 'SID,SERIAL#';(需确认会话非核心业务)2. 重建依赖对象: ALTER VIEW/PROCEDURE 对象名 COMPILE; 3. 避免DDL并发:禁止业务高峰期执行ALTER TABLE、DROP INDEX等DDL |
终止会话前需通知业务,避免数据不一致 |
| 无效对象过多 | 1. 批量编译:@?/rdbms/admin/utlrp.sql(自动编译无效对象)2. 定位失效原因: SELECT * FROM DBA_OBJECTS WHERE STATUS='INVALID' AND LAST_DDL_TIME > SYSDATE-1;(查看最近修改的对象) |
编译前备份对象定义(如CREATE OR REPLACE VIEW ...) |
4. 优化验证(执行后1-4小时复查)
ROW CACHE优化 Checklist
1. 监控核心指标(每日执行)
| 指标类型 | 监控SQL/方法 | 合格阈值 | 异常判断标准 |
|---|---|---|---|
| 字典缓存命中率 | SELECT 1 - (GETMISSES/GETS)*100 AS HIT_RATE FROM V$ROWCACHE WHERE CACHE_NAME IN ('dc_tables', 'dc_users', 'dc_indexes'); |
>95% | <90%(缓存不足) |
| LATCH: ROW CACHE OBJECTS等待 | SELECT EVENT, TOTAL_WAITS, AVG_WAIT_TIME FROM V$SYSTEM_EVENT WHERE EVENT = 'latch: row cache objects'; |
<50次/天,平均等待<20ms | >200次/天或平均等待>50ms |
2. 诊断异常根因(指标超阈值时执行)
3. 优化措施(按需执行)
| 异常场景 | 优化操作 | 注意事项 |
|---|---|---|
| 字典缓存命中率低 | 1. 增大SHARED_POOL_SIZE(ROW CACHE属于SHARED POOL子集)2. 固定高频字典对象: EXEC DBMS_SHARED_POOL.KEEP('DC_TABLES', 'ROW CACHE'); |
固定对象前需确认对象为高频访问(如dc_tables) |
| LATCH: ROW CACHE OBJECTS争用 | 1. 减少字典查询:创建物化视图(如CREATE MATERIALIZED VIEW MV_DBA_TABLES AS SELECT * FROM DBA_TABLES;),定期刷新2. 应用补丁:若为Oracle Bug(如10g的Bug 4493447),安装对应PSU |
物化视图需同步更新,避免数据滞后 |
4. 优化验证(执行后12小时复查)
LOG BUFFER优化 Checklist
1. 监控核心指标(每小时执行,OLTP系统重点关注)
| 指标类型 | 监控SQL/方法 | 合格阈值 | 异常判断标准 |
|---|---|---|---|
| LOG FILE SYNC等待 | SELECT EVENT, TOTAL_WAITS, AVG_WAIT_TIME FROM V$SYSTEM_EVENT WHERE EVENT = 'log file sync'; |
<50ms | >100ms(事务提交慢) |
| REDO WASTAGE | SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME = 'redo wastage'; |
<100KB/小时 | >1MB/小时(日志拆分多) |
| 日志切换频率 | SELECT TO_CHAR(FIRST_TIME, 'HH24') AS HOUR, COUNT(*) AS SWITCH_COUNT FROM V$LOG_HISTORY WHERE FIRST_TIME > SYSDATE-1 GROUP BY TO_CHAR(FIRST_TIME, 'HH24'); |
<60次/小时 | >120次/小时(日志文件过小) |
2. 诊断异常根因(指标超阈值时执行)
3. 优化措施(按需执行)
| 异常场景 | 优化操作 | 注意事项 |
|---|---|---|
| LOG FILE SYNC等待>100ms | 1. 分散日志文件:将在线日志组分散到不同磁盘(如GROUP 1存/dev/sdb1,GROUP 2存/dev/sdc1) 2. 启用异步I/O:AIX执行 chdev -l aio0 -a autoconfig=available,Linux安装libaio并设置DISK_ASYNCH_IO=TRUE3. 合并小事务:要求开发人员批量提交(如每1000条INSERT提交一次) |
日志文件迁移需重建日志组,谨慎操作 |
| REDO WASTAGE>1MB/小时 | 增大LOG_BUFFER:ALTER SYSTEM SET LOG_BUFFER=XXM SCOPE=SPFILE;(建议设置为16-64MB,无需过大) |
需重启数据库生效,重启前备份参数文件 |
| 日志切换>120次/小时 | 增大日志文件:ALTER DATABASE ADD LOGFILE GROUP 4 ('/oradata/redo04.log') SIZE 1000M;,删除小日志组(需确保状态为INACTIVE) |
新增日志组数量建议为CPU核心数的2-3倍 |
4. 优化验证(执行后1-2小时复查)
整体优化收尾
- 参数备份:执行
CREATE PFILE='/backup/pfile_optimize.ora' FROM SPFILE;,避免优化失败无法回滚 - AWR对比:优化前后各生成1份24小时AWR报告,对比核心指标(如DB Time、SQL响应时间、等待事件占比)
- 定期维护:
- 每周:生成SGA动态组件历史报告(
V$SGA_DYNAMIC_COMPONENTS_HISTORY) - 每月:全量检查SGA优化效果,调整参数(如业务增长后增大
DB_CACHE_SIZE)
- 每周:生成SGA动态组件历史报告(
- 风险规避:
- 静态参数(如
LOG_BUFFER、DB_BLOCK_SIZE)调整前需确认业务停机窗口 - 隐含参数(如
_DB_BLOCK_HASH_BUCKETS)调整需联系Oracle技术支持,避免未知风险
- 静态参数(如
附录:核心视图与工具速查
| 组件 | 核心视图 | 工具/脚本 |
|---|---|---|
| BUFFER CACHE | V$BUFFER_POOL_STATISTICS、V$SESSION_WAIT | AWR报告“Buffer Pool Statistics”部分 |
| SHARED POOL | V$SHARED_POOL_RESERVED、V$SQL | ASH报告“Top SQL by DB Time” |
| LIBRARY CACHE | X$KGLLK、V$LIBRARYCACHE | utlrp.sql(编译无效对象) |
| ROW CACHE | V$ROWCACHE、V$LATCHHOLDER | DBMS_SHARED_POOL.KEEP(固定对象) |
| LOG BUFFER | V$LOG、V$SYSSTAT | 日志切换监控脚本(自定义) |
七、SGA优化核心总结
SGA优化的本质是“资源合理分配+瓶颈精准定位”,核心要点包括:
- 基于业务类型分配内存:OLTP系统优先保障BUFFER CACHE和LOG BUFFER,OLAP系统可适当增大SHARED_POOL以支持复杂SQL解析。
- 以等待事件为诊断入口:通过
V$SESSION_WAIT、AWR报告定位LATCH争用、I/O延迟等具体瓶颈,避免盲目调整参数。 - 平衡“缓存命中率”与“资源争用”:缓存并非越大越好,需预留足够内存给操作系统和PGA,同时通过SQL优化、对象设计减少争用。
浙公网安备 33010602011771号