温馨提示×

ubuntu oracle慢是什么原因

小樊
37
2026-09-28 23:30:24
栏目: 云计算

在 Ubuntu 上运行 Oracle 数据库变慢,原因可能涉及系统、数据库配置、存储、网络等多个层面。下面按常见原因 → 排查方法 → 解决建议给你一个系统性的梳理。


一、系统层面原因(最常见)

1. 内存不足 / Swap 频繁

Oracle 对内存非常敏感。

现象

  • 系统卡顿
  • top 中 si/so(swap in/out)不为 0
  • Oracle 进程频繁被换出

排查

free -h
vmstat 1

解决

  • 增大物理内存
  • 调整 SGA/PGA,避免超过物理内存
  • 减少系统其他服务占用

2. 磁盘 I/O 性能差(非常常见)

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

常见原因

  • 使用云盘 / 普通 HDD
  • 数据文件、redo、temp 在同一磁盘
  • I/O 队列堵塞

排查

iostat -x 1

关注:

  • %util 接近 100%
  • await 很高

解决

  • 使用 SSD / NVMe
  • 分离:
    • 数据文件
    • redo log
    • temp tablespace
  • 增大 redo log 大小

3. CPU 资源不足或被抢占

现象

  • load average 很高
  • Oracle 进程等待 CPU

排查

top
mpstat -P ALL 1

解决

  • 限制其他进程
  • 增加 CPU 核心
  • 调整并行度(PARALLEL)

二、Oracle 数据库配置问题

4. SGA / PGA 配置不合理

典型问题

  • SGA 太小 → 频繁物理读
  • PGA 太小 → 排序走磁盘

查看

SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;

建议

  • SGA ≈ 物理内存 50–70%
  • PGA ≈ 20–30%

5. 统计信息过期

现象

  • 同样的 SQL 以前快,现在慢

解决

EXEC DBMS_STATS.GATHER_TABLE_STATS('USER','TABLE');

6. SQL 未使用索引 / 执行计划差

排查

EXPLAIN PLAN FOR <SQL>;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

常见原因

  • 隐式类型转换
  • 函数包裹索引列
  • 统计信息不准

7. Redo / Undo 配置不合理

  • redo 太小 → 频繁日志切换
  • undo 太小 → ORA-01555

三、Ubuntu 特有因素

8. 文件系统问题

不推荐

  • ext4 默认参数不适合 Oracle
  • 未关闭 atime

建议

mount -o remount,noatime /oracle

9. HugePages 未启用

Oracle 强烈建议使用 HugePages。

检查

cat /proc/meminfo | grep Huge

效果

  • 减少 TLB miss
  • 提升性能 10–30%

10. 内核参数不合理

如:

  • shmmax
  • shmmni
  • sem
  • file-max

四、网络原因(客户端慢)

  • 客户端和数据库跨地域
  • DNS 解析慢
  • 防火墙丢包

排查

ping db_host
tnsping orcl

五、快速自检清单(建议按顺序)

  1. free -h → 内存
  2. iostat -x 1 → 磁盘
  3. top → CPU
  4. EXPLAIN PLAN → SQL
  5. DBMS_STATS → 统计信息
  6. HugePages → 是否启用
  7. 数据文件分布 → I/O 是否均衡

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

你可以补充:

  • Oracle 版本(11g / 12c / 19c)
  • Ubuntu 版本
  • 物理机 / 云服务器
  • 慢的是:整体慢 还是 某条 SQL 慢
  • 是否刚迁移 / 刚重启

我可以直接帮你给具体参数优化方案。

0 踩