在 Linux 上运行 Oracle 数据库时,负载过高(Load Average 高、CPU 忙、IO 等待大)通常不是单一原因,而是以下几类问题之一或叠加。下面按常见原因 → 排查方法 → 解决思路来说明。
排查:
top
# 看 %CPU 高的进程是否是 oracle
sqlplus / as sysdba
SELECT sql_id, executions, buffer_gets, cpu_time
FROM v$sql
ORDER BY cpu_time DESC;
解决:
EXEC DBMS_STATS.GATHER_TABLE_STATS('USER','TABLE');
SGA / PGA 过大或过小PROCESSES)排查:
SHOW PARAMETER processes;
SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;
排查:
iostat -x 1
重点看:
%util → 接近 100% 说明磁盘忙await / svctm 高SELECT event, total_waits
FROM v$system_event
WHERE event LIKE '%db file%';
解决:
Oracle 最怕 Swap。
排查:
free -m
vmstat 1
若 si/so > 0 说明在 swap。
解决:
排查:
SELECT * FROM v$lock WHERE block=1;
SELECT sid, event FROM v$session_wait;
df -h
archive log list
nr_hugepages 未配置transparent_hugepage 开启(Oracle 不推荐)cat /sys/kernel/mm/transparent_hugepage/enabled
建议:
top
iostat -x 1
vmstat 1
再看 Oracle:
SELECT event, count(*)
FROM v$session_wait
GROUP BY event
ORDER BY 2 DESC;
Linux 上 Oracle 负载高,90% 是 SQL + IO + 内存,不是系统本身问题。
如果你愿意,可以告诉我:
top / iostat 输出我可以帮你精准定位是哪一类问题。