温馨提示×

ubuntu oracle如何调优

小樊
39
2026-09-23 02:19:12
栏目: 云计算

在 Ubuntu + Oracle Database 环境下进行调优,通常可以从 操作系统(OS)层、Oracle 实例参数层、SQL 层、存储层 四个维度来做。下面给你一套比较实用、可落地的调优思路(以 Oracle 11g/12c/19c 常见场景为例)。


一、Ubuntu 系统层调优(非常重要)

1. 内核参数(sysctl)

编辑 /etc/sysctl.conf,常见优化项:

# 共享内存(Oracle SGA 依赖)
kernel.shmmax = 4294967296
kernel.shmall = 1048576
kernel.shmmni = 4096

# 信号量
kernel.sem = 250 32000 100 128

# 文件句柄
fs.file-max = 6815744

# 网络
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576

生效:

sysctl -p

2. 用户资源限制(limits.conf)

Oracle 用户需要足够资源:

vi /etc/security/limits.conf
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft memlock unlimited
oracle hard memlock unlimited

3. 关闭不必要的服务

systemctl disable snapd
systemctl disable bluetooth

避免干扰 IO 和 CPU。


4. 文件系统与 IO 调度

  • 推荐使用 ext4 / xfs
  • IO 调度器(SSD 用 none / mq-deadline):
echo none > /sys/block/sda/queue/scheduler

二、Oracle 实例参数调优

1. SGA / PGA(最关键)

SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;

一般经验:

  • SGA ≈ 物理内存的 40%~60%
  • PGA ≈ 20%

示例(16G 内存):

ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=3G SCOPE=SPFILE;

2. 连接与进程数

SHOW PARAMETER processes;
SHOW PARAMETER sessions;
ALTER SYSTEM SET processes=500 SCOPE=SPFILE;

3. 自动内存管理(可选)

ALTER SYSTEM SET memory_target=10G SCOPE=SPFILE;

⚠ 注意:SGA + PGA 与 memory_target 不要混用。


4. 日志与检查点

ALTER SYSTEM SET log_checkpoint_interval=0;
ALTER SYSTEM SET fast_start_mttr_target=300;

三、SQL 层调优(最常见瓶颈)

1. 查看慢 SQL

SELECT * FROM v$sql ORDER BY elapsed_time DESC;

2. 使用 AWR 报告

@?/rdbms/admin/awrrpt.sql

3. 常见优化手段

  • 建索引(避免全表扫描)
  • 避免 SELECT *
  • 使用绑定变量
  • 分析表统计信息:
EXEC DBMS_STATS.GATHER_TABLE_STATS('USER','TABLE');

四、存储与备份调优

1. 数据文件分离

  • 数据文件
  • redo log
  • archive log
    放在不同磁盘

2. redo log 大小

SELECT group#, bytes/1024/1024 FROM v$log;

一般 512MB~1GB 比较合适


五、监控工具推荐

  • top / htop
  • iostat -x 1
  • vmstat 1
  • Oracle Enterprise Manager(或 sqlplus)

六、典型问题速查

现象 可能原因
CPU 高 慢 SQL / 缺少索引
IO 高 全表扫描 / redo 小
内存不足 SGA 设置不合理
连接慢 processes 不够

如果你能告诉我:

  • Oracle 版本
  • Ubuntu 版本
  • 内存 / CPU
  • 主要用途(OLTP / 报表 / 开发)

我可以给你一套 针对性参数配置方案。

0 踩