Linux 上 Oracle 数据库卡顿的原因很多,通常可以归结为系统资源、数据库配置、存储 I/O、网络或 SQL 本身几大类。下面按常见原因和排查思路给你一个系统性的总结。
表现
us 或 sy 很高常见原因
排查
top
mpstat -P ALL 1
ps -eo pid,pcpu,pmem,comm | sort -k2 -r | head
表现
常见原因
排查
free -h
vmstat 1
cat /proc/meminfo | grep -i huge
建议
表现
常见原因
排查
iostat -x 1
sar -d 1
建议
表现
排查
SELECT * FROM v$lock WHERE block = 1;
SELECT * FROM dba_blockers;
SELECT * FROM v$session WHERE event LIKE '%enq%';
表现
原因
建议
表现
排查
SELECT sql_id, executions, elapsed_time/1e6
FROM v$sql
ORDER BY elapsed_time DESC;
常见原因
表现
原因
排查
archive log list;
SELECT * FROM v$archive_dest_status;
常见问题:
fs.file-maxkernel.semshmmax / shmallnet.ipv4.tcp_*(RAC 或远程连接)建议
noatime,nodiratimetop
free -h
iostat -x 1
SELECT event, count(*)
FROM v$session
GROUP BY event
ORDER BY 2 DESC;
SELECT * FROM v$sql ORDER BY elapsed_time DESC;
Linux 上 Oracle 卡顿,80% 是 I/O 或 SQL 问题,15% 是内存 / 连接,5% 是系统配置。
如果你愿意,可以告诉我:
top / iostat 的现象我可以帮你更精准地定位。