温馨提示×

linux oracle配置如何调优

小樊
41
2026-09-25 17:13:04
栏目: 云计算

下面从 Linux 操作系统层 + Oracle 数据库层 两个维度,系统性讲一下 Linux 下 Oracle 性能调优 的常见配置和优化思路。内容偏实战,适合生产环境参考。


一、Linux 系统层调优(基础但非常关键)

1. 内核参数调优(/etc/sysctl.conf)

Oracle 依赖大量共享内存和信号量,必须配置。

# 共享内存
kernel.shmmax = 68719476736        # 单段最大共享内存(如 64G)
kernel.shmall = 16777216           # 共享内存总页数(shmmax/PAGE_SIZE)
kernel.shmmni = 4096

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

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

# 网络
net.ipv4.ip_local_port_range = 1024 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

# 交换行为(避免频繁 swap)
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

应用:

sysctl -p

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

Oracle 用户必须放开限制:

oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768

3. 关闭不必要服务 & NUMA

# 关闭 numad(数据库服务器建议)
systemctl stop numad
systemctl disable numad

BIOS / GRUB 中可关闭 NUMA(大内存机器有时更稳定)


4. 文件系统与 IO 调优

✅ 推荐:

  • XFS(生产首选)
  • UUID 挂载
  • 禁用 atime
/dev/sdb1 /u01 xfs defaults,noatime,nodiratime 0 0

IO 调度器(SSD 用 none / mq-deadline):

echo mq-deadline > /sys/block/sdb/queue/scheduler

5. 大页(HugePages)——非常重要

避免 SGA 被 swap:

grep Huge /proc/meminfo

计算所需大页数:

# SGA大小 / 2MB

配置:

vm.nr_hugepages = 30000

并在 oracle 用户 limits 中允许锁定内存:

oracle soft memlock unlimited
oracle hard memlock unlimited

二、Oracle 数据库层调优

1. SGA / PGA 配置(最重要)

-- 查看
SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;

-- 建议(物理内存 64G 示例)
ALTER SYSTEM SET sga_target=40G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=8G SCOPE=SPFILE;

经验:

  • SGA ≈ 60–70% 内存
  • PGA ≈ 20%
  • 剩余给 OS

2. 使用 AMM / ASMM

  • ASMM(推荐):SGA 自动管理
  • AMM(不推荐生产):SGA+PGA 自动
ALTER SYSTEM SET memory_target=0 SCOPE=SPFILE;
ALTER SYSTEM SET sga_target=40G SCOPE=SPFILE;

3. Redo & Undo 调优

-- Redo 日志至少 500MB
SELECT * FROM v$log;

-- Undo 保留
ALTER SYSTEM SET undo_retention=1800;

4. 统计信息 & SQL 调优

EXEC DBMS_STATS.GATHER_DATABASE_STATS;

常见慢 SQL 处理:

  • 建索引
  • 避免 SELECT *
  • 避免隐式转换
  • 使用绑定变量

5. 并行 & 连接数

SHOW PARAMETER processes;
ALTER SYSTEM SET processes=2000 SCOPE=SPFILE;

适度使用并行:

ALTER SESSION ENABLE PARALLEL DML;

三、监控与诊断(必须做)

# OS
top, vmstat 1, iostat -x 1, sar -u

# Oracle
SELECT * FROM v$session_wait;
SELECT * FROM v$sysstat;
SELECT * FROM v$sql ORDER BY elapsed_time DESC;

四、典型调优顺序(经验)

  1. Linux 内核 + 大页
  2. IO / 文件系统
  3. SGA / PGA
  4. SQL / 索引
  5. 监控验证

如果你能告诉我:

  • Oracle 版本(11g / 12c / 19c)
  • 内存大小
  • 业务类型(OLTP / OLAP)
  • 当前主要瓶颈(CPU / IO / 锁)

我可以给你一套 针对性参数模板。

0 踩