外观
Oracle 数据库级别指标
文档目的
本文档详细介绍 Oracle 数据库级别的关键指标,包括性能指标、健康状态指标、资源使用指标等,为数据库运维人员提供全面的监控参考,帮助及时发现和解决数据库问题。
指标分类
性能指标
- 响应时间指标:数据库操作的响应时间
- 吞吐量指标:数据库处理的事务量和查询量
- 并发指标:数据库的并发连接和会话数
- 资源使用率指标:CPU、内存、I/O 等资源的使用情况
健康状态指标
- 实例状态指标:数据库实例的运行状态
- 存储状态指标:表空间、数据文件的状态
- 日志状态指标:重做日志、归档日志的状态
- 备份状态指标:数据库备份的完整性和时效性
安全指标
- 用户活动指标:用户登录、权限变更等活动
- 审计指标:审计记录的数量和类型
- 安全配置指标:安全相关参数的配置状态
配置指标
- 参数配置指标:数据库参数的配置值
- 资源限制指标:数据库资源的限制设置
- 服务质量指标:数据库服务的质量保证
核心性能指标
响应时间指标
数据库响应时间
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 平均响应时间 | 数据库操作的平均响应时间 | SELECT * FROM v$sysmetric WHERE metric_name = 'Database Time Per Second'; | < 10ms | 分钟级 |
| 会话响应时间 | 单个会话的响应时间 | SELECT * FROM v$session_wait WHERE wait_class != 'Idle'; | < 5ms | 分钟级 |
| SQL 执行时间 | SQL 语句的执行时间 | SELECT * FROM v$sqlstats ORDER BY elapsed_time DESC; | < 1s | 分钟级 |
等待事件时间
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 平均等待时间 | 等待事件的平均等待时间 | SELECT event, AVG(wait_time) FROM v$session_wait GROUP BY event; | < 10ms | 分钟级 |
| 主要等待事件 | 占比最高的等待事件 | SELECT event, COUNT(*) FROM v$session_wait GROUP BY event ORDER BY COUNT(*) DESC; | 无 idle 等待 | 分钟级 |
| I/O 等待时间 | I/O 操作的等待时间 | SELECT * FROM v$system_event WHERE event LIKE '%I/O%'; | < 5ms | 分钟级 |
吞吐量指标
事务吞吐量
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 事务量 | 每秒处理的事务数 | SELECT * FROM v$sysmetric WHERE metric_name = 'Transactions Per Second'; | 根据业务需求 | 分钟级 |
| 提交量 | 每秒提交的事务数 | SELECT * FROM v$sysmetric WHERE metric_name = 'User Commits Per Second'; | 根据业务需求 | 分钟级 |
| 回滚量 | 每秒回滚的事务数 | SELECT * FROM v$sysmetric WHERE metric_name = 'User Rollbacks Per Second'; | < 1% of commits | 分钟级 |
查询吞吐量
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| SQL 执行量 | 每秒执行的 SQL 语句数 | SELECT * FROM v$sysmetric WHERE metric_name = 'SQL Execution Per Second'; | 根据业务需求 | 分钟级 |
| 解析量 | 每秒解析的 SQL 语句数 | SELECT * FROM v$sysmetric WHERE metric_name = 'Parse Count Per Second'; | 根据业务需求 | 分钟级 |
| 硬解析量 | 每秒硬解析的 SQL 语句数 | SELECT * FROM v$sysmetric WHERE metric_name = 'Hard Parse Count Per Second'; | < 10% of parses | 分钟级 |
并发指标
连接数指标
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 活跃会话数 | 当前活跃的会话数 | SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE'; | < 80% of processes | 分钟级 |
| 总会话数 | 当前总会话数 | SELECT COUNT(*) FROM v$session; | < 80% of sessions | 分钟级 |
| 连接数趋势 | 连接数的变化趋势 | SELECT TO_CHAR(logon_time, 'YYYY-MM-DD HH24:MI'), COUNT(*) FROM v$session GROUP BY TO_CHAR(logon_time, 'YYYY-MM-DD HH24:MI'); | 稳定 | 小时级 |
锁指标
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 锁数量 | 当前的锁数量 | SELECT COUNT(*) FROM v$lock WHERE type != 'None'; | < 100 | 分钟级 |
| 锁等待时间 | 锁等待的时间 | SELECT * FROM v$lock WHERE lmode = 0; | < 1s | 分钟级 |
| 死锁数量 | 死锁的数量 | SELECT * FROM v$lock WHERE block = 1 AND request > 0; | 0 | 分钟级 |
资源使用率指标
CPU 使用率
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 数据库 CPU 使用率 | 数据库使用的 CPU 百分比 | SELECT * FROM v$sysmetric WHERE metric_name = 'CPU Usage Per Sec'; | < 70% | 分钟级 |
| 系统 CPU 使用率 | 系统整体的 CPU 百分比 | SELECT * FROM v$osstat WHERE stat_name = 'BUSY_TIME'; | < 80% | 分钟级 |
| CPU 等待时间 | CPU 等待的时间 | SELECT * FROM v$system_event WHERE event = 'CPU time'; | < 5% | 分钟级 |
内存使用率
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| SGA 使用率 | SGA 的使用百分比 | SELECT * FROM v$sga_resize_ops; | < 90% | 分钟级 |
| PGA 使用率 | PGA 的使用百分比 | SELECT * FROM v$pgastat WHERE name = 'total PGA allocated'; | < 90% | 分钟级 |
| 共享池使用率 | 共享池的使用百分比 | SELECT * FROM v$sgastat WHERE name = 'free memory' AND pool = 'shared pool'; | > 10% | 分钟级 |
| 缓冲区缓存命中率 | 缓冲区缓存的命中百分比 | SELECT name, value FROM v$sysstat WHERE name LIKE '%buffer cache hit ratio%'; | > 95% | 分钟级 |
健康状态指标
实例状态指标
实例运行状态
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 实例状态 | 数据库实例的运行状态 | SELECT status FROM v$instance; | OPEN | 分钟级 |
| 数据库状态 | 数据库的运行状态 | SELECT status FROM v$database; | ACTIVE | 分钟级 |
| 启动时间 | 实例的启动时间 | SELECT startup_time FROM v$instance; | - | 小时级 |
| 运行时间 | 实例的运行时间 | SELECT SYSDATE - startup_time FROM v$instance; | - | 小时级 |
进程状态
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| PMON 进程状态 | 进程监控进程的状态 | SELECT * FROM v$process WHERE program LIKE '%PMON%'; | 运行中 | 分钟级 |
| SMON 进程状态 | 系统监控进程的状态 | SELECT * FROM v$process WHERE program LIKE '%SMON%'; | 运行中 | 分钟级 |
| DBWn 进程状态 | 数据库写入进程的状态 | SELECT * FROM v$process WHERE program LIKE '%DBW%'; | 运行中 | 分钟级 |
| LGWR 进程状态 | 日志写入进程的状态 | SELECT * FROM v$process WHERE program LIKE '%LGWR%'; | 运行中 | 分钟级 |
| ARCH 进程状态 | 归档进程的状态 | SELECT * FROM v$process WHERE program LIKE '%ARCH%'; | 运行中 | 分钟级 |
存储状态指标
表空间状态
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 表空间使用率 | 表空间的使用百分比 | SELECT tablespace_name, ROUND((used_space/total_space)*100, 2) AS used_percent FROM (SELECT tablespace_name, SUM(bytes) AS total_space, SUM(bytes - NVL(free_bytes, 0)) AS used_space FROM (SELECT tablespace_name, bytes, 0 AS free_bytes FROM dba_data_files UNION ALL SELECT tablespace_name, 0 AS bytes, bytes AS free_bytes FROM dba_free_space) GROUP BY tablespace_name); | < 85% | 小时级 |
| 表空间增长率 | 表空间的增长速率 | SELECT tablespace_name, (SUM(bytes) - LAG(SUM(bytes)) OVER (PARTITION BY tablespace_name ORDER BY snap_id))/1024/1024/1024 AS growth_gb FROM dba_hist_tbspc_space_usage GROUP BY tablespace_name, snap_id; | < 5%/week | 天级 |
| 表空间状态 | 表空间的状态 | SELECT tablespace_name, status FROM dba_tablespaces; | ONLINE | 小时级 |
安全指标
用户活动指标
用户登录活动
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 登录失败次数 | 用户登录失败的次数 | SELECT COUNT(*) FROM dba_audit_trail WHERE action_name = 'LOGON' AND returncode != 0; | < 5/min | 小时级 |
| 异常登录 | 异常时间或位置的登录 | SELECT * FROM dba_audit_trail WHERE action_name = 'LOGON' AND TO_CHAR(timestamp, 'HH24') NOT BETWEEN '08' AND '18'; | 0 | 小时级 |
| 权限变更 | 用户权限的变更 | SELECT * FROM dba_audit_trail WHERE action_name LIKE '%GRANT%' OR action_name LIKE '%REVOKE%'; | 有审批记录 | 小时级 |
审计指标
审计记录
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| 审计记录数量 | 审计记录的数量 | SELECT COUNT(*) FROM dba_audit_trail WHERE timestamp > SYSDATE - 1; | 根据业务活动 | 天级 |
| 审计记录增长率 | 审计记录的增长速率 | SELECT TO_CHAR(timestamp, 'YYYY-MM-DD'), COUNT(*) FROM dba_audit_trail GROUP BY TO_CHAR(timestamp, 'YYYY-MM-DD'); | 稳定 | 天级 |
配置指标
参数配置指标
核心参数配置
| 指标名称 | 描述 | 查询方法 | 标准值 | 监控频率 |
|---|---|---|---|---|
| SGA 大小 | SGA 的配置大小 | SELECT value FROM v$parameter WHERE name = 'sga_target'; | 根据系统内存 | 天级 |
| PGA 大小 | PGA 的配置大小 | SELECT value FROM v$parameter WHERE name = 'pga_aggregate_target'; | 根据系统内存 | 天级 |
| 进程数限制 | 最大进程数限制 | SELECT value FROM v$parameter WHERE name = 'processes'; | 根据系统资源 | 天级 |
| 会话数限制 | 最大会话数限制 | SELECT value FROM v$parameter WHERE name = 'sessions'; | 根据系统资源 | 天级 |
| 归档模式 | 归档模式的配置 | SELECT log_mode FROM v$database; | ARCHIVELOG | 天级 |
指标监控与分析
监控工具
Oracle 内置工具
- Oracle Enterprise Manager (OEM):提供图形化的监控界面
- Automatic Workload Repository (AWR):自动收集性能数据
- Automatic Database Diagnostic Monitor (ADDM):自动诊断数据库问题
- Real-Time Monitoring:实时监控数据库状态
第三方工具
- Nagios:开源监控工具
- Zabbix:企业级监控解决方案
- Prometheus + Grafana:开源监控和可视化工具
- Datadog:云原生监控平台
监控策略
监控层次
- 基础设施层:监控服务器、存储、网络等基础设施
- 数据库层:监控数据库实例、存储、性能等
- 应用层:监控应用程序对数据库的访问
监控频率
- 实时监控:对关键指标进行实时监控
- 分钟级监控:对性能指标进行分钟级监控
- 小时级监控:对状态指标进行小时级监控
- 天级监控:对趋势指标进行天级监控
最佳实践
指标选择最佳实践
- 选择关键指标:选择对业务影响最大的指标
- 建立基线:为关键指标建立合理的基线
- 设置阈值:为关键指标设置合理的告警阈值
- 定期审查:定期审查指标的相关性和有效性
监控实施最佳实践
- 全面监控:监控数据库的各个方面
- 分层监控:从基础设施到应用层的分层监控
- 自动化监控:使用自动化工具进行监控
- 集中管理:集中管理监控数据和告警
性能优化最佳实践
- 持续优化:持续监控和优化数据库性能
- 预防性优化:基于趋势分析进行预防性优化
- 基准测试:定期进行基准测试,评估优化效果
- 文档化:记录优化过程和结果
常见问题(FAQ)
Q1: 如何确定数据库性能指标的标准值?
A1: 确定数据库性能指标的标准值应考虑以下因素:
- 系统配置:根据服务器的硬件配置确定
- 业务需求:根据业务的性能要求确定
- 历史数据:根据历史性能数据确定
- 行业标准:参考行业最佳实践和标准
Q2: 如何监控数据库的长期性能趋势?
A2: 监控数据库的长期性能趋势可以通过以下方法:
- 使用 AWR 报告:定期生成 AWR 报告,分析性能趋势
- 建立性能数据仓库:收集历史性能数据,建立数据仓库
- 使用趋势分析工具:使用专业的趋势分析工具
- 设置长期监控:配置长期监控任务,定期收集数据
Q3: 如何处理数据库性能突发问题?
A3: 处理数据库性能突发问题的步骤:
- 快速定位:使用监控工具快速定位问题
- 临时缓解:采取临时措施缓解性能问题
- 根本分析:分析问题的根本原因
- 永久解决:实施永久解决方案
- 预防措施:采取措施防止问题再次发生
Q4: 如何优化数据库性能指标?
A4: 优化数据库性能指标的方法:
- SQL 优化:优化 SQL 语句,提高执行效率
- 索引优化:优化索引设计,提高查询性能
- 参数调优:调整数据库参数,优化资源使用
- 存储优化:优化存储配置,提高 I/O 性能
- 架构优化:优化数据库架构,提高系统可扩展性
Q5: 如何确保数据库指标监控的可靠性?
A5: 确保数据库指标监控的可靠性的方法:
- 冗余监控:使用多种监控工具进行冗余监控
- 监控系统本身:监控监控系统本身的状态
- 定期测试:定期测试监控系统的告警功能
- 备份监控数据:备份监控数据,防止数据丢失
- 培训人员:培训运维人员,提高监控技能
