在调整Oracle内存前,需先确认Ubuntu系统的物理内存大小(通过free -h命令查看),这是内存配置的核心依据。Oracle内存设置需避免占用过多系统内存,导致操作系统或其他应用无法正常运行。
Oracle支持三种内存管理模式,Ubuntu环境下推荐优先使用自动内存管理(AMM)或自动共享内存管理(ASMM),减少手动调整复杂度:
memory_target(Oracle可使用的内存总量)和memory_max_target(memory_target的上限)参数实现,Oracle自动分配SGA与PGA的比例。适合需要快速部署或频繁调整的场景。sga_target(SGA总量)和pga_aggregate_target(PGA总量)参数实现,Oracle自动调整SGA内部组件(如共享池、缓冲区缓存)的大小。适合需要更细粒度控制的场景。db_cache_size(数据缓冲区)、shared_pool_size(共享池)等参数,适合有丰富经验的DBA或特殊性能需求的场景。SGA是Oracle的共享内存区域,用于存储数据缓冲区、共享池、重做日志缓冲区等,建议占物理内存的30%-70%(需预留足够内存给操作系统和PGA)。
memory_target和memory_max_target(如16G物理内存可设为memory_target=12G、memory_max_target=24G)。sga_target(如8G)和sga_max_size(如8G),并调整SGA内部组件比例(如shared_pool_size占SGA的15%-20%,db_cache_size占SGA的50%-60%)。PGA是每个Oracle进程的私有内存区域,用于存储排序、哈希等操作数据,建议占物理内存的5%-25%(需避免与SGA冲突)。
pga_aggregate_target参数(如2G),AMM模式下无需单独设置PGA,ASMM模式下需单独配置。为提升Oracle内存使用效率,需调整Ubuntu内核参数:
vm.nr_hugepages参数分配大页内存(如vm.nr_hugepages=1024),减少内存碎片,提升SGA访问效率。sysctl vm.nr_overcommit_memory=1和echo never > /sys/kernel/mm/transparent_hugepage/enabled关闭。vm.swappiness设置为0或小于10(如vm.swappiness=5),减少系统使用交换空间的倾向,避免内存溢出。配置完成后,需通过以下方式监控内存使用情况,及时优化:
free -h查看系统内存占用;SELECT * FROM V$MEMORY_DYNAMIC_COMPONENTS;查看SGA/PGA动态组件变化;SELECT * FROM V$PGA_AGGREGATE_TARGET_ADVICE;分析PGA使用效率。注:以上参数需根据实际业务负载(如OLTP/OLAP)、并发用户数、数据量等进行调整,建议先在测试环境验证效果,再应用到生产环境。