1. 操作系统层面内存参数调优
在Linux系统中,需调整关键内核参数以支持Oracle内存需求,避免因系统限制导致内存分配失败。主要参数包括:
sga_size_in_pages = (sga_size_in_bytes / page_size)(如4GB=4294967296字节,page_size=4KB,则shmall=1048576),表示系统共享内存总页数;2. SGA(系统全局区)优化
SGA是Oracle实例共享的内存区域,包含Database Buffer Cache、Shared Pool、Redo Log Buffer等组件,需根据业务负载合理分配:
MEMORY_TARGET(目标内存大小,如2GB)和MEMORY_MAX_TARGET(最大内存大小,如4GB)参数,让Oracle自动分配SGA与PGA内存,简化调优流程(适用于Oracle 11g及以上版本);DB_CACHE_SIZE(如800MB),占比建议为SGA的50%-70%,可根据v$buffer_pool_statistics视图监控命中率(目标>90%);SHARED_POOL_SIZE(如500MB),占比建议为SGA的20%-30%,可通过v$shared_pool_advice视图评估合适大小;LARGE_POOL_SIZE(如200MB),避免共享池碎片化;JAVA_POOL_SIZE(如100MB),适用于Java存储过程较多的场景。3. PGA(程序全局区)优化
PGA是每个服务器进程私有的内存区域,包含排序区、散列区、会话信息等,优化重点是合理分配工作区内存:
PGA_AGGREGATE_TARGET(目标PGA总大小,如1.5GB)和WORKAREA_SIZE_POLICY=AUTO(默认开启),Oracle会根据负载动态分配各操作(排序、哈希连接)的内存,避免手动调整繁琐;WORKAREA_SIZE_POLICY=MANUAL),需设置以下参数:
SORT_AREA_SIZE:排序操作内存(如512MB),影响ORDER BY、GROUP BY等操作性能;HASH_AREA_SIZE:哈希连接内存(如1GB),影响哈希连接操作性能;BITMAP_MERGE_AREA_SIZE/CREATE_BITMAP_AREA_SIZE:位图操作内存(如256MB),适用于位图索引场景;4. 启用大页内存(HugePages)
大页内存可减少Linux系统的页表管理开销,提高内存访问效率。操作步骤:
大页数量 = (SGA总大小 + PGA总大小) / hugepagesize(如SGA=4GB、PGA=1.5GB,hugepagesize=2MB,则大页数量≈2750);/etc/sysctl.conf文件,添加vm.nr_hugepages=2750;sysctl -p使配置生效;hugetlb组,并重启Oracle实例。5. 监控与持续优化
通过Oracle视图实时监控内存使用情况,识别瓶颈并调整:
v$sgastat(查看SGA各组件内存使用详情)、v$sga_dynamic_components(查看SGA动态组件变化);v$pgastat(查看PGA总使用量、工作区使用情况)、v$sql_workarea_histogram(查看工作区大小分布);DBMS_WORKLOAD_REPOSITORY包生成AWR报告,分析内存使用趋势;使用ADDM工具识别内存瓶颈(如SGA命中率低、PGA工作区过多遍历)。6. 其他优化技巧
SELECT * FROM emp WHERE empno=1改为SELECT * FROM emp WHERE empno=:1);ALTER SYSTEM FLUSH SHARED_POOL),释放内存;PROCESSES和SESSIONS参数,避免过多连接导致内存耗尽(如每个连接约占用PGA 10MB-100MB)。