CentOS 上 Oracle 性能调优实战指南
一 基线评估与瓶颈定位
SELECT * FROM TABLE(
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
(SELECT DBID FROM V$DATABASE),
(SELECT INSTANCE_NUMBER FROM V$INSTANCE),
1, 2
)
);
二 操作系统与存储层优化
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104 # 建议 ≥ SGA_MAX_SIZE
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
vm.vfs_cache_pressure = 50
net.core.somaxconn = 4096
执行 sysctl -p 生效;同时确保 /dev/shm ≥ Oracle 使用的总内存目标(启用 AMM 时尤为重要)。三 内存与实例参数调优
ALTER SYSTEM SET memory_max_target=8G SCOPE=SPFILE;
ALTER SYSTEM SET memory_target=8G SCOPE=SPFILE;
ALTER SYSTEM SET sga_target=6G SCOPE=BOTH;
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=BOTH;
ALTER SYSTEM SET db_cache_size=2G SCOPE=BOTH;
ALTER SYSTEM SET shared_pool_size=1G SCOPE=BOTH;
ALTER SYSTEM SET large_pool_size=256M SCOPE=BOTH;
ALTER SYSTEM SET log_buffer=64M SCOPE=SPFILE; -- 静态参数,需重启
-- 启用自动工作区
ALTER SYSTEM SET workarea_size_policy=AUTO SCOPE=BOTH;
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=BOTH;
-- 监控目标:optimal 执行率 ≥ 90%,multipass = 0%
SELECT name, value/1024/1024 MB FROM v$pgastat;
SELECT name, value, 100*value/SUM(value) OVER() pct
FROM v$sysstat WHERE name LIKE 'workarea executions%';
-- 容量建议
SELECT pga_target_for_estimate/1024/1024 pgamb,
estd_pga_cache_hit_percentage hit_pct,
estd_overalloc_count overalloc
FROM v$pga_target_advice ORDER BY pgamb;
ALTER SYSTEM SET db_keep_cache_size=512M SCOPE=BOTH;
ALTER SYSTEM SET db_recycle_cache_size=256M SCOPE=BOTH;
CREATE TABLE t (id NUMBER) STORAGE (BUFFER_POOL KEEP);
ALTER SYSTEM SET processes=500 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=700 SCOPE=SPFILE;
注:以上参数需结合 AWR/ADDM、v$pgastat、v$sysstat 持续校准,避免“拍脑袋”设置。四 SQL 与对象层优化
五 维护与监控闭环
-- 全库统计(按对象粒度与采样率调整)
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'SCHEMA_NAME', estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>'FOR ALL COLUMNS SIZE AUTO');