Ubuntu系统监控Oracle数据库资源使用的方法
一、操作系统层面工具(Ubuntu原生工具)
1. top/htop命令
top是Ubuntu系统自带的实时性能监控工具,可动态显示系统中各个进程的资源占用情况(包括CPU、内存、运行时间等)。通过top命令,可以快速识别占用资源过高的Oracle进程(如oracle用户下的ora_pmon、ora_cmon等后台进程或用户会话进程)。
- 使用技巧:输入
P键可按CPU使用率排序,M键按内存使用率排序;输入q退出。
htop是top的增强版,提供更直观的条形图显示内存/交换空间使用情况,支持鼠标操作和进程搜索(如搜索oracle进程),更适合快速定位问题。
2. vmstat命令
vmstat用于监控系统的虚拟内存、进程、CPU活动等综合性能指标,帮助分析系统瓶颈。
- 基本用法:
vmstat 1(每秒刷新一次),输出包括:- procs:
r(运行队列中的进程数)、b(等待IO的进程数); - memory:
free(空闲内存)、buff(缓冲区内存)、cache(缓存内存); - swap:
si(从磁盘交换到内存的数据量)、so(从内存交换到磁盘的数据量,非零值表示内存不足); - cpu:
us(用户进程占用CPU百分比)、sy(系统内核占用CPU百分比)、wa(等待IO的CPU时间百分比,高值表示IO瓶颈)。
- procs:
- 适用场景:快速判断系统是否存在内存不足、CPU过载或IO瓶颈。
3. iostat命令
iostat用于监控系统的CPU使用率和磁盘IO性能,帮助识别磁盘IO瓶颈(如Oracle数据库的读写延迟问题)。
- 基本用法:
iostat -x 1(每秒刷新一次,显示详细磁盘IO统计),关键指标包括:%util:磁盘利用率(接近100%表示磁盘繁忙);await:平均IO等待时间(高值表示IO延迟高);r/s/w/s:每秒读/写请求数。
- 适用场景:分析Oracle数据库的磁盘IO性能,如数据文件、重做日志文件的IO负载。
4. sar命令
sar是系统活动报告工具,可收集、报告和保存系统的历史性能数据(需安装sysstat包:sudo apt install sysstat)。
- 基本用法:
sar -u 1 5(查看CPU使用率,每秒1次,共5次);sar -r 1 5(查看内存使用情况);sar -d 1 5(查看磁盘IO情况)。 - 优势:支持查看历史数据(如
-f /var/log/sa/saXX,XX为日期),便于回溯分析性能问题。
二、Oracle数据库层面工具
1. SQL脚本监控
通过Oracle自带的性能视图(如v$session、v$sql、gv$session),编写SQL脚本监控Oracle的活动会话、SQL执行情况及资源消耗。
- 示例脚本(监控活跃SQL):
该脚本可显示每个活跃会话的SQL执行时间、等待事件及等待时长,帮助定位慢SQL。col inst_sid heading "INST_ID|:SID" format a7 col username format a10 col machine format a12 col sql_exec_start heading "SQL|START|D HH:MM:SS" format a11 col sql_id format a13 col sql_text format a40 col event format a33 col wait_sec heading "WAIT|(SEC)" format 99999 set linesize 200 SELECT ses.inst_id || ':' || ses.sid AS inst_sid, ses.username, ses.machine, TO_CHAR(ses.sql_exec_start, 'DD-HH24:MI:SS') AS sql_exec_start, ses.sql_id, SUBSTR(sql.sql_text, 1, 40) AS sql_text, SUBSTR( CASE WHEN ses.time_since_last_wait_micro = 0 THEN CASE ses.wait_class WHEN 'Idle' THEN 'IDLE: ' || ses.event ELSE ses.event END ELSE 'ON CPU' END, 1, 33 ) AS event, (CASE WHEN ses.time_since_last_wait_micro = 0 THEN ses.wait_time_micro ELSE ses.time_since_last_wait_micro END) / 1000000 AS wait_sec FROM gv$session ses LEFT JOIN gv$sql sql ON ses.sql_id = sql.sql_id WHERE ses.status = 'ACTIVE' AND ses.username IS NOT NULL AND ses.inst_id || ':' || ses.sid != SYS_CONTEXT('USERENV', 'INSTANCE') || ':' || SYS_CONTEXT('USERENV', 'SID') ORDER BY ses.sql_exec_start, ses.username, ses.sid;
2. Oracle Enterprise Manager (OEM)
OEM是Oracle官方提供的综合监控工具,支持监控Oracle数据库的性能指标(如SGA/PGA命中率、SQL执行计划、锁等待)、空间使用情况(表空间利用率)、系统运行状态(实例状态、后台进程)等。
- 配置步骤:在Oracle服务器上安装OEM代理,通过Web界面配置监控参数(如数据库实例、主机),即可实时查看监控数据并接收告警。
3. AWR/ASH报告
AWR(自动工作负载存储库)和ASH(活动会话历史)是Oracle内置的性能诊断工具,用于收集和分析数据库性能数据。
- AWR报告:通过
DBMS_WORKLOAD_REPOSITORY包生成,包含数据库的负载特性、性能指标(如CPU使用率、IO等待时间)、SQL执行统计等,帮助识别性能瓶颈。 - ASH报告:记录当前活动会话的历史信息,用于分析当前的性能问题(如慢SQL、锁等待)。
- 生成命令示例:
适用场景:深入分析Oracle数据库的性能问题(如SQL性能瓶颈、资源争用)。-- 生成AWR报告(对比两个时间点的性能) @?/rdbms/admin/awrrpt.sql -- 生成ASH报告(当前活动会话) @?/rdbms/admin/ashrpt.sql
三、第三方监控工具
1. Zabbix
Zabbix是一款开源的企业级监控解决方案,支持监控Oracle数据库的性能指标(如表空间大小、缓存命中率、死锁数量、用户连接数)及Ubuntu系统的资源使用情况(CPU、内存、磁盘IO)。
- 配置步骤:
- 在Ubuntu服务器上安装Zabbix客户端(
zabbix-agent); - 导入Zabbix的Oracle模板(如
orabbix_export_full.xml); - 配置主机群组和监控项(如添加Oracle数据库监控项,设置采集频率);
- 设置告警规则(如表空间利用率超过80%时发送邮件告警)。
优势:支持分布式监控、自定义告警、可视化 dashboard。
- 在Ubuntu服务器上安装Zabbix客户端(
2. Prometheus + Grafana + Oracle Exporter
- Oracle Exporter:社区开发的Oracle监控插件,用于采集Oracle数据库的性能指标(如SQL执行时间、SGA命中率、PGA使用量),并提供给Prometheus拉取。
- Prometheus:开源的时间序列数据库,用于存储Oracle和Ubuntu系统的监控数据。
- Grafana:开源的可视化工具,用于创建Oracle和Ubuntu系统的监控 dashboard(如Oracle SQL执行时间趋势、Ubuntu CPU使用率仪表盘)。
- 优势:灵活、可扩展,支持自定义监控指标和告警。