Skip to content

Oracle 监控指标参考

性能监控指标

响应时间指标

  • SQL 执行时间:单个 SQL 语句的执行时间
  • 事务响应时间:完整事务的响应时间
  • 会话响应时间:会话级别的响应时间
  • 系统响应时间:整个系统的响应时间
  • 等待事件时间:各种等待事件的等待时间

吞吐量指标

  • SQL 执行量:单位时间内执行的 SQL 语句数量
  • 事务量:单位时间内完成的事务数量
  • 并发会话数:同时活跃的会话数量
  • 连接数:数据库连接的数量
  • 网络吞吐量:网络数据传输的速率

资源使用率指标

  • CPU 使用率:数据库实例的 CPU 使用百分比
  • 内存使用率:SGA 和 PGA 的使用情况
  • I/O 使用率:磁盘 I/O 的使用情况
  • 网络使用率:网络带宽的使用情况
  • 存储使用率:存储空间的使用情况

缓存指标

  • 缓冲区缓存命中率:数据缓冲区的命中率
  • 共享池命中率:共享池的命中率
  • 库缓存命中率:库缓存的命中率
  • 字典缓存命中率:字典缓存的命中率
  • 结果缓存命中率:结果缓存的命中率

数据库状态指标

实例状态

  • 实例状态:实例是否正常运行
  • 启动时间:实例的启动时间
  • 运行时间:实例的运行时间
  • 数据库状态:数据库是否打开
  • 归档模式:是否启用归档模式

会话状态

  • 活跃会话数:当前活跃的会话数量
  • 非活跃会话数:当前非活跃的会话数量
  • 阻塞会话数:当前被阻塞的会话数量
  • 空闲会话数:当前空闲的会话数量
  • 会话等待:会话等待的事件和时间

锁状态

  • 锁数量:当前持有的锁数量
  • 锁等待:等待锁的会话数量
  • 死锁数量:检测到的死锁数量
  • 锁争用:锁争用的程度
  • 锁超时:锁超时的数量

事务状态

  • 活跃事务数:当前活跃的事务数量
  • 未提交事务数:未提交的事务数量
  • 事务回滚数:事务回滚的数量
  • 事务提交数:事务提交的数量
  • 长事务数:运行时间较长的事务数量

存储监控指标

表空间指标

  • 表空间使用率:各个表空间的使用百分比
  • 表空间增长速度:表空间的增长速率
  • 表空间剩余空间:表空间的剩余空间
  • 表空间最大大小:表空间的最大容量
  • 表空间自动扩展:表空间是否启用自动扩展

数据文件指标

  • 数据文件大小:各个数据文件的大小
  • 数据文件增长:数据文件的增长情况
  • 数据文件 I/O:数据文件的 I/O 活动
  • 数据文件状态:数据文件的状态(在线/离线)
  • 数据文件读写:数据文件的读写次数和字节数

redo 日志指标

  • redo 日志大小:redo 日志文件的大小
  • redo 日志切换频率:redo 日志切换的频率
  • redo 日志等待:等待 redo 日志的时间
  • redo 日志归档:redo 日志归档的状态和速度
  • redo 日志使用率:redo 日志的使用百分比

归档日志指标

  • 归档日志生成速率:单位时间内生成的归档日志数量
  • 归档日志大小:归档日志文件的大小
  • 归档日志空间使用:归档日志目录的空间使用情况
  • 归档日志备份状态:归档日志的备份状态
  • 归档日志传输状态:归档日志传输到备用数据库的状态

临时表空间指标

  • 临时表空间使用率:临时表空间的使用百分比
  • 临时表空间 I/O:临时表空间的 I/O 活动
  • 临时段使用:临时段的使用情况
  • 临时表空间增长:临时表空间的增长情况
  • 排序操作:排序操作的数量和大小

网络监控指标

监听器指标

  • 监听器状态:监听器是否正常运行
  • 连接请求数:监听器接收的连接请求数量
  • 连接拒绝数:监听器拒绝的连接请求数量
  • 监听器端口:监听器使用的端口
  • 监听器日志:监听器日志的内容和大小

网络连接指标

  • 活动连接数:当前活跃的网络连接数量
  • 连接成功率:连接成功的比例
  • 连接失败率:连接失败的比例
  • 连接响应时间:连接建立的响应时间
  • 网络延迟:网络传输的延迟时间

网络流量指标

  • 入站流量:进入数据库的网络流量
  • 出站流量:离开数据库的网络流量
  • 网络错误:网络错误的数量和类型
  • 网络重试:网络操作重试的次数
  • 网络超时:网络操作超时的次数

安全监控指标

用户活动指标

  • 登录尝试次数:用户登录尝试的次数
  • 登录失败次数:登录失败的次数
  • 账户锁定:被锁定的账户数量
  • 特权使用:特权用户的活动
  • 异常登录:异常时间或位置的登录

权限变更指标

  • 权限授予:权限授予的操作
  • 权限撤销:权限撤销的操作
  • 角色变更:角色创建、修改或删除的操作
  • 系统权限:系统权限的使用情况
  • 对象权限:对象权限的使用情况

审计指标

  • 审计记录数:生成的审计记录数量
  • 审计日志大小:审计日志的大小
  • 审计事件:审计的事件类型和频率
  • 审计策略:审计策略的执行情况
  • 审计异常:审计中发现的异常情况

安全配置指标

  • 密码策略合规性:密码策略的合规情况
  • 账户状态:用户账户的状态
  • 安全补丁:安全补丁的应用状态
  • 网络访问控制:网络访问控制的执行情况
  • 加密状态:数据加密的状态

备份恢复指标

备份状态指标

  • 备份完成状态:备份是否成功完成
  • 备份时间:备份执行的时间
  • 备份大小:备份文件的大小
  • 备份频率:备份的执行频率
  • 备份类型:执行的备份类型

恢复状态指标

  • 恢复完成状态:恢复是否成功完成
  • 恢复时间:恢复执行的时间
  • 恢复点:恢复到的时间点
  • 恢复类型:执行的恢复类型
  • 恢复错误:恢复过程中的错误

备份存储指标

  • 备份存储使用率:备份存储的使用百分比
  • 备份存储增长:备份存储的增长情况
  • 备份存储位置:备份存储的位置和状态
  • 备份存储冗余:备份存储的冗余情况
  • 备份存储可用性:备份存储的可用性

备份验证指标

  • 备份验证状态:备份验证的结果
  • 备份完整性:备份的完整性检查结果
  • 备份可恢复性:备份的可恢复性测试结果
  • 备份过期:过期的备份数量
  • 备份删除:删除的备份数量

作业和调度指标

作业状态

  • 作业完成状态:作业是否成功完成
  • 作业执行时间:作业执行的时间
  • 作业频率:作业的执行频率
  • 作业依赖:作业之间的依赖关系
  • 作业错误:作业执行中的错误

调度状态

  • 调度器状态:调度器是否正常运行
  • 调度作业数:调度的作业数量
  • 调度计划:作业的调度计划
  • 调度延迟:作业执行的延迟情况
  • 调度冲突:调度的作业冲突情况

自动维护任务

  • 自动维护任务状态:自动维护任务的执行状态
  • 统计信息收集:统计信息收集的情况
  • 空间管理:空间管理任务的执行情况
  • 段 advisor:段 advisor 的执行情况
  • SQL advisor:SQL advisor 的执行情况

性能监控视图

V$ 视图

  • V$SYSTEM_EVENT:系统级等待事件
  • V$SESSION:会话信息
  • V$SESSTAT:会话级统计信息
  • V$SYSSTAT:系统级统计信息
  • V$INSTANCE:实例信息
  • V$DATABASE:数据库信息
  • V$TABLESPACE:表空间信息
  • V$DATAFILE:数据文件信息
  • V$LOG:重做日志信息
  • V$ARCHIVED_LOG:归档日志信息
  • V$TEMPFILE:临时文件信息
  • V$PROCESS:进程信息
  • V$SGA:SGA 信息
  • V$PGASTAT:PGA 统计信息
  • V$LATCH:闩锁信息
  • V$LOCK:锁信息
  • V$TRANSACTION:事务信息
  • V$SQL:SQL 语句信息
  • V$SQLSTATS:SQL 语句统计信息

DBA_ 视图

  • DBA_TABLESPACES:表空间信息
  • DBA_DATA_FILES:数据文件信息
  • DBA_FREE_SPACE:空闲空间信息
  • DBA_SEGMENTS:段信息
  • DBA_EXTENTS:区信息
  • DBA_OBJECTS:对象信息
  • DBA_USERS:用户信息
  • DBA_ROLES:角色信息
  • DBA_SYS_PRIVS:系统权限信息
  • DBA_TAB_PRIVS:对象权限信息
  • DBA_SCHEDULER_JOBS:调度作业信息
  • DBA_SCHEDULER_RUNNING_JOBS:运行中的调度作业信息

监控工具指标

Enterprise Manager 指标

  • 性能概览:数据库性能的概览
  • SQL 性能:SQL 语句的性能
  • 存储性能:存储系统的性能
  • 数据库配置:数据库的配置信息
  • 警报:数据库的警报信息

AWR 报告指标

  • 数据库时间模型:数据库时间的分布
  • Top 5 等待事件:主要的等待事件
  • Top SQL 语句:消耗资源最多的 SQL 语句
  • 实例效率百分比:实例的效率指标
  • 内存统计:内存的使用情况
  • I/O 统计:I/O 的使用情况
  • 段统计:段的使用情况
  • 服务统计:服务的使用情况

ASH 报告指标

  • 活跃会话历史:活跃会话的历史信息
  • 等待事件分布:等待事件的分布情况
  • SQL 执行情况:SQL 语句的执行情况
  • 会话活动:会话的活动情况
  • 时间模型:时间的分布情况

Statspack 报告指标

  • 实例性能:实例的性能指标
  • 等待事件:等待事件的统计
  • SQL 语句:SQL 语句的统计
  • 内存使用:内存的使用情况
  • I/O 活动:I/O 的活动情况

监控指标阈值

性能阈值

  • CPU 使用率:警告阈值 70%,严重阈值 90%
  • 内存使用率:警告阈值 80%,严重阈值 95%
  • I/O 等待时间:警告阈值 50ms,严重阈值 200ms
  • 响应时间:警告阈值 1s,严重阈值 5s
  • 缓冲区缓存命中率:警告阈值 90%,严重阈值 80%

存储阈值

  • 表空间使用率:警告阈值 80%,严重阈值 90%
  • 数据文件增长:警告阈值 10GB/天,严重阈值 50GB/天
  • 归档日志生成:警告阈值 1GB/小时,严重阈值 5GB/小时
  • 临时表空间使用率:警告阈值 80%,严重阈值 90%
  • 备份存储使用率:警告阈值 80%,严重阈值 90%

安全阈值

  • 登录失败次数:警告阈值 5 次/分钟,严重阈值 20 次/分钟
  • 账户锁定:警告阈值 1 个/小时,严重阈值 5 个/小时
  • 权限变更:警告阈值 5 次/小时,严重阈值 20 次/小时
  • 异常登录:警告阈值 1 次/天,严重阈值 5 次/天

可用性阈值

  • 实例宕机:警告阈值 1 次/月,严重阈值 3 次/月
  • 服务不可用:警告阈值 5 分钟/天,严重阈值 30 分钟/天
  • 备份失败:警告阈值 1 次/周,严重阈值 3 次/周
  • 恢复时间:警告阈值 30 分钟,严重阈值 2 小时

监控指标收集和分析

指标收集方法

  • 自动收集:使用 Oracle 自动收集功能
  • 手动收集:使用 SQL 语句手动收集
  • 监控工具:使用专业的监控工具收集
  • 脚本收集:使用自定义脚本收集
  • 外部系统:使用外部监控系统收集

指标分析方法

  • 趋势分析:分析指标的变化趋势
  • 对比分析:与历史数据或基准数据对比
  • 关联分析:分析不同指标之间的关联关系
  • 异常检测:检测指标的异常值
  • 预测分析:预测指标的未来变化

指标报告

  • 日报:每日监控指标报告
  • 周报:每周监控指标报告
  • 月报:每月监控指标报告
  • 年报:每年监控指标报告
  • 异常报告:指标异常时的报告

常见问题(FAQ)

Q1: 如何使用 V$ 视图监控 Oracle 数据库性能?

A1: 使用 V$ 视图监控 Oracle 数据库性能的方法:

  1. 监控等待事件

    sql
    SELECT event, total_waits, time_waited, average_wait
    FROM V$SYSTEM_EVENT
    WHERE total_waits > 0
    ORDER BY time_waited DESC;
  2. 监控会话状态

    sql
    SELECT status, count(*) FROM V$SESSION GROUP BY status;
  3. 监控内存使用

    sql
    SELECT name, value FROM V$SGA;
    SELECT name, value FROM V$PGASTAT WHERE name LIKE '%used%';
  4. 监控 I/O 性能

    sql
    SELECT file_name, phyrds, phywrts, phyblkrd, phyblkwrt
    FROM V$FILESTAT f, DBA_DATA_FILES d
    WHERE f.file# = d.file_id
    ORDER BY phyblkwrt DESC;
  5. 监控 SQL 性能

    sql
    SELECT sql_id, elapsed_time, executions, buffer_gets, disk_reads
    FROM V$SQL
    ORDER BY elapsed_time DESC;

Q2: 如何设置 Oracle 数据库监控指标的告警阈值?

A2: 设置 Oracle 数据库监控指标告警阈值的方法:

  1. 使用 Oracle Enterprise Manager

    • 登录 Enterprise Manager
    • 导航到 "监控" → "告警设置"
    • 选择要设置阈值的指标
    • 设置警告和严重阈值
    • 保存设置
  2. 使用 DBMS_SERVER_ALERT 包

    sql
    EXEC DBMS_SERVER_ALERT.SET_THRESHOLD(
      metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
      warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
      warning_value => '80',
      critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
      critical_value => '90',
      observation_period => 1,
      consecutive_occurrences => 1,
      instance_name => NULL,
      object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
      object_name => 'USERS');
  3. 使用第三方监控工具

    • 配置第三方监控工具(如 Zabbix、Nagios 等)
    • 设置相应的告警阈值
    • 配置告警通知方式

Q3: 如何监控 Oracle 数据库的表空间使用情况?

A3: 监控 Oracle 数据库表空间使用情况的方法:

  1. 使用 DBA_TABLESPACES 和 DBA_FREE_SPACE 视图

    sql
    SELECT t.tablespace_name,
           ROUND(SUM(bytes) / 1024 / 1024, 2) AS total_mb,
           ROUND(SUM(bytes - free_bytes) / 1024 / 1024, 2) AS used_mb,
           ROUND(SUM(free_bytes) / 1024 / 1024, 2) AS free_mb,
           ROUND((SUM(bytes - free_bytes) / SUM(bytes)) * 100, 2) AS used_percent
    FROM (
      SELECT tablespace_name, SUM(bytes) AS bytes
      FROM DBA_DATA_FILES
      GROUP BY tablespace_name
    ) t,
    (
      SELECT tablespace_name, SUM(bytes) AS free_bytes
      FROM DBA_FREE_SPACE
      GROUP BY tablespace_name
    ) f
    WHERE t.tablespace_name = f.tablespace_name
    GROUP BY t.tablespace_name
    ORDER BY used_percent DESC;
  2. 使用 V$TABLESPACE 视图

    sql
    SELECT ts.name AS tablespace_name,
           df.total_space,
           (df.total_space - fs.free_space) AS used_space,
           fs.free_space,
           ROUND((1 - fs.free_space / df.total_space) * 100, 2) AS used_percent
    FROM V$TABLESPACE ts,
         (SELECT tablespace_id, SUM(bytes) / 1024 / 1024 AS total_space
          FROM V$DATAFILE
          GROUP BY tablespace_id) df,
         (SELECT tablespace_id, SUM(bytes) / 1024 / 1024 AS free_space
          FROM V$FREE_SPACE
          GROUP BY tablespace_id) fs
    WHERE ts.ts# = df.tablespace_id
      AND ts.ts# = fs.tablespace_id
    ORDER BY used_percent DESC;
  3. 使用 Oracle Enterprise Manager

    • 登录 Enterprise Manager
    • 导航到 "存储" → "表空间"
    • 查看表空间使用情况的图表和详细信息

Q4: 如何监控 Oracle 数据库的备份和恢复状态?

A4: 监控 Oracle 数据库备份和恢复状态的方法:

  1. 监控备份状态

    sql
    SELECT backup_type, status, completion_time, elapsed_seconds,
           backup_size/1024/1024/1024 AS backup_size_gb
    FROM V$RMAN_BACKUP_JOB_DETAILS
    ORDER BY completion_time DESC;
  2. 监控归档日志

    sql
    SELECT sequence#, first_time, next_time, archived, applied
    FROM V$ARCHIVED_LOG
    ORDER BY sequence# DESC;
  3. 监控恢复状态

    sql
    SELECT * FROM V$RECOVERY_PROGRESS;
  4. 监控备份集

    sql
    SELECT bs.key, bs.device_type, bs.completion_time, bs.status,
           bs.backup_type, bs.controlfile_included,
           bs.spfile_included, bs.compressed,
           SUM(bs.bytes)/1024/1024/1024 AS backup_size_gb
    FROM V$BACKUP_SET bs
    GROUP BY bs.key, bs.device_type, bs.completion_time, bs.status,
             bs.backup_type, bs.controlfile_included,
             bs.spfile_included, bs.compressed
    ORDER BY bs.completion_time DESC;
  5. 使用 Oracle Enterprise Manager

    • 登录 Enterprise Manager
    • 导航到 "可用性" → "备份与恢复"
    • 查看备份作业的状态和历史记录

Q5: 如何监控 Oracle 数据库的 SQL 性能?

A5: 监控 Oracle 数据库 SQL 性能的方法:

  1. 监控 Top SQL

    sql
    SELECT sql_id, sql_text, elapsed_time, executions,
           buffer_gets, disk_reads, rows_processed,
           elapsed_time/executions/1000000 AS avg_exec_time_sec
    FROM V$SQL
    WHERE executions > 0
    ORDER BY elapsed_time DESC
    FETCH FIRST 10 ROWS ONLY;
  2. 监控 SQL 执行计划

    sql
    EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id = 10;
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  3. 监控 SQL 等待事件

    sql
    SELECT sql_id, event, total_waits, time_waited
    FROM V$SQL_MONITOR
    WHERE status = 'EXECUTING'
    ORDER BY time_waited DESC;
  4. 使用 AWR 报告

    • 生成 AWR 报告
    • 查看 "SQL Statistics" 和 "SQL ordered by Elapsed Time" 部分
    • 分析消耗资源最多的 SQL 语句
  5. 使用 SQL Tuning Advisor

    sql
    DECLARE
      l_task_id VARCHAR2(30);
    BEGIN
      l_task_id := DBMS_SQLTUNE.CREATE_TUNING_TASK(
        sql_id => 'your_sql_id',
        scope => 'COMPREHENSIVE',
        time_limit => 60,
        task_name => 'tune_sql_' || 'your_sql_id',
        description => 'Tune SQL statement');
      
      DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => l_task_id);
      DBMS_OUTPUT.PUT_LINE('Task ID: ' || l_task_id);
    END;
    /
    
    SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tune_sql_your_sql_id') FROM DUAL;