本文档风哥主要介绍Oracle数据库监控体系相关知识,包括数据库监控的概念、指标、工具、告警等内容,由风哥教程参考Oracle官方文档数据库监控内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 数据库监控概念
Oracle数据库监控是指通过收集和分析数据库运行状态数据,及时发现和解决数据库问题,确保数据库稳定运行。学习交流加群风哥微信: itpux-com
- 及时发现数据库问题
- 预防潜在风险
- 优化数据库性能
- 保障业务连续性
- 满足合规要求
1.2 数据库监控组件
数据库监控的主要组件:
- 数据采集:收集监控数据
- 数据存储:存储监控数据
- 数据分析:分析监控数据
- 告警通知:发送告警通知
- 可视化展示:展示监控数据
1.3 数据库监控功能
数据库监控的主要功能:
- 实时监控:实时监控数据库状态
- 历史分析:分析历史监控数据
- 告警通知:发送告警通知
- 报表统计:生成监控报表
- 趋势预测:预测未来趋势
Part02-生产环境规划与建议
2.1 数据库监控规划
数据库监控规划要点:
– 数据库实例:监控数据库实例
– 存储空间:监控存储空间
– 性能指标:监控性能指标
– 会话连接:监控会话连接
– 错误日志:监控错误日志
# 监控频率规划
– 实时监控:关键指标实时监控
– 分钟监控:重要指标分钟监控
– 小时监控:一般指标小时监控
– 天监控:统计指标天监控
# 告警级别规划
– 紧急告警:立即处理
– 严重告警:尽快处理
– 一般告警:计划处理
– 提示告警:关注处理
2.2 数据库监控设计原则
数据库监控设计原则:
- 全面覆盖:监控所有关键指标
- 及时响应:及时发现和响应
- 准确告警:准确告警避免误报
- 易于使用:易于使用和维护
- 可扩展:可扩展监控范围
2.3 数据库监控策略
数据库监控策略:
- 主动监控:主动发现潜在问题
- 被动监控:响应告警事件
- 趋势分析:分析趋势预测问题
- 容量规划:基于监控进行容量规划
Part03-生产环境项目实施方案
3.1 数据库监控指标
3.1.1 关键性能指标
# 1. 会话监控
SQL> SELECT count(*) FROM v$session;
SQL> SELECT count(*) FROM v$session WHERE status = ‘ACTIVE’;
SQL> SELECT count(*) FROM v$session WHERE blocking_session IS NOT NULL;
# 2. 等待事件监控
SQL> SELECT event, count(*)
FROM v$session_wait
GROUP BY event
ORDER BY 2 DESC;
# 3. IO监控
SQL> SELECT name, phyrds, phywrts
FROM v$filestat f, v$datafile d
WHERE f.file# = d.file#;
# 4. 缓冲区命中率
SQL> SELECT ROUND((1 – (phy.value / (cur.value + con.value))) * 100, 2) hit_ratio
FROM v$sysstat phy, v$sysstat cur, v$sysstat con
WHERE phy.name = ‘physical reads’
AND cur.name = ‘db block gets’
AND con.name = ‘consistent gets’;
# 5. 库缓存命中率
SQL> SELECT ROUND((1 – (reloads / pins)) * 100, 2) hit_ratio
FROM v$librarycache;
# 6. 排序监控
SQL> SELECT ROUND((mem.value / (mem.value + dsk.value)) * 100, 2) mem_sort_pct
FROM v$sysstat mem, v$sysstat dsk
WHERE mem.name = ‘sorts (memory)’
AND dsk.name = ‘sorts (disk)’;
3.1.2 空间监控指标
# 1. 表空间使用率
SQL> SELECT tablespace_name,
ROUND((used_space / total_space) * 100, 2) used_pct,
ROUND(free_space / 1024 / 1024, 2) free_mb
FROM (
SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 total_space,
SUM(bytes) / 1024 / 1024 –
(SELECT SUM(bytes) / 1024 / 1024
FROM dba_free_space f
WHERE f.tablespace_name = d.tablespace_name) used_space,
(SELECT SUM(bytes) / 1024 / 1024
FROM dba_free_space f
WHERE f.tablespace_name = d.tablespace_name) free_space
FROM dba_data_files d
GROUP BY tablespace_name
)
ORDER BY used_pct DESC;
# 2. 数据文件使用率
SQL> SELECT file_name,
ROUND(bytes / 1024 / 1024, 2) size_mb,
ROUND(maxbytes / 1024 / 1024, 2) max_mb,
autoextensible
FROM dba_data_files
ORDER BY bytes DESC;
# 3. 闪回区使用率
SQL> SELECT name,
ROUND(space_limit / 1024 / 1024 / 1024, 2) limit_gb,
ROUND(space_used / 1024 / 1024 / 1024, 2) used_gb,
ROUND((space_used / space_limit) * 100, 2) used_pct
FROM v$recovery_file_dest;
# 4. 归档日志空间
SQL> SELECT ROUND(SUM(blocks * block_size) / 1024 / 1024 / 1024, 2) size_gb
FROM v$archived_log
WHERE completion_time > SYSDATE – 1;
3.2 数据库监控工具
3.2.1 使用AWR监控
# 1. 生成AWR报告
SQL> @?/rdbms/admin/awrrpt.sql
# 2. 查看AWR快照
SQL> SELECT snap_id, end_interval_time
FROM dba_hist_snapshot
ORDER BY snap_id DESC;
# 3. 查看AWR基线
SQL> SELECT * FROM dba_hist_baseline;
# 4. 创建AWR基线
SQL> BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
start_snap_id => 100,
end_snap_id => 110,
baseline_name => ‘FGEDU_PEAK_BASELINE’
);
END;
/
# 5. 查看AWR设置
SQL> SELECT * FROM dba_hist_wr_control;
# 6. 修改AWR设置
SQL> BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 43200,
interval => 30
);
END;
/
3.2.2 使用ASH监控
# 1. 生成ASH报告
SQL> @?/rdbms/admin/ashrpt.sql
# 2. 查看ASH数据
SQL> SELECT sample_time, session_id, event, sql_id
FROM v$active_session_history
WHERE sample_time > SYSDATE – 1/24
ORDER BY sample_time DESC;
# 3. 查看等待事件
SQL> SELECT event, count(*)
FROM v$active_session_history
WHERE sample_time > SYSDATE – 1/24
GROUP BY event
ORDER BY 2 DESC;
# 4. 查看SQL执行情况
SQL> SELECT sql_id, count(*)
FROM v$active_session_history
WHERE sample_time > SYSDATE – 1/24
GROUP BY sql_id
ORDER BY 2 DESC;
# 5. 查看会话活动
SQL> SELECT session_id, session_serial#, count(*)
FROM v$active_session_history
WHERE sample_time > SYSDATE – 1/24
GROUP BY session_id, session_serial#
ORDER BY 3 DESC;
3.3 数据库监控告警
3.3.1 配置告警阈值
# 1. 表空间使用率告警
# 当表空间使用率超过80%时告警
SQL> BEGIN
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 => ‘FGEDU_DATA’
);
END;
/
# 2. 会话数告警
# 当会话数超过150时告警
SQL> BEGIN
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id => DBMS_SERVER_ALERT.SESSIONS,
warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
warning_value => ‘150’,
critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
critical_value => ‘180’,
observation_period => 1,
consecutive_occurrences => 1
);
END;
/
# 3. 查看告警设置
SQL> SELECT * FROM dba_thresholds;
3.3.2 查看告警信息
# 1. 查看当前告警
SQL> SELECT * FROM dba_outstanding_alerts
ORDER BY creation_time DESC;
# 2. 查看历史告警
SQL> SELECT * FROM dba_alert_history
ORDER BY creation_time DESC;
# 3. 查看告警详细信息
SQL> SELECT sequence_id, reason, suggested_action
FROM dba_outstanding_alerts;
# 4. 清除告警
SQL> EXEC DBMS_SERVER_ALERT.EXPAND_MESSAGE(
expansion => ‘CLEAR’,
sequence_id => 123
);
Part04-生产案例与实战讲解
4.1 数据库监控常见问题
4.1.1 告警风暴
# 分析步骤:
# 1. 检查告警数量
SQL> SELECT count(*) FROM dba_outstanding_alerts;
COUNT(*)
———-
100
# 2. 检查告警类型
SQL> SELECT reason, count(*)
FROM dba_outstanding_alerts
GROUP BY reason
ORDER BY 2 DESC;
# 3. 解决方案
# 调整告警阈值
SQL> BEGIN
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
warning_value => ’85’,
critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
critical_value => ’95’,
observation_period => 5,
consecutive_occurrences => 3
);
END;
/
# 清除告警
SQL> DELETE FROM dba_outstanding_alerts;
4.2 数据库监控故障排除
# 分析步骤:
# 1. 检查AWR快照
SQL> SELECT count(*) FROM dba_hist_snapshot
WHERE end_interval_time > SYSDATE – 1;
COUNT(*)
———-
0
# 2. 检查AWR设置
SQL> SELECT * FROM dba_hist_wr_control;
# 3. 检查MMON进程
$ ps -ef | grep mmon
# 4. 解决方案
# 启用AWR
SQL> ALTER SYSTEM SET statistics_level = TYPICAL;
# 手动创建快照
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
4.3 数据库监控优化方案
数据库监控优化方案:
- 优化指标:优化监控指标
- 优化频率:优化监控频率
- 优化告警:优化告警规则
- 优化存储:优化数据存储
- 优化展示:优化可视化展示
Part05-风哥经验总结与分享
5.1 数据库监控最佳实践
数据库监控最佳实践:
- 全面监控:监控所有关键指标
- 及时告警:及时发送告警
- 准确告警:避免告警误报
- 快速响应:快速响应告警
- 持续优化:持续优化监控
- 文档记录:完善文档记录
5.2 数据库监控检查清单
– [ ] 监控指标已确定
– [ ] 监控工具已部署
– [ ] 告警规则已配置
– [ ] 告警通知已配置
– [ ] 监控报表已生成
– [ ] 监控流程已建立
– [ ] 监控文档已记录
– [ ] 监控培训已完成
# 数据库监控问题处理流程
1. 发现监控问题
2. 收集监控相关信息
3. 分析监控问题原因
4. 制定处理方案
5. 执行处理方案
6. 验证问题解决
7. 总结经验,优化预防措施
5.3 数据库监控工具推荐
数据库监控常用工具:
- EMCC:企业管理器云控制
- AWR:自动工作负载仓库
- ASH:活动会话历史
- ADD:自动数据库诊断
- 自定义脚本:自定义监控脚本
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
