启用大页内存(HugePages)
大页可减少内存碎片,提高Oracle对内存的访问效率。需完成以下配置:
grep HugePages /proc/meminfo;Oracle_SGA_SIZE / 2MB(如SGA为8GB,则需4096个页面);/etc/sysctl.conf文件,添加:vm.nr_hugepages=4096;echo "oracle soft memlock 8388608" >> /etc/security/limits.conf、echo "oracle hard memlock 8388608" >> /etc/security/limits.conf(8388608KB=8GB);调整内核参数
修改/etc/sysctl.conf优化内存管理,关键参数如下:
kernel.shmall:系统共享内存总页数,建议设置为物理内存页数(如16GB物理内存则为16*1024*1024/4=4194304);kernel.shmmax:单进程可使用的最大共享内存段大小,建议设置为略小于物理内存(如16GB物理内存则为17179869184);vm.swappiness:降低系统使用交换空间的倾向(0-100,默认60),建议设置为10以下(如vm.swappiness=10)。sudo sysctl -p使参数生效。关闭不必要的系统服务
通过systemctl命令停止非必需服务(如apache2、postfix等),减少内存占用:
sudo systemctl stop 服务名.service
sudo systemctl disable 服务名.service
避免服务与Oracle竞争内存资源。
选择合适的内存管理模式
MEMORY_TARGET和MEMORY_MAX_TARGET参数自动分配SGA与PGA内存,简化管理。适用于大多数场景,尤其新手用户。
ALTER SYSTEM SET MEMORY_MAX_TARGET=16G SCOPE=SPFILE; -- 设置内存上限
ALTER SYSTEM SET MEMORY_TARGET=12G SCOPE=SPFILE; -- 设置初始总内存
ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE; -- 将SGA目标设为0(由AMM管理)
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;-- 将PGA目标设为0(由AMM管理)
SHUTDOWN IMMEDIATE;
STARTUP;
SHOW PARAMETER TARGET;(确认MEMORY_TARGET和MEMORY_MAX_TARGET已设置,SGA_TARGET/PGA_AGGREGATE_TARGET为0)。SGA_TARGET参数自动分配SGA内各组件(共享池、缓冲区高速缓存等)内存,PGA仍需手动设置。适用于需要精细控制PGA的场景。
ALTER SYSTEM SET SGA_TARGET=8G SCOPE=SPFILE; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;DB_CACHE_SIZE、SHARED_POOL_SIZE)及PGA大小,适用于高级用户或有特殊需求的环境(如内存资源极度紧张的场景)。关键内存组件优化
SELECT (SUM(pins)-SUM(reloads))/SUM(pins) "Library Cache Hit Ratio" FROM v$librarycache;计算)。若命中率低,需增加SHARED_POOL_SIZE(如从200MB调整至640MB)。1 - (PHYSICAL_READS / (DB_BLOCK_GETS + CONSISTENT_GETS)))。若命中率低,需增加DB_CACHE_SIZE(如从1GB调整至2GB)。ORA-04031错误,可设置LARGE_POOL_SIZE(如100MB)。监控内存使用情况
SELECT * FROM v$sgainfo;(显示SGA各组件大小、使用率);SELECT * FROM v$pgastat;(显示PGA总分配、命中率等);SELECT * FROM v$memory_target_advice;(预测不同MEMORY_TARGET下的性能变化,帮助优化设置)。