跳过正文

oratop 实战指南:一屏读懂 Oracle 性能

Greatfinish
作者
Greatfinish
记录 Oracle、PostgreSQL、达梦、Linux、存储与生产环境故障处理经验。
20260311.png

oratop是什么
#

oratop 是 Oracle 提供的一个类 Linux top 的文本界面工具,既能跑在 RAC 也能跑在 单实例上,用来实时观察数据库负载与热点,特别适合在“故障现场 / CPU 飙高 / 响应变慢”时快速定向问题。

命令行模式
#

使用命令行方式如下:

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/suptools/oratop:$PATH
oratop -h
oratop2.png

oratop 支持类似 sqlplus 的登录方式,常见参数如下:

-i:刷新间隔(默认 5 秒)

-r:Section 3 等待事件切换为 Real-Time(默认是累计 Cumulative)

-s:Section 4 切到 SQL 模式(默认是 session/process 模式)

-f:132 列详细模式(默认 80 列标准模式)

-b -n -o:批处理模式、循环次数、输出到文件

使用详解
#

登录支持类似sqlplus的登录方式,示例如下:

# 本地连接 列详细模式
oratop / as sysdba -f
# 远程连接(EZConnect / TNS 都可)
oratop username/password@tns_alias
oratop sys@172.16.8.74:1521/orcl as sysdba -f

注意远程以 sysdba 连接时,需要配置 REMOTE_LOGIN_PASSWORDFILE 并准备 password file。

启动后界面被固定拆成 4 块

  1. Database(数据库概览)
  2. Instance Activity(实例负载指标)
  3. DB Wait Events(类似 AWR 的 Top 等待/耗时事件)
  4. Process 或 SQL(Top 会话/Top SQL)
oratop3.png

指标详解
#

Database(数据库概览)
#

  • up:实例已运行时间(uptime)

  • ins:实例数(RAC 环境会 >1)

  • sn:当前总会话数

  • us:活跃会话数(active sessions)

  • mt:监控运行时间(monitoring time)

  • fra:FRA 使用率(%)

  • er:incident/error 数(如果有)

  • %db:数据库使用率/占用概览(某些版本显示)

Instance Activity(实例负载指标)
#

CPU / Load / 并发
#

  • %CPU:主机 CPU 使用率(整体 OS 视角)
  • LOAD:OS Load Average(一般看它是否明显高于 CPU 核数)
  • %DCU / %DCP数据库实例 CPU 使用占主机 CPU 的比例
    • 新版里经常看到 %DCP,官方说明是“database instance cpu usage as %CPU of host”。

AAS 拆分(理解瓶颈的核心)
#

  • AASAAS(Avg active sessions):平均活跃会话数
  • ASCASC(Active sessions on CPU):在 CPU 上跑的活跃会话数
  • ASIASI(Avg active sessions waiting on I/O):等待 I/O 的活跃会话数
  • ASWASW(Avg active sessions waiting):其它等待导致的活跃会话数
  • ISWISW(Inactive sessions waiting or sleeping):不活跃但在等/睡眠的会话数
  • REDOREDO(Redo created per sec):每秒 redo 产生量
  • TEMPTEMP(Temp space used):临时表空间使用

I/O 吞吐与延迟
#

  • MBPSMBPS(I/O throughput):吞吐 MB/s
  • IOPSIOPS(I/O requests/sec):每秒 I/O 请求数
  • IORTIORT(I/O Response Time):平均同步单块读延迟(single-block read latency)
  • R/S、W/SR/S、W/S(Physical read/write total IO request/sec):物理读/写请求速率
  • LIOLIO(Logical reads/sec):逻辑读速率
  • GCPSGCPS(GC CR+current block received/sec):RAC 跨实例块传输速率

内存/连接/业务量
#

  • %FRE%FRE(Shared pool free %):共享池空闲比例

  • PGAPGA(Total PGA allocated):总 PGA 分配

  • NETVNETV(Network traffic bytes/sec):网络流量

  • UTPSUTPS(User trans/sec):用户事务数/秒

  • UCPSUCPS(User calls/sec):用户调用/秒

  • SORTSQRT(SQL service response time/call):平均每次调用 SQL 服务响应时间

  • DCTR:**Database CPU (%Host) **:数据库 CPU 占比(DB Time 中 CPU 占比,算力)

  • DWTR:**Database WAIT (%Host) **:等待在主机视角的占比(DB Time 中等待占比,等待)

DCTP和DWTR这两个本质上来自 Oracle 的系统指标(V$SYSMETRIC 一类的指标体系)。

oratop 后缀表示量级/时间单位,比如:

  • 容量:k/M/G/T(KB/MB/GB/TB…)
  • 时间:u/m/s/t/h/d(微秒/毫秒/秒/分钟/小时/天…)

参数快速判断
#

AAS 明显上升,且 ASC 高、%CPU 高 → CPU 受限优先

AAS 上升但 ASI 高、IORT 高 → I/O 受限优先

AAS 上升且 ASW 高,但 I/O 不高 → 锁/并发/提交/集群等待优先(去看 Top 等待/耗时事件)

REDO 高 + 伴随提交相关等待 → 关注提交/日志写

GC 指标高(RAC)→ 关注跨实例热点块/全局缓存等待

DB Wait Events(Top 等待事件)
#

  • EVENT (C)Cumulative:是“自数据库上次重启以来的累计”。EVENT (RT)Real-Time:更适合现场抓“此刻正在拖慢系统”的 Top waits(用 r 或启动参数 -r 切换)Wait event name:等待事件名
  • SESSIONSessions waiting:正在等待该事件的会话数
  • WAITTotal number of waits:等待次数
  • TIMETotal wait time:总等待时间
  • AVGAvg wait time:平均等待时间
  • %DBT% of database time:占 DB time 的比例
  • WAIT_CLASSWait class:等待分类(User I/O、System I/O、Concurrency…)

PROCESS/SQL 模式(Top 会话/Top SQL)
#

  • SID:会话 ID
  • SPID:OS 进程号
  • USERNAME:数据库用户名
  • PROGRAM:程序名(可用 m 切到 MODULE/ACTION)
  • OPN:DML操作(INS、SEL、UPD、DEL…)
  • E/T:会话已运行时间
  • %CPU:该会话 CPU 占用
  • %LIO:该会话逻辑读速率占用
  • PGA:该会话 PGA
  • SQLID/BLOCKER:当前 SQL 或阻塞者
  • STS:会话状态(ACT、INA…)
  • STE:会话等待状态(RUN、WAI…)
  • WAIT_CLASS:会话等待类型
  • %CPU:该会话 CPU 占用
  • EVENT/OBJECT NAME:当前等待事件名
  • W/T:当前等待时长

默认是会话模式按p也可以切换成会话模式,适合定位“哪个 SID / 哪个程序 / 哪个模块”慢,影响数据库性能

oratop5.png

s可以切换进入到SQL模式,适合定位“哪条 SQL_ID 是罪魁祸首”

oratop4.png
x 输入 SQL_ID 看计划:用于快速判断“全表扫/索引失效/并行过度/Join 路径异常”等方向

oratop6.png

快速排查流程
#

  1. 看实例负载指标CPU 高?I/O 延迟高?AAS 是“CPU 型”还是“等待型”?
  2. 看Top等待事件按 r 切 RT抓当下 Top waits(别只看累计)
  3. 看Top 会话/Top SQL,先定位Top 会话/Top SQL,必要时 x 看执行计划否符合预期(索引、并行、Join 路径)
  4. t 检查表空间,快速确认临时表空间/表空间使用

总结
#

oratop 可以理解为 Oracle 的数据库版 top:用一张屏把当前负载是否异常、异常来自 CPU 还是等待、到底是谁(会话/SQL)在拖慢串起来,特别适合在故障现场快速定向,再配合 AWR/ASH、v$session / v$sql / v$active_session_history 等视图做深入验证和落地优化。

文末分享 Oracle 11g 版本 oratop 下载链接,方便读者在老版本环境快速上手。