温馨提示×

ubuntu oracle如何调内存

小樊
50
2026-09-07 20:58:12
栏目: 云计算

Ubuntu + Oracle 数据库 环境下,“调内存”通常指调整 Oracle 的 SGA / PGA 内存参数,以及 系统层面(Linux)的内存与内核参数。下面按常见场景说明。


一、Oracle 内存结构简介

Oracle 主要使用两类内存:

  • SGA(System Global Area):共享内存(缓冲池、共享池等)
  • PGA(Program Global Area):每个会话私有内存

常见参数:

  • SGA_TARGET
  • SGA_MAX_SIZE
  • PGA_AGGREGATE_TARGET
  • MEMORY_TARGET(自动内存管理)

二、查看当前 Oracle 内存配置

oracle 用户登录:

sqlplus / as sysdba

查看参数:

SHOW PARAMETER sga
SHOW PARAMETER pga
SHOW PARAMETER memory

三、方式一:自动内存管理(推荐新手)

使用 MEMORY_TARGET(11g+)

ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET=4G SCOPE=SPFILE;

重启数据库:

SHUTDOWN IMMEDIATE;
STARTUP;

⚠️ 要求:

  • /dev/shm 足够大
  • 系统内存足够

四、方式二:手动管理 SGA / PGA(生产常用)

ALTER SYSTEM SET SGA_TARGET=3G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_MAX_SIZE=3G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=SPFILE;

重启:

SHUTDOWN IMMEDIATE;
STARTUP;

五、Ubuntu 系统层必要调整(非常重要)

1️⃣ 调整 /dev/shm(Oracle 强依赖)

查看:

df -h /dev/shm

临时调整:

mount -o remount,size=4G /dev/shm

永久生效(Ubuntu): 编辑 /etc/fstab

tmpfs /dev/shm tmpfs defaults,size=4G 0 0

2️⃣ 调整内核参数(官方要求)

编辑 /etc/sysctl.conf

kernel.shmmax = 4294967296
kernel.shmall = 1048576
kernel.sem = 250 32000 100 128
fs.file-max = 6815744

生效:

sysctl -p

3️⃣ Oracle 用户内存限制

编辑 /etc/security/limits.conf

oracle soft memlock unlimited
oracle hard memlock unlimited
oracle soft nofile 65536
oracle hard nofile 65536

六、验证内存是否生效

SELECT * FROM v$sga;
SELECT * FROM v$pgastat;

或:

ipcs -m

七、常见问题

❌ ORA-00845: MEMORY_TARGET not supported
/dev/shm 太小

❌ ORA-27102: out of memory
✅ 系统内存或 shmmax 不够


八、建议配置比例(示例)

物理内存 SGA PGA
8G 4G 1.5G
16G 8G 3G
32G 20G 6G

如果你能告诉我:

  • Oracle 版本(11g / 12c / 19c)
  • Ubuntu 版本
  • 物理内存大小

我可以给你一套精确调优参数

0