温馨提示×

Ubuntu Oracle如何进行性能监控

小樊
42
2025-12-16 18:40:37
栏目: 云计算

Ubuntu 上 Oracle 性能监控实操指南

一 监控体系与总体思路

  • 建议采用“系统层 + 数据库层 + 可视化平台”三层方案:系统层用 Linux 自带工具观察资源瓶颈,数据库层用 Oracle 视图与官方/开源工具定位会话与 SQL,平台层用 OEM、Zabbix、Prometheus+Grafana 做长期可视化与告警。常用工具包含:top/htop、vmstat、iostat、sar、nmon(系统层),SQL*Plus、oratop、OEM(数据库层),以及 Zabbix、Prometheus+Grafana(平台层)。

二 快速排障与即时监控命令

  • 数据库连通与实例状态
    • 登录数据库:sqlplus / as sysdba
    • 实例状态:SELECT status FROM v$instance;(返回 OPEN 表示运行正常)
  • 活跃会话与长事务/等待
    • 查看活跃 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;
  • 监听与网络连通
    • 监听状态:lsnrctl status
    • 连通性测试:tnsping <服务名或主机:端口/服务>
  • 系统资源速查
    • CPU/内存:top/htop、free -h
    • I/O:iostat -x 1 3(关注 %util 是否长期接近 100%
    • 综合:vmstat 1 5(关注 si/so 是否频繁、是否有长队列)
    • 历史:sar -u 1 3(需安装并启用 sysstat

三 可视化与平台化监控

  • Oracle Enterprise Manager(OEM)
    • Oracle 标准监控平台,覆盖性能指标、空间、资源使用、运行状态等,适合集中化与长期观测;在 Ubuntu 上可作为数据库目标纳入监控(部署与代理按官方文档实施)。
  • Prometheus + Grafana + Oracle Exporter
    • 安装 Oracle Instant Client(示例):sudo apt update && sudo apt install libaio1
    • 部署开源 oracledb_exporter(Go 构建),在配置中设置 用户名/口令/服务名,启动 Exporter 并让 Prometheus 抓取;在 Grafana 导入 Oracle 仪表板模板实现可视化。
  • Zabbix
    • 通过 Zabbix Agent 或外部脚本采集 Oracle 指标,结合自动发现与触发器实现阈值告警与容量趋势分析;可用脚本/Exporter 作为数据来源。

四 关键指标与告警阈值建议

  • 系统层
    • CPU:持续高于 80% 需关注热点进程与 SQL;I/O:iostat 的 %util 长期接近 100% 表示磁盘瓶颈;内存:si/so 频繁交换说明内存不足;负载:uptime 的 load average 超过 CPU 核心数需排查。
  • 数据库层
    • 会话与连接:活跃会话突增、会话等待事件集中(如 enq: TX、db file sequential/scattered read 等)提示争用;SQL:平均执行时间、逻辑/物理读、执行次数异常增长需优化;存储:表空间使用率超过 80% 预警,95% 严重告警;日志:归档/闪回区使用率与增长速率监控。

五 落地步骤与注意事项

  • 准备 Oracle 客户端与依赖
    • 安装 libaio1 等依赖;下载并解压 Oracle Instant Client,设置环境变量(如 LD_LIBRARY_PATH),确保 sqlplus 与监控组件可正常连接数据库。
  • 建立监控账号与最小权限
    • 为监控创建专用用户,授予如 SELECT_CATALOG_ROLE、SELECT ANY DICTIONARY 等必要权限,避免使用 SYS/SYSTEM 直连采集。
  • 部署 Exporter 或脚本
    • 选择 oracledb_exporter 或自研脚本(如 Python + cx_Oracle),输出 Prometheus 指标或 Zabbix 可采集数据;为抓取与写入配置合适频率(如 15s~60s)。
  • 配置可视化与告警
    • Prometheus + Grafana 导入仪表板并配置 Alertmanager;Zabbix 建立主机、监控项、触发器与通知媒介(邮件/企业微信/钉钉等)。
  • 日志与审计
    • 定期检查 alert.log、listener.log 的错误与告警;对监控账号与抓取接口设置访问控制与审计,避免泄露敏感信息。

0