如何监控Ubuntu Oracle的性能指标
导读:Ubuntu 上监控 Oracle 性能的可落地方案 一 监控体系与工具选型 系统层:使用 top/htop、vmstat、iostat、sar、dstat、nmon 观察 CPU、内存、I/O、网络 等基础资源,定位瓶颈是否来自操作系统...
Ubuntu 上监控 Oracle 性能的可落地方案
一 监控体系与工具选型
- 系统层:使用 top/htop、vmstat、iostat、sar、dstat、nmon 观察 CPU、内存、I/O、网络 等基础资源,定位瓶颈是否来自操作系统。
- 数据库层:优先使用 Oracle Enterprise Manager(OEM) 或 oratop 做实时与历史性能观测;在具备相应许可时,利用 Diagnostics Pack 提供的 AWR/ASH/ADDM 做深度分析与对比。
- 平台化:中小型环境可用 Zabbix 通过 ODBC/脚本采集;云上或混合环境可用 OCI Database Management 统一监控、性能管理与 SQL 调优。
- 日志与连通性:关注 alert.log、listener.log,并用 tnsping、sqlplus 验证连接与监听状态。
二 快速上手的命令行监控
- 系统资源快检
- CPU/内存/进程:top/htop;整体资源:vmstat 1;磁盘 I/O:iostat -xz 1;历史/系统活动:sar;多合一:dstat;可视化:nmon。
- Oracle 连通与健康
- 监听与连接:tnsping ORCL;sqlplus / as sysdba 登录检查实例状态。
- 实时会话与慢 SQL
- 活跃会话与正在执行的 SQL(示例):
col inst_sid heading "INST_ID|:SID" format a7 col username format a10 col machine format a12 col sql_exec_start heading "SQL|START|D HH:MM:SS" format a11 col sql_id format a13 col sql_text format a40 col event format a33 col wait_sec heading "WAIT|(SEC)" format 99999 set linesize 200 select ses.inst_id||chr(58)||ses.sid as inst_sid, username, (sysdate - sql_exec_start) day(1) to second(0) as sql_exec_start, ses.sql_id, substr(sql.sql_text,1,40) sql_text, substr(case time_since_last_wait_micro when 0 then (case wait_class when 'Idle' then 'IDLE: '||event else event end) else 'ON CPU' end,1,33) event, (case time_since_last_wait_micro when 0 then wait_time_micro else time_since_last_wait_micro end) /1000000 wait_sec from gv$session ses, gv$sqlstats sql where ses.inst_id||chr(58)||ses.sid < > sys_context('USERENV','INSTANCE')||chr(58)||sys_context('USERENV','SID') and username is not null and status='ACTIVE' and ses.sql_id = sql.sql_id (+) order by sql_exec_start, username, ses.sid, ses.sql_id;
- 活跃会话与正在执行的 SQL(示例):
- 日志与告警线索
- 数据库告警:查看 $ORACLE_BASE/diag/rdbms///trace/alert_.log
- 监听日志:查看 $ORACLE_HOME/diag/tnslsnr//trace/listener.log
- 归档与空间:确认归档开启与增长,必要时监控 FRA/归档目录 使用率。
三 图形化与平台化监控
- Oracle Enterprise Manager(OEM)
- 适合集中监控与性能诊断;在许可前提下,内置 AWR/ASH/ADDM 提供自动化性能诊断、时段对比与实时 ADDM,能显著缩短定位时间。
- Zabbix
- 通过 ODBC 或 external check 采集数据库指标,结合模板实现 会话、SQL、表空间、等待事件 等监控与告警;适合已有 Zabbix 体系的团队。
- Prometheus + oracle_exporter
- 以 Prometheus 为时序库,配合 oracle_exporter 拉取 Oracle 指标,Grafana 做可视化与阈值告警,适合云原生与容器化环境。
- OCI Database Management
- 面向 云与本地 数据库的统一控制台,提供 舰队监控、Performance Hub、SQL Tuning Advisor 等;每小时为单个数据库采集 1300+ 指标,支持跨库聚合分析与作业编排。
四 关键指标与阈值建议
- 资源类
- CPU:持续高于 80% 需排查热点 SQL/并行/系统负载。
- 内存:应用可用内存长期偏低或 swap 持续使用,检查 SGA/PGA 配置与工作负载。
- I/O:iostat 的 await、svctm、util 偏高,关注存储延迟与队列;util 接近 100% 表示设备饱和。
- 数据库类
- 活动会话与等待:V$SESSION/V$ACTIVE_SESSION_HISTORY 中等待事件(如 db file sequential/scattered read、log file sync)占比高时,优先分析对应 SQL 与 I/O。
- SQL 执行:长时运行 SQL、高逻辑读/物理读、频繁硬解析;结合 执行计划 与 基线 优化。
- 容量与增长:表空间/FRA/归档 使用率超过 80% 及时扩容或清理;监控 AWR 基线 的周同比变化。
五 告警与自动化巡检脚本
- 告警思路
- 指标阈值:CPU> 80%、I/O 高 util、表空间> 80%、长事务/锁等待、归档失败、监听异常等触发 严重/警告 分级告警。
- 通道:企业微信/钉钉/邮件/短信;建议采用 告警去抖 与 升级策略,避免告警风暴。
- 巡检脚本示例(节选)
- 表空间使用率
set linesize 200 col tablespace_name for a30 select tablespace_name, round((used_space/ total_space)*100,2) pct_used from ( select df.tablespace_name, sum(fs.bytes) used_space, sum(df.bytes) total_space from dba_data_files df, dba_free_space fs where df.file_id = fs.file_id(+) group by df.tablespace_name ) where round((used_space/ total_space)*100,2) > 80 order by pct_used desc; - 长事务与活跃会话
-- 超过 5 分钟未提交的会话 select sid, serial#, username, sql_id, last_call_et/60 mins_inactive from v$session where status='ACTIVE' and last_call_et > 300 order by mins_inactive desc; - 部署建议:将上述 SQL 集成到 Shell/Python 脚本,由 cron 定时执行,结果通过 Zabbix sender 或 Webhook 推送告警。
- 表空间使用率
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何监控Ubuntu Oracle的性能指标
本文地址: https://pptw.com/jishu/764801.html
