温馨提示×

ubuntu下oracle慢咋办

小樊
48
2026-09-20 02:51:04
栏目: 云计算

在 Ubuntu 下遇到 Oracle 数据库访问/查询慢,可以从系统、数据库、网络、应用几个层面逐步排查。下面给你一套实用排查思路和常见解决办法。


一、先确认“慢”在哪里

先区分是:

  • 连接慢(连上就要很久)
  • 查询慢(连上后 SQL 执行慢)
  • 应用整体慢(代码 + 数据库)

可用工具:

time sqlplus user/pass@sid <<EOF
select count(*) from big_table;
EOF

二、系统层面(Ubuntu)

1. 看资源是否瓶颈

top
htop
free -h
df -h
iostat -x 1

常见问题:

  • CPU 打满
  • 内存不足,频繁 swap
  • 磁盘 IO 高(Oracle 很吃 IO)

建议:

  • Oracle 服务器 不要开 swap 或尽量少用
  • 使用 SSD / NVMe
  • /u01 单独挂载,避免和系统盘抢 IO

2. 内核参数(非常关键)

Ubuntu 默认参数不适合 Oracle。

检查:

sysctl -a | grep shm
sysctl -a | grep sem

常见优化(示例,按内存调整):

# /etc/sysctl.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmax = 17179869184
kernel.shmall = 4194304
net.ipv4.ip_local_port_range = 9000 65500

生效:

sysctl -p

3. 文件描述符 & 用户限制

ulimit -a

Oracle 用户建议:

# /etc/security/limits.conf
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

三、Oracle 数据库层面

1. 看等待事件(最重要)

SELECT event, total_waits, time_waited
FROM v$system_event
ORDER BY time_waited DESC;

常见问题:

  • db file sequential read → 索引/IO 问题
  • log file sync → 提交频繁
  • latch free → 并发问题

2. SQL 是否没走索引

EXPLAIN PLAN FOR
SELECT * FROM your_table WHERE col=:x;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

常见原因:

  • 没建索引
  • 使用了 LIKE '%xx%'
  • 对字段做了函数(WHERE TO_CHAR(time)=...)
  • 统计信息过期

更新统计信息:

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

3. SGA / PGA 配置

SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;

Ubuntu 上 Oracle 默认可能很小,建议:

  • sga_target 至少 40%~60% 物理内存
  • pga_aggregate_target 20% 左右

4. 归档日志 & 日志写

如果:

  • 开启归档
  • 磁盘慢
  • 日志频繁切换

会导致 commit 很慢

检查:

ARCHIVE LOG LIST;

四、网络层面

1. DNS 导致连接慢(非常常见)

Ubuntu 上 Oracle 客户端经常因 DNS 卡住。

解决:

  • listener.ora / tnsnames.ora 用 IP
  • /etc/resolv.conf 精简
  • 或加:
# /etc/hosts
127.0.0.1 localhost

2. 防火墙 / SELinux(Ubuntu 是 apparmor)

ufw status

五、应用层(Java / Python 等)

常见问题:

  • 每 SQL 都新建连接(没用连接池)
  • 一次查太多数据
  • 事务一直不提交

建议:

  • 使用连接池(HikariCP / Druid)
  • 批量操作
  • 控制事务范围

六、Ubuntu 上 Oracle 特别提示

  • Ubuntu 不是 Oracle 官方首选系统
  • 推荐用 Oracle Linux / RHEL
  • 如果是 Docker 跑 Oracle,性能通常更差

七、快速自检清单 ✅

  • [ ] 内存是否够,swap 是否用得多
  • [ ] IO 是否瓶颈
  • [ ] 内核参数是否优化
  • [ ] SQL 是否走索引
  • [ ] 统计信息是否最新
  • [ ] 是否 DNS 导致连接慢
  • [ ] SGA/PGA 是否合理

如果你愿意,可以告诉我:

  1. Oracle 版本(11g / 12c / 19c?)
  2. 怎么部署的(物理机 / 虚拟机 / Docker)
  3. 是 连接慢 还是 SQL 慢
  4. 慢的 SQL 或现象

我可以直接帮你定位到具体原因。

0 踩