温馨提示×

linux oracle如何调优

小樊
57
2026-10-01 12:38:21
栏目: 云计算

在 Linux 上运行 Oracle 数据库时,“调优”通常分为 操作系统层(Linux)调优 和 数据库层(Oracle)调优 两大部分。下面我按实战思路给你一个系统化的调优指南。


一、Linux 系统层调优(重点)

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

常见关键参数(示例为 16G–64G 内存环境):

# 共享内存
kernel.shmmax = 8589934592        # 单段最大共享内存(示例8G)
kernel.shmall = 2097152           # 共享内存总页数
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 = 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 65536 4194304

# Swap 行为
vm.swappiness = 10
vm.dirty_ratio = 10
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 memlock unlimited
oracle hard memlock unlimited

3. 关闭透明大页(THP)

THP 对 Oracle 性能有害:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

永久生效(grub 或 rc.local):

transparent_hugepage=never

4. 使用 HugePages(推荐)

减少 TLB miss,提高 SGA 访问效率。

步骤简述:

  1. 计算 SGA 大小
  2. 设置 /etc/sysctl.conf
vm.nr_hugepages = 4096
  1. 重启或 sysctl -p
  2. Oracle 中 USE_LARGE_PAGES=TRUE

5. 磁盘 I/O 调优

  • 使用 XFS / EXT4
  • I/O 调度器:
echo deadline > /sys/block/sda/queue/scheduler

(SSD 可用 none / mq-deadline)

  • 多磁盘做 ASM,避免单盘瓶颈
  • 日志文件(redo)放低延迟磁盘

6. CPU 与 NUMA

  • 多路 CPU 建议绑定 Oracle 进程
  • 避免跨 NUMA 访问:
numactl --interleave=all

二、Oracle 数据库层调优

1. SGA / PGA 设置

ALTER SYSTEM SET SGA_TARGET=4G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;

经验:

  • OLTP:SGA 大,PGA 适中
  • OLAP:PGA 大

2. 内存自动管理

MEMORY_TARGET / SGA_TARGET / PGA_AGGREGATE_TARGET

建议:

  • 11g+ 可用 AMM(测试环境)
  • 生产环境推荐 手动 SGA + PGA

3. Redo Log 优化

  • 每组至少 2 个成员
  • 大小 512MB–1GB
  • 避免频繁 log switch
SELECT * FROM v$log;

4. 统计信息 & SQL 调优

EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');

使用:

  • AWR
  • SQL Monitor
  • EXPLAIN PLAN
  • 绑定变量,避免硬解析

5. 参数建议(常见)

optimizer_index_cost_adj = 30~50
cursor_sharing = FORCE (谨慎)
db_writer_processes = CPU核数/2

三、监控与诊断工具

Linux

  • top / htop
  • iostat -x 1
  • vmstat 1
  • sar -u -r -d

Oracle

  • v$sysstat
  • v$session
  • v$sql
  • AWR / ADDM
  • OEM

四、典型误区

❌ 只调 Oracle 不调 OS
❌ swappiness=0(易 OOM)
❌ 开 THP
❌ SGA 超过物理内存
❌ 忽视 I/O 延迟


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

  • Oracle 版本(11g / 12c / 19c)
  • 内存 & CPU 配置
  • OLTP 还是 OLAP
  • 当前主要性能问题(慢查询 / CPU 高 / IO 高)

我可以给你一套针对性调优方案。

0 踩