Oracle SGA 自动管理详解
Oracle SGA 自动管理详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
SGA 自动管理(ASMM)自动调整 SGA 组件[1]:
详细见:Oracle 内存调优 SGA PGA、Oracle SGA 调优。
2. ASMM
2.1 启用
ALTER SYSTEM SET sga_target = 8G SCOPE=BOTH;
ALTER SYSTEM SET sga_max_size = 10G SCOPE=SPFILE;
2.2 自动调整
- Buffer Cache
- Shared Pool
- Large Pool
- Java Pool
- Streams Pool
- Fixed SGA + Redo Buffer 不自动
3. AMM
3.1 启用
ALTER SYSTEM SET memory_target = 16G SCOPE=BOTH;
ALTER SYSTEM SET memory_max_target = 20G SCOPE=SPFILE;
3.2 优势
- SGA + PGA 统一管理
- 自动
- 简化
3.3 限制
- /dev/shm 大小
- HugePages
- 不适合所有场景
4. 组件
4.1 Buffer Cache
- 数据块缓存
- LRU
- 自动调整
4.2 Shared Pool
- 库缓存
- 数据字典
- 结果缓存
4.3 Large Pool
- RMAN
- 并行
- 共享服务器
4.4 Java Pool
- Java 程序
- JVM
4.5 Streams Pool
- Streams
- GoldenGate
- 队列
5. 查看
5.1 视图
SELECT * FROM v$sga;
SELECT * FROM v$sgainfo;
SELECT * FROM v$sga_dynamic_components;
SELECT * FROM v$sga_dynamic_free_memory;
SELECT * FROM v$sga_resize_ops;
5.2 参数
SHOW PARAMETER sga;
SHOW PARAMETER memory;
6. 调整
6.1 自动
- ASMM 自动调整
- 监控
- 评估
6.2 手动
ALTER SYSTEM SET db_cache_size = 4G;
ALTER SYSTEM SET shared_pool_size = 2G;
6.3 颗粒
SELECT * FROM v$sga_dynamic_components;
-- GRANULE_SIZE
7. HugePages
7.1 配置
# /etc/sysctl.conf
vm.nr_hugepages = 4096
# 检查
cat /proc/meminfo | grep Huge
7.2 Oracle
ALTER SYSTEM SET use_large_pages = ONLY SCOPE=SPFILE;
7.3 优势
- 大页
- TLB 效率
- 性能
8. Buffer Cache
8.1 大小
- 命中率 > 95%
- 监控
- 调整
8.2 查看
SELECT name, value FROM v$sysstat
WHERE name IN ('db block gets', 'consistent gets', 'physical reads');
-- 命中率
SELECT 1 - (physical_reads / (db_block_gets + consistent_gets)) AS hit_ratio
FROM ...
8.3 多池
ALTER SYSTEM SET db_keep_cache_size = 1G;
ALTER SYSTEM SET db_recycle_cache_size = 1G;
9. Shared Pool
9.1 库缓存
SELECT namespace, gets, gethits, pins, pinhits
FROM v$librarycache;
9.2 命中率
- gethitratio > 95%
- pinhitratio > 95%
- 调整
9.3 绑定变量
- 减少硬解析
- 命中率
- 性能
10. 监控
10.1 大小
SELECT component, current_size, min_size, max_size
FROM v$sga_dynamic_components;
10.2 调整历史
SELECT component, oper_type, oper_mode, parameter,
initial_size, target_size, final_size, status
FROM v$sga_resize_ops
ORDER BY start_time DESC;
10.3 建议
SELECT * FROM v$db_cache_advice;
SELECT * FROM v$shared_pool_advice;
11. 性能
11.1 命中率
- Buffer Cache: > 95%
- Library Cache: > 95%
- Dictionary Cache: > 95%
11.2 等待
SELECT event, time_waited
FROM v$system_event
WHERE event LIKE '%buffer%' OR event LIKE '%library%';
详细见:Oracle 数据库等待事件详解。
12. 应用场景
12.1 OLTP
- Buffer Cache 大
- Shared Pool 中
- 绑定变量
12.2 OLAP
- Buffer Cache 大
- 并行
- Large Pool
12.3 混合
- 自动调整
- ASMM
- 监控
13. 常见问题
13.1 ORA-00838
- sga_target 过小
- 调整
13.2 ORA-04031
- Shared Pool 不足
- ASMM 自动
- 优化
13.3 性能
- 命中率
- 等待
- 调优
14. 最佳实践
- ASMM:推荐
- HugePages:大 SGA
- 绑定变量:硬解析
- 监控:命中率
- 调整:建议
- 颗粒:合理
- 多池:KEEP/RECYCLE
- 文档:配置
- 测试:性能
- 演练:定期
15. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Memory Management” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/