如何在Linux上监控Oracle性能指标
导读:Linux上监控Oracle性能指标的实用方案 一 监控体系与工具选型 数据库内置:使用 AWR/ASH/ADDM 获取历史与实时性能数据、定位瓶颈;配合 OEM(Oracle Enterprise Manager) 做可视化与告警。 操...
Linux上监控Oracle性能指标的实用方案
一 监控体系与工具选型
- 数据库内置:使用 AWR/ASH/ADDM 获取历史与实时性能数据、定位瓶颈;配合 OEM(Oracle Enterprise Manager) 做可视化与告警。
- 操作系统层:用 vmstat、mpstat、top、iostat、sar、nmon 观察 CPU、内存、I/O、负载、上下文切换 等系统资源。
- 开源监控:用 Zabbix(ODBC/外部检查)、Prometheus + oracle_exporter 做指标采集与可视化告警。
- 轻量即时:用 oratop 实时查看 会话、SQL、等待事件;用 Python cx_Oracle 编写自定义巡检与采集脚本。
二 操作系统层监控命令与关键指标
- 内存与交换:使用 free -m 查看 used/free,关注 Swap 是否被频繁使用;当 Swap 使用偏高,说明物理内存紧张。
- 负载与进程:用 uptime 或 w 观察 load average,当三个值均高于 2.5 时通常处于高负载;用 top/htop 按 CPU%/MEM% 排序定位占用最高的 Oracle 进程(ora_)。
- CPU 细粒度:用 mpstat -P ALL 1 查看每个 CPU 的 us、sy、id、wa、st,判断是否存在 CPU 争用 或 I/O 等待 导致的瓶颈。
- 虚拟内存与 I/O:用 vmstat 1 10 关注 si/so(swap in/out)、bi/bo(块设备读写)、r/b(运行/阻塞进程)、cs(上下文切换);非零 si/so 常指示内存不足。
- 磁盘与文件系统:用 iostat -xz 1 观察 await、r_await、w_await、svctm、util;用 df -h 检查 表空间/归档 所在磁盘使用率。
- 网络:用 netstat -tlnp | grep < 端口> 确认 监听端口 与连接状态。
三 Oracle数据库层关键SQL与阈值示例
- 实例与数据库状态:
- 单实例:select instance_name,host_name,startup_time,status,database_status from v$instance;
- RAC:select instance_name,host_name,startup_time,status,database_status from gv$instance;
- 会话与连接数:
- 单实例:select count(*) from v$session;
- RAC:select count(*) from gv$session;
- 表空间与数据文件:
- 表空间状态:select tablespace_name,status from dba_tablespaces;
- 数据文件状态:select name,status from v$datafile;
- 缓冲区命中率(逻辑读/物理读):
- select a.VALUE+b.VALUE logical_reads, c.VALUE phys_reads,
round(100*(1-c.value/(a.value+b.value)),4) hit_ratio
from v$sysstat a,v$sysstat b,v$sysstat c
where a.NAME=‘db block gets’ and b.NAME=‘consistent gets’ and c.NAME=‘physical reads’; - 经验值:低于 90% 建议增大 DB_CACHE_SIZE。
- select a.VALUE+b.VALUE logical_reads, c.VALUE phys_reads,
- 共享池命中率:
- select sum(pinhits)/sum(pins)*100 from v$librarycache;
- 经验值:低于 95% 建议应用使用 绑定变量 或增大 SHARED_POOL_SIZE。
- 排序区与 PGA:
- select name,value from v$sysstat where name like ‘%sort%’;
- 若 disk/(memory+row) 比例过高,调整 SORT_AREA_SIZE(workarea_size_policy=false)或 PGA_AGGREGATE_TARGET(workarea_size_policy=true)。
- 日志缓冲区:
- select name,value from v$sysstat where name in (‘redo entries’,‘redo buffer allocation retries’);
- 若 redo buffer allocation retries/redo entries > 1%,考虑增大 LOG_BUFFER。
- 监听状态:
- lsnrctl status(确认监听端口与服务映射)。
四 可视化与告警方案
- OEM 集中监控:部署 Oracle Enterprise Manager,配置 阈值/告警、查看 性能页、AWR/ASH 报告,适合 中大型 环境与 RAC/Data Guard。
- Zabbix 方案:通过 ODBC 或 external check 采集 会话、表空间、ASM、等待事件 等指标,结合 触发器 与 图形 实现 7×24 监控。
- Prometheus 方案:部署 oracle_exporter 暴露指标,使用 PromQL 与 Grafana 做可视化,配置 Alertmanager 进行告警。
五 快速排障流程与优化方向
- 快速排障流程:
- 先看 系统层:top/htop → mpstat/vmstat 确认 CPU/内存/IO/负载 是否异常;iostat 检查 磁盘 util 与 await。
- 再看 数据库层:v$instance 确认 OPEN/ACTIVE;v$session 看 活跃会话 与来源;AWR/ASH 定位 Top SQL/等待事件。
- 联动判断:若系统 wa 高且 iostat await 高,多为 I/O 瓶颈;若 si/so 频繁,多为 内存不足;若 CPU sy 高,多为 锁/闩锁/解析 等内核态开销。
- 优化方向(结合监控结果):
- 资源层:适度增加 内存/SSD/NVMe、优化 内核与文件系统 参数、关闭不必要服务。
- 数据库层:合理设置 SGA/PGA/连接数/LOG_BUFFER,使用 绑定变量、优化 SQL/索引、定期收集 统计信息 与 清理/重组。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Linux上监控Oracle性能指标
本文地址: https://pptw.com/jishu/764240.html
