温馨提示×

Ubuntu如何监控Oracle资源使用

小樊
43
2025-11-09 04:48:19
栏目: 云计算

Ubuntu系统监控Oracle数据库资源使用的方法

一、操作系统层面工具(Ubuntu原生工具)

1. top/htop命令

top是Ubuntu系统自带的实时性能监控工具,可动态显示系统中各个进程的资源占用情况(包括CPU、内存、运行时间等)。通过top命令,可以快速识别占用资源过高的Oracle进程(如oracle用户下的ora_pmonora_cmon等后台进程或用户会话进程)。

  • 使用技巧:输入P键可按CPU使用率排序,M键按内存使用率排序;输入q退出。
    htoptop的增强版,提供更直观的条形图显示内存/交换空间使用情况,支持鼠标操作和进程搜索(如搜索oracle进程),更适合快速定位问题。

2. vmstat命令

vmstat用于监控系统的虚拟内存、进程、CPU活动等综合性能指标,帮助分析系统瓶颈。

  • 基本用法:vmstat 1(每秒刷新一次),输出包括:
    • procsr(运行队列中的进程数)、b(等待IO的进程数);
    • memoryfree(空闲内存)、buff(缓冲区内存)、cache(缓存内存);
    • swapsi(从磁盘交换到内存的数据量)、so(从内存交换到磁盘的数据量,非零值表示内存不足);
    • cpuus(用户进程占用CPU百分比)、sy(系统内核占用CPU百分比)、wa(等待IO的CPU时间百分比,高值表示IO瓶颈)。
  • 适用场景:快速判断系统是否存在内存不足、CPU过载或IO瓶颈。

3. iostat命令

iostat用于监控系统的CPU使用率和磁盘IO性能,帮助识别磁盘IO瓶颈(如Oracle数据库的读写延迟问题)。

  • 基本用法:iostat -x 1(每秒刷新一次,显示详细磁盘IO统计),关键指标包括:
    • %util:磁盘利用率(接近100%表示磁盘繁忙);
    • await:平均IO等待时间(高值表示IO延迟高);
    • r/s/w/s:每秒读/写请求数。
  • 适用场景:分析Oracle数据库的磁盘IO性能,如数据文件、重做日志文件的IO负载。

4. sar命令

sar是系统活动报告工具,可收集、报告和保存系统的历史性能数据(需安装sysstat包:sudo apt install sysstat)。

  • 基本用法:sar -u 1 5(查看CPU使用率,每秒1次,共5次);sar -r 1 5(查看内存使用情况);sar -d 1 5(查看磁盘IO情况)。
  • 优势:支持查看历史数据(如-f /var/log/sa/saXX,XX为日期),便于回溯分析性能问题。

二、Oracle数据库层面工具

1. SQL脚本监控

通过Oracle自带的性能视图(如v$sessionv$sqlgv$session),编写SQL脚本监控Oracle的活动会话、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 || ':' || ses.sid AS inst_sid,
      ses.username,
      ses.machine,
      TO_CHAR(ses.sql_exec_start, 'DD-HH24:MI:SS') AS sql_exec_start,
      ses.sql_id,
      SUBSTR(sql.sql_text, 1, 40) AS sql_text,
      SUBSTR(
        CASE 
          WHEN ses.time_since_last_wait_micro = 0 THEN 
            CASE ses.wait_class 
              WHEN 'Idle' THEN 'IDLE: ' || ses.event 
              ELSE ses.event 
            END 
          ELSE 'ON CPU' 
        END, 1, 33
      ) AS event,
      (CASE 
        WHEN ses.time_since_last_wait_micro = 0 THEN ses.wait_time_micro 
        ELSE ses.time_since_last_wait_micro 
      END) / 1000000 AS wait_sec
    FROM 
      gv$session ses
    LEFT JOIN 
      gv$sql sql ON ses.sql_id = sql.sql_id
    WHERE 
      ses.status = 'ACTIVE'
      AND ses.username IS NOT NULL
      AND ses.inst_id || ':' || ses.sid != SYS_CONTEXT('USERENV', 'INSTANCE') || ':' || SYS_CONTEXT('USERENV', 'SID')
    ORDER BY 
      ses.sql_exec_start, ses.username, ses.sid;
    
    该脚本可显示每个活跃会话的SQL执行时间、等待事件及等待时长,帮助定位慢SQL。

2. Oracle Enterprise Manager (OEM)

OEM是Oracle官方提供的综合监控工具,支持监控Oracle数据库的性能指标(如SGA/PGA命中率、SQL执行计划、锁等待)、空间使用情况(表空间利用率)、系统运行状态(实例状态、后台进程)等。

  • 配置步骤:在Oracle服务器上安装OEM代理,通过Web界面配置监控参数(如数据库实例、主机),即可实时查看监控数据并接收告警。

3. AWR/ASH报告

AWR(自动工作负载存储库)和ASH(活动会话历史)是Oracle内置的性能诊断工具,用于收集和分析数据库性能数据。

  • AWR报告:通过DBMS_WORKLOAD_REPOSITORY包生成,包含数据库的负载特性、性能指标(如CPU使用率、IO等待时间)、SQL执行统计等,帮助识别性能瓶颈。
  • ASH报告:记录当前活动会话的历史信息,用于分析当前的性能问题(如慢SQL、锁等待)。
  • 生成命令示例:
    -- 生成AWR报告(对比两个时间点的性能)
    @?/rdbms/admin/awrrpt.sql
    -- 生成ASH报告(当前活动会话)
    @?/rdbms/admin/ashrpt.sql
    
    适用场景:深入分析Oracle数据库的性能问题(如SQL性能瓶颈、资源争用)。

三、第三方监控工具

1. Zabbix

Zabbix是一款开源的企业级监控解决方案,支持监控Oracle数据库的性能指标(如表空间大小、缓存命中率、死锁数量、用户连接数)及Ubuntu系统的资源使用情况(CPU、内存、磁盘IO)。

  • 配置步骤:
    1. 在Ubuntu服务器上安装Zabbix客户端(zabbix-agent);
    2. 导入Zabbix的Oracle模板(如orabbix_export_full.xml);
    3. 配置主机群组和监控项(如添加Oracle数据库监控项,设置采集频率);
    4. 设置告警规则(如表空间利用率超过80%时发送邮件告警)。
      优势:支持分布式监控、自定义告警、可视化 dashboard。

2. Prometheus + Grafana + Oracle Exporter

  • Oracle Exporter:社区开发的Oracle监控插件,用于采集Oracle数据库的性能指标(如SQL执行时间、SGA命中率、PGA使用量),并提供给Prometheus拉取。
  • Prometheus:开源的时间序列数据库,用于存储Oracle和Ubuntu系统的监控数据。
  • Grafana:开源的可视化工具,用于创建Oracle和Ubuntu系统的监控 dashboard(如Oracle SQL执行时间趋势、Ubuntu CPU使用率仪表盘)。
  • 优势:灵活、可扩展,支持自定义监控指标和告警。

0