温馨提示×

Linux中Oracle怎么优化

小樊
47
2026-07-14 08:36:54
栏目: 云计算

在 Linux 上优化 Oracle 数据库,一般从 操作系统、Oracle 参数、存储、SQL、架构 五个层面来做。下面给你一个实用型优化清单,适合生产环境参考。


一、Linux 操作系统层面优化

1. 内核参数(非常重要)

编辑 /etc/sysctl.conf

# 共享内存
kernel.shmmax = 17179869184   # 16GB,建议 ≥ SGA
kernel.shmall = 4194304

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

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

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

执行:

sysctl -p

2. 用户限制

编辑 /etc/security/limits.conf

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

3. 关闭不必要服务

systemctl disable firewalld
systemctl disable selinux

生产环境建议关闭或放行 Oracle 端口(1521)


4. 文件系统与磁盘调度

  • 推荐使用:
    • xfsext4
  • 磁盘调度器:
echo deadline > /sys/block/sda/queue/scheduler

二、Oracle 内存优化(SGA / PGA)

1. 使用 AMM / ASMM(推荐)

SHOW PARAMETER memory_target;
SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;

示例(16G 内存服务器)

ALTER SYSTEM SET memory_max_target=12G SCOPE=SPFILE;
ALTER SYSTEM SET memory_target=12G SCOPE=SPFILE;

重启数据库生效。


2. SGA 关键参数

db_cache_size
shared_pool_size
large_pool_size
java_pool_size

建议:

  • shared_pool_size 不宜过大(防 ORA-4031)
  • Buffer Cache 占 SGA 的 60–70%

三、存储与 I/O 优化

1. 表空间与数据文件

  • 数据文件、日志文件、控制文件 分开磁盘
  • redo log 放在 最快磁盘(SSD)
SELECT name FROM v$controlfile;
SELECT name FROM v$datafile;
SELECT member FROM v$logfile;

2. Redo Log 优化

  • 每组至少 2 个成员
  • 大小建议 500MB–1GB
ALTER DATABASE ADD LOGFILE GROUP 4 ('/u01/oracle/redo04a.log') SIZE 500M;

3. 使用异步 I/O

SHOW PARAMETER filesystemio_options;
ALTER SYSTEM SET filesystemio_options=SETALL SCOPE=SPFILE;

四、SQL 与对象优化(最常见瓶颈)

1. 找出慢 SQL

SELECT sql_id, sql_text, executions, elapsed_time
FROM v$sqlarea
ORDER BY elapsed_time DESC;

2. 索引优化

  • 避免全表扫描
  • 联合索引注意字段顺序
  • 定期重建碎片索引
ALTER INDEX idx_name REBUILD;

3. 统计信息

EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP');

定期执行,避免执行计划错误。


五、参数级优化(重点)

1. 并发与连接

processes
sessions
ALTER SYSTEM SET processes=1000 SCOPE=SPFILE;

2. CBO 优化器

optimizer_mode = ALL_ROWS

3. 游标共享(防硬解析)

cursor_sharing = FORCE

六、日常维护优化

  • 定期清理:
    • audit trail
    • archived log
  • 监控:
    • AWR(@?/rdbms/admin/awrrpt.sql
    • ADDM
  • 表分区(大表必做)

七、典型优化顺序(经验)

  1. 操作系统参数
  2. 内存(SGA/PGA)
  3. 磁盘 I/O(redo / 表空间)
  4. SQL 和索引
  5. 架构(分区 / 读写分离 / RAC)

八、如果你愿意,我可以帮你:

✅ 看 AWR 报告
✅ 给你 具体参数建议(按内存大小)
✅ 分析 慢 SQL
✅ 判断是 CPU / IO / 锁 问题

你可以直接告诉我:

Oracle 版本 + Linux 版本 + 内存 + 当前主要问题(慢查询 / 卡顿 / 高 IO)

0