在 Ubuntu + Oracle 数据库 环境下,“调内存”通常指调整 Oracle 的 SGA / PGA 内存参数,以及 系统层面(Linux)的内存与内核参数。下面按常见场景说明。
Oracle 主要使用两类内存:
常见参数:
SGA_TARGETSGA_MAX_SIZEPGA_AGGREGATE_TARGETMEMORY_TARGET(自动内存管理)以 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 足够大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;
/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
编辑 /etc/sysctl.conf:
kernel.shmmax = 4294967296
kernel.shmall = 1048576
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
生效:
sysctl -p
编辑 /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 |
如果你能告诉我:
我可以给你一套精确调优参数。