优化Ubuntu上Oracle内存使用的关键策略
调整内核参数
编辑/etc/sysctl.conf文件,优化以下参数以提升内存管理效率:
kernel.shmall:设置为物理内存页数的一半(如16GB物理内存为8388608);kernel.shmmax:设置为物理内存大小(如16GB设为17179869184);vm.nr_hugepages:启用大页内存(如分配1024页,每页2MB则共2GB);vm.swappiness:降低至10以下(减少系统使用交换空间的倾向)。sudo sysctl -p使配置生效。关闭不必要的系统服务
使用systemctl命令停止非核心服务(如oracle.service外的其他守护进程),减少内存竞争。例如:
sudo systemctl stop unneeded-service sudo systemctl disable unneeded-service 配置大页内存
Oracle使用大页可减少内存碎片、提高访问效率。操作步骤:
SHOW PARAMETER USE_LARGE_PAGES;(需设为TRUE);物理内存(MB)/ 大页大小(默认2MB);/etc/default/grub,在GRUB_CMDLINE_LINUX中添加vm.nr_hugepages=1024,更新grub并重启:sudo update-grub sudo reboot 调整vm.max_map_count
增加内存映射区域数量,避免ORA-4030错误。编辑/etc/sysctl.conf,添加:
vm.max_map_count=65530 执行sudo sysctl -p生效。
采用自动内存管理(AMM)
通过MEMORY_TARGET和MEMORY_MAX_TARGET参数,让Oracle自动分配SGA与PGA内存。操作步骤:
CREATE PFILE='/home/oracle/pfile.ora' FROM SPFILE;;ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;;ALTER SYSTEM SET MEMORY_TARGET=14G SCOPE=SPFILE; ALTER SYSTEM SET MEMORY_MAX_TARGET=16G SCOPE=SPFILE;;SGA_TARGET和PGA_AGGREGATE_TARGET)。优化SGA组件
SGA是共享内存区域,需合理分配各组件:
40%-60%(如SGA_TARGET=20G,则DB_CACHE_SIZE=8G-12G);10%-20%(如SHARED_POOL_SIZE=2G-4G);LOG_BUFFER=16M-64M)。ALTER SYSTEM SET DB_CACHE_SIZE=10G SCOPE=BOTH; ALTER SYSTEM SET SHARED_POOL_SIZE=3G SCOPE=BOTH; ALTER SYSTEM SET LOG_BUFFER=32M SCOPE=BOTH; 优化PGA内存
PGA是会话私有内存,用于排序、哈希等操作。设置PGA_AGGREGATE_TARGET为物理内存的5%-25%(如PGA_AGGREGATE_TARGET=3G-8G),避免过大导致内存浪费或过小导致磁盘排序(TEMP表空间压力大)。
使用动态性能视图监控内存
SELECT * FROM V$SGASTAT;;SELECT * FROM V$PGASTAT;;SELECT * FROM V$MEMORY_DYNAMIC_COMPONENTS;;SELECT * FROM V$MEMORY_RESIZE_OPS;。生成AWR/ADDM报告
通过AWR(自动工作负载存储库)和ADDM(自动数据库诊断监视器)识别内存瓶颈:
@?/rdbms/admin/awrrpt.sql -- 生成AWR报告 @?/rdbms/admin/addmrpt.sql -- 生成ADDM报告 报告会指出SGA/PGA分配不合理、共享池碎片化等问题,指导针对性调整。