在 Linux + Oracle 数据库 环境里,“优化”通常分为 系统层、存储层、Oracle 参数层、SQL 层 四个层面。下面给你一套 实战型优化清单,按优先级和常见场景来整理。
编辑:
vi /etc/sysctl.conf
常用参数(示例):
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
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
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
生效:
sysctl -p
✅ 目的:减少 swap、提升共享内存、优化网络 IO
vi /etc/security/limits.conf
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 65536
oracle hard nproc 65536
systemctl disable firewalld
systemctl disable bluetooth
systemctl disable postfix
✅ 减少系统干扰
numactl --hardware
如果是多 CPU:
numactl --interleave=all
✅ 推荐:
xfs(生产环境最常用)ext4(也可)mkfs.xfs /dev/sdb
vi /etc/fstab
示例:
/dev/sdb /oracle xfs defaults,noatime,nodiratime,nobarrier 0 0
✅ 避免 atime 更新,提高 IO
| 场景 | 建议 |
|---|---|
| 生产库 | ✅ ASM |
| 小测试 | 文件系统 |
ASM优势:
查看:
cat /sys/block/sda/queue/scheduler
建议:
echo deadline > /sys/block/sda/queue/scheduler
SSD 可用:
echo noop > /sys/block/sda/queue/scheduler
show parameter memory
推荐:
ALTER SYSTEM SET memory_max_target=12G SCOPE=SPFILE;
ALTER SYSTEM SET memory_target=12G SCOPE=SPFILE;
或使用传统方式(更稳定):
sga_max_size=8G
sga_target=8G
pga_aggregate_target=4G
show parameter processes
show parameter sessions
示例:
processes=2000
sessions=3000
undo_retention=10800
Redo log:
SELECT group#, bytes FROM v$log;
✅ 建议单个 redo ≥ 512MB
ALTER SYSTEM SET deferred_segment_creation=FALSE;
ALTER SYSTEM SET audit_trail=NONE;
EXPLAIN PLAN FOR SELECT ...
关注:
CREATE INDEX idx_xxx ON table(col);
避免:
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP');
定期收集统计信息 ✅
SELECT * FROM v$system_event ORDER BY time_waited DESC;
常见:
@?/rdbms/admin/awrrpt.sql
重点看:
✅ 优先顺序:
❌ 不要盲目做:
你可以直接告诉我:
Oracle 版本 + 内存 + CPU + 当前主要问题