温馨提示×

Oracle在Ubuntu上的资源占用如何

小樊
43
2025-11-15 03:47:22
栏目: 云计算

Oracle在Ubuntu上的资源占用概览与优化要点

一、不同部署形态的典型占用

  • 原生安装(19c/21c 等):数据库常驻内存主要由 SGA(系统全局区)PGA(程序全局区) 决定;SGA 通常建议设为物理内存的1/2~1/3,PGA 约 1/4~1/2。例如 16GB 内存可先配 SGA_TARGET=8GPGA_AGGREGATE_TARGET=4G,并按负载微调。系统层面需保证足够的 共享内存、文件句柄、进程数 等上限,否则会出现性能抖动或报错。
  • Docker 容器:除数据库自身内存外,还需为容器配置足够的 /dev/shm(容器共享内存)。例如使用 Oracle 11g XE 镜像时,常见做法是通过 –shm-size=1G 启动,避免共享内存不足导致实例异常。
  • Oracle XE(Express Edition):存在硬性上限,数据库最大 4GB(不含系统占用),内存上限 1GB,CPU 上限 1 核,更适合开发/测试或轻量场景。

二、系统资源占用构成与关键内核参数

  • 共享内存:Oracle 依赖 System V 共享内存。常见建议为:kernel.shmmax ≈ 物理内存的 1/2~1/4(字节)kernel.shmall 需能覆盖 SGA(单位页,常见页大小 4KB),kernel.shmmni=4096
  • 信号量与 AIO:kernel.sem=250 32000 100 128fs.aio-max-nr=1048576(提升 I/O 并发能力)。
  • 文件与进程:fs.file-max=6815744(系统最大文件描述符);Oracle 用户级建议 nproc 16384nofile 65536stack 10240(单位 KB)。
  • 网络与端口:net.ipv4.ip_local_port_range=9000 65500(缓解短连接端口耗尽),并适当调大 rmem/wmem 缓冲。以上参数需写入 /etc/sysctl.conf 并用 sysctl -p 生效。

三、Oracle内存参数与占用控制

  • 自动内存管理(AMM):设置 memory_target(SGA+PGA 的目标总内存)与 memory_max_target(上限)。示例:
    ALTER SYSTEM SET memory_target=8G SCOPE=SPFILE;
    ALTER SYSTEM SET memory_max_target=16G SCOPE=SPFILE;
    重启实例后生效。适合希望数据库自动平衡 SGA/PGA 的场景。
  • 手动/ASMM:分别设置 sga_target/sga_max_sizepga_aggregate_target。示例:
    ALTER SYSTEM SET sga_target=6G SCOPE=BOTH;
    ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=BOTH;
    建议以 free -h 观察系统可用内存,避免超出物理内存导致换页与抖动。生产环境以实际负载逐步调优为宜。

四、快速自检与常见瓶颈定位

  • 系统层:执行 sysctl -a | grep shm / file-max / sem 检查内核参数;切换到 oracle 用户执行 ulimit -u/-n 验证进程/文件句柄限制是否生效。
  • Oracle 层:
    • 查看内存目标:SHOW PARAMETER memory_target / memory_max_target / sga_target / pga_aggregate_target
    • 观察 SGA/PGA 使用:SELECT * FROM v$sgainfo;SELECT * FROM v$pga_aggregate_target_advice;
    • 若使用 Docker,确认容器启动时设置了足够的 –shm-size,否则可能因共享内存不足导致实例启动或运行异常。

0