外观
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 数据库性能的方法:
监控等待事件:
sqlSELECT event, total_waits, time_waited, average_wait FROM V$SYSTEM_EVENT WHERE total_waits > 0 ORDER BY time_waited DESC;监控会话状态:
sqlSELECT status, count(*) FROM V$SESSION GROUP BY status;监控内存使用:
sqlSELECT name, value FROM V$SGA; SELECT name, value FROM V$PGASTAT WHERE name LIKE '%used%';监控 I/O 性能:
sqlSELECT file_name, phyrds, phywrts, phyblkrd, phyblkwrt FROM V$FILESTAT f, DBA_DATA_FILES d WHERE f.file# = d.file_id ORDER BY phyblkwrt DESC;监控 SQL 性能:
sqlSELECT sql_id, elapsed_time, executions, buffer_gets, disk_reads FROM V$SQL ORDER BY elapsed_time DESC;
Q2: 如何设置 Oracle 数据库监控指标的告警阈值?
A2: 设置 Oracle 数据库监控指标告警阈值的方法:
使用 Oracle Enterprise Manager:
- 登录 Enterprise Manager
- 导航到 "监控" → "告警设置"
- 选择要设置阈值的指标
- 设置警告和严重阈值
- 保存设置
使用 DBMS_SERVER_ALERT 包:
sqlEXEC 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');使用第三方监控工具:
- 配置第三方监控工具(如 Zabbix、Nagios 等)
- 设置相应的告警阈值
- 配置告警通知方式
Q3: 如何监控 Oracle 数据库的表空间使用情况?
A3: 监控 Oracle 数据库表空间使用情况的方法:
使用 DBA_TABLESPACES 和 DBA_FREE_SPACE 视图:
sqlSELECT 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;使用 V$TABLESPACE 视图:
sqlSELECT 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;使用 Oracle Enterprise Manager:
- 登录 Enterprise Manager
- 导航到 "存储" → "表空间"
- 查看表空间使用情况的图表和详细信息
Q4: 如何监控 Oracle 数据库的备份和恢复状态?
A4: 监控 Oracle 数据库备份和恢复状态的方法:
监控备份状态:
sqlSELECT 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;监控归档日志:
sqlSELECT sequence#, first_time, next_time, archived, applied FROM V$ARCHIVED_LOG ORDER BY sequence# DESC;监控恢复状态:
sqlSELECT * FROM V$RECOVERY_PROGRESS;监控备份集:
sqlSELECT 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;使用 Oracle Enterprise Manager:
- 登录 Enterprise Manager
- 导航到 "可用性" → "备份与恢复"
- 查看备份作业的状态和历史记录
Q5: 如何监控 Oracle 数据库的 SQL 性能?
A5: 监控 Oracle 数据库 SQL 性能的方法:
监控 Top SQL:
sqlSELECT 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;监控 SQL 执行计划:
sqlEXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id = 10; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);监控 SQL 等待事件:
sqlSELECT sql_id, event, total_waits, time_waited FROM V$SQL_MONITOR WHERE status = 'EXECUTING' ORDER BY time_waited DESC;使用 AWR 报告:
- 生成 AWR 报告
- 查看 "SQL Statistics" 和 "SQL ordered by Elapsed Time" 部分
- 分析消耗资源最多的 SQL 语句
使用 SQL Tuning Advisor:
sqlDECLARE 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;
