











数据库教程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命令、数据库查询脚本,读者可以在测试环境复现实验现象,掌握操作系统+数据库联合故障定位整套运维手段。网上搜索风哥教程可以学习全套数据库教程
本章节为本套风哥教程理论基础,理解操作系统内核指标含义,才能够区分性能瓶颈是数据库内部SQL问题还是硬件资源瓶颈,避免错误调优方向。风哥教程 113257174
数据库故障排查遵循由外到内的分析顺序:操作系统硬件资源 → 数据库实例负载 → SQL语句性能。很多DBA习惯直接钻进AWR报告分析SQL,忽略操作系统层问题。
典型现象:存储链路故障、磁盘IO延迟飙升、内存不足触发频繁Swap交换、网络丢包,会直接导致数据库大量等待事件,即使SQL完全没有问题业务也会变慢。
核心判断逻辑:操作系统资源出现瓶颈,优先解决操作系统层面;操作系统资源充足,再深入数据库内部做SQL调优。网上搜索风哥教程可以学习全套数据库教程
主机64G内存环境,Oracle SGA+PGA规划48G,操作系统预留内存。
生产规范:Oracle业务主机尽量避免发生Swap,一旦vmstat看到si、so持续不为0,代表内存配置不足或者存在内存泄漏。风哥数据库教程 itpux‑com
db file sequential read:单块读,索引访问,对应随机IO;db file scattered read:多块读,全表扫描,对应顺序批量读;log file sync:redo日志提交等待,和redo磁盘写延迟强相关。vmstat是综合工具,同时输出进程、内存swap、IO、CPU、上下文切换。
重点字段:
sar可以做实时采集,也可以读取历史归档性能数据,故障已经发生,业务已经恢复,AWR看到异常,但故障现场已经消失,sar历史数据可以回溯主机过去CPU、内存、IO、网络状态。sysstat软件包提供sar、mpstat、iostat整套工具。
nmon是轻量开源性能工具,分为实时交互模式、后台数据采集模式;采集CPU、内存、磁盘IO、网络、文件系统,输出.nmon数据文件,可以使用nmon_analyser解析生成图表,适合压力测试、故障时段完整性能回溯,开销很低,适合Oracle生产主机长期部署。
Oracle客户端与数据库、RAC节点间、dblink跨库访问都依赖网络。网络指标关注网卡吞吐、数据包重传retrans、延迟、丢包。网络抖动会引发SQL响应时间拉长,会话挂起,TNS超时故障。
拿到故障现象,操作顺序:
本套风哥教程全部实战操作,操作主机fgedu‑net‑cn,数据库fgedudb,业务用户fgedu,目录/fgedudb,硬件规格64G内存8CPU。
环境说明:操作系统登录oracle或者root用户;部分操作系统工具需要root权限;数据库部分操作使用sysdba登录。
#确认主机名
hostname
#查看内存,确认物理内存64G
free -h
#查看CPU,确认逻辑8核
lscpu
#查看swap分区大小
cat /proc/swaps
#查看块设备磁盘信息
lsblk
#确认oracle软件根目录为/fgedudb
echo $ORACLE_HOME
校验输出:hostname输出fgedu‑net‑cn,总内存64G,逻辑CPU为8颗。
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;
#RHEL/CentOS检查sysstat是否安装
rpm -qa|grep sysstat
#没有安装执行
yum install sysstat -y
#确认sar历史数据目录
ls /var/log/sa/
top是最常用交互式工具,实时查看CPU、内存,进程资源消耗。
top -d 1
常用交互按键:
重点观察指标:
数据库关联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;
网上搜索风哥教程可以学习全套数据库教程
mpstat用来排查是否存在单核热点瓶颈,8CPU主机,个别核100%,其他核空闲。
#每2秒输出一次,持续采集
mpstat -P ALL 2
输出字段:%usr %system %iowait %idle。如果个别CPU核%idle接近0,其余核空闲,说明业务存在串行热点,无法充分利用多核。
free -h
输出重点:total总内存,used,free,buff/cache,available;Swap行看Swap used数值。
如果Swap持续上涨,说明物理内存压力,Oracle主机要及时排查SGA、PGA设置,是否存在进程内存泄漏。
vmstat综合输出CPU、内存swap、IO、进程,适合故障持续观察。
#每2秒采样,持续输出
vmstat 2
重点观测列:
生产告警参考:si/so持续大于0,属于高危信号,内存资源不足。
iostat查看磁盘设备IO指标,是定位IO瓶颈核心工具。
#每2秒输出磁盘统计
iostat -x -k 2
重点字段解读:
故障判断参考:
db file sequential read;iotop工具,定位哪个进程产生大量IO:
iotop -oP 2
可以直接看到每个进程每秒读写磁盘速率,定位Oracle哪一个PID在疯狂读写磁盘。风哥数据库教程 itpux‑com
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、网络的真实状态。
网络问题会造成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延迟抖动,代表网络链路不稳定。
nmon是数据库运维非常推荐轻量监控工具,EPEL源安装。
#RHEL/CentOS安装
yum install epel‑release -y
yum install nmon -y
#交互实时模式
nmon
交互模式快捷键:
后台持续采集(生产故障时段录制性能数据)
输出文件存放到/fgedudb/nmon_data目录:
mkdir -p /fgedudb/nmon_data
#每10秒采集一次,采集720次,输出nmon数据文件
nmon -f -s 10 -c 720 -m /fgedudb/nmon_data
参数说明:
fgedu‑net‑cn_260911_0000.nmon。注意:后台nmon采集资源消耗很低,业务生产主机故障排查阶段可以开启,故障结束之后关闭nmon进程。
当操作系统观察到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等待事件。
重要提醒:不要跳过操作系统直接调SQL,如果瓶颈来自硬件存储,单纯修改SQL无法解决根本问题。
本套风哥教程完整覆盖Oracle配套操作系统诊断全套知识,包含CPU、内存Swap、磁盘IO、网络底层理论,top、mpstat、free、vmstat、iostat、sar、nmon工具实操,操作系统指标与Oracle等待事件联合分析,完整故障排查流程。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。