使用SQL命令查看内存参数:
SHOW PARAMETER target; -- 查看MEMORY_TARGET等自动内存管理参数
SHOW PARAMETER sga_target; -- 查看SGA相关参数
SHOW PARAMETER pga_aggregate_target; -- 查看PGA相关参数
适用于Oracle 10g及以上版本,通过设置MEMORY_TARGET和MEMORY_MAX_TARGET自动分配SGA和PGA内存。
-- 设置AMM参数(单位:GB)
ALTER SYSTEM SET MEMORY_TARGET=8G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET=16G SCOPE=SPFILE;
需手动设置SGA组件,PGA由系统自动管理。
-- 设置SGA参数(单位:GB)
ALTER SYSTEM SET SGA_TARGET=6G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_MAX_SIZE=6G SCOPE=SPFILE;
-- 手动设置共享池等组件(可选)
ALTER SYSTEM SET SHARED_POOL_SIZE=2G SCOPE=SPFILE;
需为每个内存组件单独设置参数(如SGA的DB_CACHE_SIZE、SHARED_POOL_SIZE等)。
-- 示例:手动配置SGA组件(单位:GB)
ALTER SYSTEM SET DB_CACHE_SIZE=3G SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE=1G SCOPE=SPFILE;
-- 设置PGA参数
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;
设置大页内存
编辑/etc/sysctl.conf,添加:
vm.nr_hugepages=1024 # 根据物理内存调整,建议为内存的50%-70%
执行sysctl -p生效。
关闭透明大页
编辑/etc/default/grub,在GRUB_CMDLINE_LINUX中添加:
transparent_hugepage=never
执行update - grub并重启系统。
调整内核参数
# 减少交换倾向
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
监控内存使用
-- 查看SGA使用情况
SELECT * FROM V$SGAINFO;
-- 查看PGA使用情况
SELECT * FROM V$PGA_AGGREGATE_TARGET_ADVICE;
动态调整参数
若需临时调整,可直接执行SQL命令(无需重启):
ALTER SYSTEM SET MEMORY_TARGET=10G SCOPE=BOTH; -- 立即生效
MEMORY_TARGET不超过系统可用内存的80%,避免过度占用导致系统不稳定。参考来源: