前言

Oracle数据库的性能表现高度依赖底层操作系统硬件与内核调度能力,很多数据库层面的性能异常根源并不在数据库内部,而是CPU、内存、Swap、磁盘IO、网络等操作系统资源瓶颈。只依靠AWR、ASH等数据库内部报告,很难区分瓶颈来自数据库本身还是底层主机,因此DBA必须掌握操作系统层面全套诊断工具,实现自上而下完整故障定位。风哥教程本文围绕Linux操作系统性能诊断工具、CPU/内存/IO/网络核心指标解读、nmon性能采集工具、操作系统指标与Oracle等待事件关联分析、生产故障排查流程完整展开讲解。风哥 itpux‑com

本套风哥教程面向DBA、运维工程师、数据库架构师,全部实验标准化环境配置:主机名称fgedu‑net‑cn,硬件规格64G物理内存、8颗CPU;数据库实例名fgedudb,数据库名fgedudb,测试业务用户名fgedu,文件根目录统一为/fgedudb,整套实验基于Oracle19c企业版完成。风哥教程本文分为前言大纲介绍、核心理论知识、实战操作演练、总结四大模块;实战章节包含大量可直接复制执行的Linux命令、数据库查询脚本,读者可以在测试环境复现实验现象,掌握操作系统+数据库联合故障定位整套运维手段。网上搜索风哥教程可以学习全套数据库教程

内容大纲

  1. 操作系统与Oracle数据库性能关联基础,自上而下故障排查方法论
  2. CPU性能指标解读,top、mpstat工具原理,负载平均load average分析
  3. 内存、Swap机制,free工具,内存泄漏、Swap抖动对Oracle的危害
  4. 磁盘IO子系统原理,iostat、iotop工具,IO关键指标await、avgqu‑sz、%util解读
  5. vmstat虚拟内存综合统计工具,综合判断CPU、内存、IO瓶颈
  6. sar综合采集工具,历史性能数据回放,多维度资源统计
  7. 网络性能诊断工具,网络延迟、丢包对数据库业务的影响
  8. nmon工具安装、实时监控、后台持续采集、报告分析
  9. 操作系统指标与Oracle数据库等待事件对应关系
  10. 生产环境故障标准排查流程,操作系统+数据库联合分析案例

一、核心理论知识

本章节为本套风哥教程理论基础,理解操作系统内核指标含义,才能够区分性能瓶颈是数据库内部SQL问题还是硬件资源瓶颈,避免错误调优方向。风哥教程 113257174

1.1 自上而下性能排查方法论

数据库故障排查遵循由外到内的分析顺序:操作系统硬件资源 → 数据库实例负载 → SQL语句性能。很多DBA习惯直接钻进AWR报告分析SQL,忽略操作系统层问题。
典型现象:存储链路故障、磁盘IO延迟飙升、内存不足触发频繁Swap交换、网络丢包,会直接导致数据库大量等待事件,即使SQL完全没有问题业务也会变慢。

核心判断逻辑:操作系统资源出现瓶颈,优先解决操作系统层面;操作系统资源充足,再深入数据库内部做SQL调优。网上搜索风哥教程可以学习全套数据库教程

1.2 CPU相关基础理论

  1. load average(系统平均负载):代表处于运行、不可中断睡眠状态进程数量,8CPU主机,load average长期大于8,代表CPU资源存在排队压力。load高不等于CPU使用率100%,大量IO等待进程也会拉高负载。
  2. CPU时间分片:
    • %us 用户态:应用程序(Oracle进程)消耗CPU,对应数据库SQL运算、排序、hash join;
    • %sy内核态:系统调用、中断、上下文切换消耗CPU;
    • %id空闲CPU;
    • %wa IO等待:CPU空闲,但进程在等待磁盘IO完成,是IO瓶颈最直观指标。
  3. 单核与多核瓶颈:mpstat可以看到每个CPU核使用率,存在单核跑满、其他核空闲,代表业务存在串行热点,无法利用多核算力。

1.3 内存与Swap原理

主机64G内存环境,Oracle SGA+PGA规划48G,操作系统预留内存。

  • Swap交换分区:磁盘上的交换空间,当物理内存耗尽,操作系统会把内存页换出到磁盘;Oracle数据库主机,swap频繁si/so交换是严重风险,内存换入换出会产生大量磁盘IO,数据库性能剧烈抖动。
  • buffer/cache:Linux文件系统缓存,加速块设备读写;不要把cache占用当作内存真正耗尽。

生产规范:Oracle业务主机尽量避免发生Swap,一旦vmstat看到si、so持续不为0,代表内存配置不足或者存在内存泄漏。风哥数据库教程 itpux‑com

1.4 磁盘IO子系统关键概念

  1. await:IO请求平均等待时间(ms),包含队列排队时间+设备处理时间;OLTP业务建议平均await小于20ms,持续大于50ms代表IO子系统存在压力。
  2. avgqu‑sz:IO平均队列长度,队列持续变长说明IO请求堆积。
  3. %util:设备繁忙占比,不代表IO带宽打满,虚拟化、SAN存储该指标参考价值下降。
  4. rMB/s wMB/s:每秒读写数据量,tps每秒IO请求数;区分随机IO(大量小IO,OLTP)、顺序大IO(数据仓库、备份)。
  5. 数据库等待事件与IO对应:
    • db file sequential read:单块读,索引访问,对应随机IO;
    • db file scattered read:多块读,全表扫描,对应顺序批量读;
    • log file sync:redo日志提交等待,和redo磁盘写延迟强相关。

1.5 vmstat综合统计原理

vmstat是综合工具,同时输出进程、内存swap、IO、CPU、上下文切换。
重点字段:

  • r:等待CPU运行队列进程数;
  • b:不可中断睡眠进程(通常等待IO);
  • si:换入内存页;so:换出内存页,si/so非0代表swap活动;
  • bi:块读入,bo:块写出磁盘。

1.6 sar系统活动报告工具

sar可以做实时采集,也可以读取历史归档性能数据,故障已经发生,业务已经恢复,AWR看到异常,但故障现场已经消失,sar历史数据可以回溯主机过去CPU、内存、IO、网络状态。sysstat软件包提供sar、mpstat、iostat整套工具。

1.7 nmon工具定位

nmon是轻量开源性能工具,分为实时交互模式、后台数据采集模式;采集CPU、内存、磁盘IO、网络、文件系统,输出.nmon数据文件,可以使用nmon_analyser解析生成图表,适合压力测试、故障时段完整性能回溯,开销很低,适合Oracle生产主机长期部署。

1.8 网络性能对Oracle的影响

Oracle客户端与数据库、RAC节点间、dblink跨库访问都依赖网络。网络指标关注网卡吞吐、数据包重传retrans、延迟、丢包。网络抖动会引发SQL响应时间拉长,会话挂起,TNS超时故障。

1.9 联合分析排查思路

拿到故障现象,操作顺序:

  1. 操作系统工具确认CPU/内存/Swap/IO/网络有没有资源瓶颈;
  2. 如果操作系统存在瓶颈,先定位主机侧根因;
  3. 操作系统资源充足,再切入AWR、ASH、SQL,分析数据库内部等待、SQL消耗;
  4. 将操作系统指标和Oracle等待事件相互印证,得出最终故障结论。

二、实战操作演练

本套风哥教程全部实战操作,操作主机fgedu‑net‑cn,数据库fgedudb,业务用户fgedu,目录/fgedudb,硬件规格64G内存8CPU。

环境说明:操作系统登录oracle或者root用户;部分操作系统工具需要root权限;数据库部分操作使用sysdba登录。

2.1 操作系统与数据库环境校验

2.1.1操作系统基础信息检查(主机fgedu‑net‑cn)
#确认主机名
hostname
#查看内存,确认物理内存64G
free -h
#查看CPU,确认逻辑8核
lscpu
#查看swap分区大小
cat /proc/swaps
#查看块设备磁盘信息
lsblk
#确认oracle软件根目录为/fgedudb
echo $ORACLE_HOME

校验输出:hostname输出fgedu‑net‑cn,总内存64G,逻辑CPU为8颗。

2.1.2 数据库关键参数核对(64G内存8CPU)
sqlplus / as sysdba
show parameter memory_target;
show parameter sga_target;
show parameter pga_aggregate_target;
show parameter statistics_level;
alter system set memory_max_target=48G scope=spfile;
alter system set memory_target=48G scope=spfile;
alter system set statistics_level=TYPICAL scope=spfile;
2.1.3 操作系统软件包确认(sysstat,提供sar、iostat、mpstat、vmstat)
#RHEL/CentOS检查sysstat是否安装
rpm -qa|grep sysstat
#没有安装执行
yum install sysstat -y
#确认sar历史数据目录
ls /var/log/sa/

2.2 top工具实战,实时查看系统进程资源

top是最常用交互式工具,实时查看CPU、内存,进程资源消耗。

top -d 1

常用交互按键:

  • P:按CPU使用率排序;
  • M:按内存占用排序;
  • 1:展开显示每一颗CPU核状态;
  • q:退出。

重点观察指标:

  1. top头部load average,看1分钟、5分钟、15分钟负载;8CPU主机长期大于8代表CPU压力;
  2. %us %sy %id %wa,重点观察%wa IO等待占比;
  3. 进程列表,定位高CPU、高内存PID,Oracle进程PID记录下来,到数据库关联v$process视图。

数据库关联PID,拿到操作系统spid,查询对应数据库会话信息:

select s.sid,s.serial#,s.username,s.sql_id from v$session s
join v$process p on s.paddr=p.addr
where p.spid=&os_spid;

网上搜索风哥教程可以学习全套数据库教程

2.3 mpstat工具,分CPU核统计CPU状态

mpstat用来排查是否存在单核热点瓶颈,8CPU主机,个别核100%,其他核空闲。

#每2秒输出一次,持续采集
mpstat -P ALL 2

输出字段:%usr %system %iowait %idle。如果个别CPU核%idle接近0,其余核空闲,说明业务存在串行热点,无法充分利用多核。

2.4 free内存工具,分析物理内存与Swap

free -h

输出重点:total总内存,used,free,buff/cache,available;Swap行看Swap used数值。

如果Swap持续上涨,说明物理内存压力,Oracle主机要及时排查SGA、PGA设置,是否存在进程内存泄漏。

2.5 vmstat综合虚拟内存统计实战

vmstat综合输出CPU、内存swap、IO、进程,适合故障持续观察。

#每2秒采样,持续输出
vmstat 2

重点观测列:

  • r:运行队列进程;
  • b:不可中断睡眠进程(IO等待);
  • si so:swap换入换出,非0代表发生交换;
  • bi bo:块设备读写;
  • us sy id wa CPU状态。

生产告警参考:si/so持续大于0,属于高危信号,内存资源不足。

2.6 iostat磁盘IO诊断实战

iostat查看磁盘设备IO指标,是定位IO瓶颈核心工具。

#每2秒输出磁盘统计
iostat -x -k 2

重点字段解读:

  • r/s w/s:每秒读写IO次数tps;
  • rkB/s wkB/s:每秒读写KB;
  • await:IO平均等待时间ms;
  • avgqu‑sz:IO平均队列;
  • %util:设备繁忙百分比。

故障判断参考:

  1. await持续>50ms,avgqu‑sz持续走高,IO队列堆积,IO子系统压力大;
  2. r/s很高,rkB/s不高,大量小块随机IO,对应数据库索引单块读db file sequential read
  3. w/s高,对应redo写、数据文件写操作。

iotop工具,定位哪个进程产生大量IO:

iotop -oP 2

可以直接看到每个进程每秒读写磁盘速率,定位Oracle哪一个PID在疯狂读写磁盘。风哥数据库教程 itpux‑com

2.7 sar综合性能采集与历史回放实战

sar既可以实时采集,也可以读取系统保存的历史sa*文件,故障已经结束,用来回溯过去时刻资源状态。

#实时,每3秒输出CPU
sar -u 3
#实时磁盘IO
sar -d 3
#查看历史sa文件,例如sa09代表当月09号
sar -u -f /var/log/sa/sa09
#查看网络统计
sar -n DEV 3

生产故障场景:业务凌晨发生卡顿,早上才发现,数据库AWR有异常等待事件,但业务已经恢复,直接读取sar历史sa文件,可以看到当时主机CPU、IO、网络的真实状态。

2.8 网络性能诊断实战

网络问题会造成Oracle TNS超时、dblink慢、RAC节点间通信卡顿。

#查看网卡统计,丢包、错误
ip -s link
#ping测试延迟
ping -s 8192 fgedu‑net‑cn
#mtr持续跟踪网络链路丢包
mtr fgedu‑net‑cn
#查看socket连接状态
ss -s

重点关注:网卡RX/TX错误、dropped丢包计数持续上涨;大包ping延迟抖动,代表网络链路不稳定。

2.9 nmon工具安装、实时监控、后台采集完整实操

nmon是数据库运维非常推荐轻量监控工具,EPEL源安装。

#RHEL/CentOS安装
yum install epel‑release -y
yum install nmon -y
#交互实时模式
nmon

交互模式快捷键:

  • c:CPU;m:内存;d:磁盘;n:网络;t:进程;q:退出。

后台持续采集(生产故障时段录制性能数据)
输出文件存放到/fgedudb/nmon_data目录:

mkdir -p /fgedudb/nmon_data
#每10秒采集一次,采集720次,输出nmon数据文件
nmon -f -s 10 -c 720 -m /fgedudb/nmon_data

参数说明:

  • -f:文件输出模式;
  • -s:采样间隔秒;
  • -c:采样次数;
    生成文件名字格式:fgedu‑net‑cn_260911_0000.nmon
    将nmon文件下载到本地PC,使用nmon_analyser excel工具打开,自动生成CPU、内存、磁盘、网络可视化图表,用于事后故障分析、压测试验报告输出。

注意:后台nmon采集资源消耗很低,业务生产主机故障排查阶段可以开启,故障结束之后关闭nmon进程。

2.10 操作系统指标与Oracle数据库联合排查实操

当操作系统观察到IO等待很高,需要关联数据库等待事件确认是数据库产生IO还是其他进程。
登录数据库执行查看等待事件:

set linesize 200 pagesize 100
select event,total_waits,time_waited from v$system_event
where event in ('db file sequential read','db file scattered read','log file sync')
order by time_waited desc;

查看哪些会话在产生物理读:

select s.sid,s.sql_id,s.event,p.spid,ss.value physical_reads
from v$session s
join v$process p on s.paddr=p.addr
join v$sesstat ss on s.sid=ss.sid
join v$statname sn on ss.statistic#=sn.statistic#
where sn.name='physical reads' and ss.value>0
order by ss.value desc;
标准故障排查案例演示

现象:业务数据库变慢,AWR报告大量db file sequential read等待事件。

  1. 操作系统top看到%wa高;iostat看到await很高,磁盘IO队列堆积;
  2. 确认操作系统层面IO压力来自Oracle进程spid;
  3. 数据库查询v$session对应spid的sid/sql_id,拿到慢SQL;
  4. 两种可能性:
    • SQL执行计划差产生大量随机读,属于数据库SQL问题,优化索引与SQL;
    • SQL本身没有问题,存储设备本身IO性能不足,需要升级底层存储。

2.11 生产环境完整故障排查标准流程

  1. 业务反馈数据库卡顿,优先登录操作系统,执行top、vmstat快速确认CPU、Swap、IO等待;
  2. 如果故障已经过去,调取sar sa历史文件,或者调取nmon历史采集文件,还原故障时刻主机资源;
  3. 如果发现主机资源瓶颈(CPU跑满、swap交换、IO await很高、网络丢包),优先定位主机侧根因;
  4. 操作系统资源一切正常,再切入AWR、ASH报告,分析数据库内部等待事件、top SQL;
  5. 把操作系统指标与Oracle等待事件互相印证,区分瓶颈来源;
  6. 定位根因之后,实施优化,同时再次使用操作系统工具观察优化之后资源指标变化,验证优化效果。

重要提醒:不要跳过操作系统直接调SQL,如果瓶颈来自硬件存储,单纯修改SQL无法解决根本问题。

三、风哥针对本文总结

本套风哥教程完整覆盖Oracle配套操作系统诊断全套知识,包含CPU、内存Swap、磁盘IO、网络底层理论,top、mpstat、free、vmstat、iostat、sar、nmon工具实操,操作系统指标与Oracle等待事件联合分析,完整故障排查流程。

  1. 故障排查坚持自上而下分析思路,先操作系统,后数据库。很多性能抖动根源在底层硬件、存储、内存Swap、网络,不是数据库SQL本身问题,跳过操作系统直接调SQL会导致调优方向错误。
  2. CPU分析不能只看使用率,一定要看load average,同时使用mpstat‑P ALL检查是否存在单核CPU热点,8CPU主机不要只看整体平均指标。
  3. Oracle业务主机,Swap发生si/so交换属于高危现象,说明物理内存资源紧张,会带来数据库性能剧烈抖动,需要调整SGA/PGA或者扩容物理内存。
  4. IO分析重点关注await平均IO等待时间、avgqu‑sz队列长度;%util指标在虚拟化、SAN存储环境参考意义下降,不能单靠%util判断磁盘是否瓶颈;区分随机IO与顺序IO,对应数据库不同等待事件。
  5. sar工具的历史sa归档文件,对于已经结束的故障非常关键,业务已经恢复、AWR报告看到异常等待,可以通过sar回溯故障时刻主机CPU/IO/网络状态。
  6. nmon工具开销小,支持后台持续采集,输出文件可以生成可视化图表;适合故障时段、压力测试阶段录制主机全套性能数据,事后复盘分析。
  7. 操作系统指标必须和Oracle数据库内部等待事件、会话统计做联合印证。高IO等待要确认IO压力来自数据库进程还是主机上其他业务进程,区分是SQL引发IO压力,还是底层存储硬件能力不足。
  8. 所有生产故障排查,故障解决完成后,必须再次使用操作系统工具验证资源指标,确认优化效果,不能只看业务应用反馈。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐