首页主机资讯Debian下Oracle性能监控怎么做

Debian下Oracle性能监控怎么做

时间2025-11-27 21:51:04发布访客分类主机资讯浏览983
导读:Debian下Oracle性能监控实操指南 一 监控体系与工具选型 数据库层:优先使用 Oracle Enterprise Manager(OEM) 做集中监控与告警;无OEM时,用 AWR/ASH 报告定位瓶颈,配合 oratop(官方...

Debian下Oracle性能监控实操指南

一 监控体系与工具选型

  • 数据库层:优先使用 Oracle Enterprise Manager(OEM) 做集中监控与告警;无OEM时,用 AWR/ASH 报告定位瓶颈,配合 oratop(官方轻量工具)实时查看会话、SQL与等待事件;需要脚本化时可结合 SQL Developer/ToadPython cx_Oracle 拉取指标。
  • 系统层:用 top/htop、vmstat、iostat、sar、nmon、dstat、netstat 观察 CPU、内存、I/O、网络与连接数。
  • 监听器:用 lsnrctl status/trace 检查监听状态与连接情况。
  • 可视化与告警:开源方案可选 Prometheus + Grafana(配合 Oracle 导出器如 oracledb_exporter),或 Zabbix/Nagios 做主机/数据库一体化监控与阈值告警。

二 数据库层关键SQL与检查

  • 活跃会话与正在执行的SQL(定位阻塞与高耗SQL)
    SELECT s.inst_id||':'||s.sid AS inst_sid,
           s.username,
           (SYSDATE - s.sql_exec_start) DAY TO SECOND AS exec_dur,
           s.sql_id,
           SUBSTR(q.sql_text,1,60) AS sql_text,
           CASE WHEN s.wait_time_micro = 0 THEN
                  CASE s.wait_class WHEN 'Idle' THEN 'IDLE: '||s.event ELSE s.event END
                ELSE 'ON CPU' END AS state,
           ROUND(CASE WHEN s.wait_time_micro = 0 THEN s.time_since_last_wait_micro
                     ELSE s.wait_time_micro END / 1e6, 2) AS wait_sec
    FROM gv$session s
    LEFT JOIN gv$sql q ON q.sql_id = s.sql_id AND q.inst_id = s.inst_id
    WHERE s.status = 'ACTIVE'
      AND s.username IS NOT NULL
    ORDER BY wait_sec DESC NULLS LAST
    FETCH FIRST 20 ROWS ONLY;
        
    
  • 长时运行SQL TopN(按累计耗时)
    SELECT sql_id, sql_text,
           ROUND(elapsed_time/1e6, 2) AS elapsed_sec,
           executions
    FROM v$sql
    ORDER BY elapsed_time DESC
    FETCH FIRST 10 ROWS ONLY;
        
    
  • 表空间使用率(超过 80% 建议扩容或清理)
    SELECT a.tablespace_name,
           ROUND(a.bytes/1024/1024, 2) AS total_mb,
           ROUND((a.bytes - b.bytes)/1024/1024, 2) AS used_mb,
           ROUND((a.bytes - b.bytes)/a.bytes*100, 2) AS used_pct
    FROM (SELECT tablespace_name, SUM(bytes) AS bytes
          FROM dba_data_files GROUP BY tablespace_name) a,
         (SELECT tablespace_name, SUM(bytes) AS bytes
          FROM dba_free_space GROUP BY tablespace_name) b
    WHERE a.tablespace_name = b.tablespace_name
    ORDER BY used_pct DESC;
        
    
  • AWR/ASH 快照与报告(周期性采集,对比分析性能趋势与等待事件)
    -- 查看快照范围
    SELECT snap_id, begin_interval_time, end_interval_time
    FROM dba_hist_snapshot ORDER BY snap_id DESC;
        
    
    -- 生成AWR报告(在SQL*Plus中执行,按提示选择开始/结束快照ID)
    @?/rdbms/admin/awrrpt.sql
    
    说明:AWR/ASH 为 Oracle 内置性能诊断数据,适合定位 Top SQL、等待事件、负载变化 等性能问题。

三 系统层与监听器的监控

  • 资源与I/O(建议持续采样并落库或推送至时序库)
    top/htop              # 进程与CPU/内存
    vmstat 1              # 虚拟内存、CPU、I/O
    iostat -x 1           # 磁盘I/O与await、svctm
    sar 1                 # 系统活动历史/实时
    nmon                  # 综合资源监控
    dstat                 # 多合一资源视图
    free -h               # 内存使用
    df -h                 # 磁盘空间
    netstat -tlnp | grep 1521  # 监听端口连通性
    
  • 监听器(lsnrctl)
    lsnrctl status         # 查看服务/客户端连接概况
    lsnrctl reload        # 重载配置(不中断现有连接)
    tail -f $ORACLE_HOME/network/log/listener.log
    lsnrctl trace start   # 开启跟踪(排障用)
    lsnrctl trace stop    # 关闭跟踪
    
    要点:lsnrctl 用于监听器的管理与状态查看,并非系统性能监控工具;系统层应配合 top/vmstat/iostat 等使用。

四 自动化与告警落地

  • 开源监控平台
    • Prometheus + Grafana:部署 oracledb_exporter 采集 Oracle 指标,Grafana 做可视化看板,Prometheus 配置告警规则(如长事务、会话突增、表空间阈值)。
    • Zabbix:通过 ODBC 或外部脚本采集数据库与表空间等指标,配置触发器与通知媒介(邮件/企业微信/钉钉)。
    • Nagios:使用插件或脚本检查 ORA- 错误、会话数、表空间、备份状态等,形成服务健康检查与告警闭环。
  • 轻量脚本示例(表空间阈值告警,可接入 Zabbix/Nagios)
    #!/usr/bin/env bash
    ORACLE_SID=your_sid
    ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
    PATH=$ORACLE_HOME/bin:$PATH
    export ORACLE_SID ORACLE_HOME PATH
    
    THRESHOLD=80
    ALERT_EMAIL=dba@example.com
    
    sqlplus -S / as sysdba <
        <
        'EOF'
    SET HEADING OFF FEEDBACK OFF
    SELECT tablespace_name || ':' || ROUND(used_pct, 1)
    FROM (
      SELECT a.tablespace_name,
             ROUND((a.bytes - b.bytes)/a.bytes*100, 1) AS used_pct
      FROM (SELECT tablespace_name, SUM(bytes) AS bytes FROM dba_data_files GROUP BY tablespace_name) a,
           (SELECT tablespace_name, SUM(bytes) AS bytes FROM dba_free_space GROUP BY tablespace_name) b
      WHERE a.tablespace_name = b.tablespace_name
    )
    WHERE used_pct >
         $THRESHOLD
    /
    EXIT
    EOF
    
    建议:将脚本输出接入 Zabbix Agent 的 UserParameterNagios 插件,并设置 告警升级值班通知

五 日常巡检清单与阈值建议

维度 关键指标 建议阈值或动作
表空间 使用率 超过 80% 预警,超过 90% 尽快扩容或清理
活跃会话 会话数、阻塞 突增或长期阻塞需排查 Top SQL 与锁等待
长时SQL Elapsed Time、Executions 结合 AWR/ASH 优化执行计划与索引
等待事件 DB CPU、IO、锁 关注 db file sequential/scattered read、log file sync
监听器 状态、连接排队 使用 lsnrctl status 观察服务注册与连接数
系统资源 CPU、内存、I/O CPU 持续 > 80%、I/O await 高、内存紧张时联动排查
Data Guard 备库应用延迟 备库 LAST_APPLIED_TIME 落后超过阈值(如 1–3 小时)告警
日志 Alert/Listener 关键字 ORA-、TNS 错误、频繁重连及时告警

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian下Oracle性能监控怎么做
本文地址: https://pptw.com/jishu/758333.html
PyTorch在Debian上的兼容性怎样 Debian中Oracle版本怎么选

游客 回复需填写必要信息