温馨提示×

ubuntu oracle为何卡顿

小樊
43
2026-10-16 12:49:43
栏目: 云计算

在 Ubuntu 上运行 Oracle 数据库 出现卡顿,通常不是单一原因,而是系统资源、Oracle 配置、磁盘 I/O 或参数设置共同导致的。下面按最常见原因 → 排查方法 → 解决建议来说明。


一、最常见原因

1️⃣ 内存不足(最常见)

Oracle 对内存非常敏感。

表现

  • 系统整体卡
  • sqlplus 登录慢
  • 查询突然变慢

排查

free -h
top

如果:

  • available 很小
  • swap 被大量使用

✅ 说明内存不足

解决

  • 减小 Oracle 内存参数(见下文)
  • 增加物理内存
  • 禁用或减小 swap 使用

2️⃣ SGA / PGA 配置不合理

Ubuntu 默认服务器可能内存不大,但 Oracle 默认参数偏大。

典型问题

  • SGA_TARGET 设置过大
  • PGA_AGGREGATE_TARGET 过高

查看

show parameter sga
show parameter pga

建议(示例,4G 内存服务器)

ALTER SYSTEM SET sga_target=1G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=500M SCOPE=SPFILE;

重启数据库生效。


3️⃣ 磁盘 I/O 性能差(非常关键)

Oracle 是 I/O 密集型数据库。

常见情况

  • 使用机械硬盘
  • 数据文件在慢盘
  • 红olog / undo 同盘

排查

iostat -x 1

看:

  • %util 接近 100%
  • await 很高

✅ 说明磁盘瓶颈

解决

  • 数据文件放 SSD
  • 分离:
    • redo
    • undo
    • datafile
  • 使用 ASM(生产推荐)

4️⃣ Ubuntu 系统参数未优化(很常见)

很多人直接装 Oracle,但没改内核参数。

关键参数

/etc/sysctl.conf

示例:

kernel.shmmax = 4294967296
kernel.shmall = 1048576
fs.file-max = 6815744
vm.swappiness = 10

应用:

sysctl -p

5️⃣ 交换分区(swap)导致卡顿

Ubuntu 默认 swappiness=60,对 Oracle 极不友好。

表现

  • 明明有内存,却用 swap
  • 数据库忽快忽慢

解决

sysctl -w vm.swappiness=10

6️⃣ 监听器 / 网络问题

如果是远程连接卡,本地不卡:

排查

lsnrctl status
ping db_host
tnsping service_name

解决

  • 检查 DNS
  • /etc/hosts 配置正确
  • 禁用 IPv6(有时有效)

7️⃣ Oracle 版本 & Ubuntu 兼容问题

⚠️ 官方不支持 Ubuntu

常见问题:

  • glibc 版本差异
  • 依赖库缺失

建议

  • 使用 Oracle Linux / RHEL / CentOS
  • 或 Ubuntu + Docker Oracle

二、快速自检清单(推荐)

free -h
top
iostat -x 1
df -h
lsnrctl status

三、最稳妥方案(强烈建议)

✅ Ubuntu + Docker Oracle

docker run -d \
  -p 1521:1521 \
  -e ORACLE_PASSWORD=oracle \
  container-registry.oracle.com/database/express:21.3.0-xe

四、如果你愿意,我可以更精确帮你

你可以补充:

  1. Oracle 版本(11g / 19c / 21c?)
  2. Ubuntu 版本
  3. 内存大小
  4. 是本地卡还是远程连卡
  5. 卡在:启动 / 查询 / 登录?

我可以直接给你一份针对性调优方案。

0 踩