数据库教程FGMT16‑Oracle性能优化之操作系统诊断与分析
## 前言
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)
“`bash
#确认主机名
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)
“`sql
sqlplus / as sysdba
show parameter memory_target;
show parameter sga_target;
show parameter pga_aggregate_target;
show parameter statistics_level;
“`
“`sql
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)
“`bash
#RHEL/CentOS检查sysstat是否安装
rpm -qa|grep sysstat
#没有安装执行
yum install sysstat -y
#确认sar历史数据目录
ls /var/log/sa/
“`
### 2.2 top工具实战,实时查看系统进程资源
top是最常用交互式工具,实时查看CPU、内存,进程资源消耗。
“`bash
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,查询对应数据库会话信息:
“`sql
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%,其他核空闲。
“`bash
#每2秒输出一次,持续采集
mpstat -P ALL 2
“`
输出字段:%usr %system %iowait %idle。如果个别CPU核%idle接近0,其余核空闲,说明业务存在串行热点,无法充分利用多核。
### 2.4 free内存工具,分析物理内存与Swap
“`bash
free -h
“`
输出重点:total总内存,used,free,buff/cache,available;Swap行看Swap used数值。
>如果Swap持续上涨,说明物理内存压力,Oracle主机要及时排查SGA、PGA设置,是否存在进程内存泄漏。
### 2.5 vmstat综合虚拟内存统计实战
vmstat综合输出CPU、内存swap、IO、进程,适合故障持续观察。
“`bash
#每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瓶颈核心工具。
“`bash
#每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:
“`bash
iotop -oP 2
“`
可以直接看到每个进程每秒读写磁盘速率,定位Oracle哪一个PID在疯狂读写磁盘。风哥数据库教程 itpux‑com
### 2.7 sar综合性能采集与历史回放实战
sar既可以实时采集,也可以读取系统保存的历史sa*文件,故障已经结束,用来回溯过去时刻资源状态。
“`bash
#实时,每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节点间通信卡顿。
“`bash
#查看网卡统计,丢包、错误
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源安装。
“`bash
#RHEL/CentOS安装
yum install epel‑release -y
yum install nmon -y
#交互实时模式
nmon
“`
交互模式快捷键:
– c:CPU;m:内存;d:磁盘;n:网络;t:进程;q:退出。
**后台持续采集(生产故障时段录制性能数据)**
输出文件存放到`/fgedudb/nmon_data`目录:
“`bash
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还是其他进程。
登录数据库执行查看等待事件:
“`sql
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;
“`
查看哪些会话在产生物理读:
“`sql
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. 所有生产故障排查,故障解决完成后,必须再次使用操作系统工具验证资源指标,确认优化效果,不能只看业务应用反馈。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
