通过SQL定时分析表监控Unix系统性能

上传人:灯火****19 文档编号:40516317 上传时间:2021-11-16 格式:DOCX 页数:14 大小:37.13KB
收藏 版权申诉 举报 下载
通过SQL定时分析表监控Unix系统性能_第1页
第1页 / 共14页
通过SQL定时分析表监控Unix系统性能_第2页
第2页 / 共14页
通过SQL定时分析表监控Unix系统性能_第3页
第3页 / 共14页
资源描述:

《通过SQL定时分析表监控Unix系统性能》由会员分享,可在线阅读,更多相关《通过SQL定时分析表监控Unix系统性能(14页珍藏版)》请在装配图网上搜索。

1、通过SQL定时分析表监控Unix系统性能一、 前言作为Unix系统中的Oracle数据库管理员,时刻监控操作系统的性能无疑是非常重要的,幸运的是 Unix系统提供了大量的监控命令,比如vmstat, iostat, sar, top等等,这些监控命令均以字符界面输出结果,再加上Unix系统中shell的强大分析功能,这样我们只需要编写一些脚本就可以实现自动的后台监控,当有问题的时候再自动发送邮件给DBA其实相类似的一些监控脚本可能已经随处可见了,但是本文提到的一个新的思路,就是利用Oracle数据库的statspack空间来存储监控的结果,再利用数据库天生的检索优势, 这样比以往靠shell分

2、析甚或是人工分析生成的监控结果文件要更加轻松,智能,同时也能实现更持久和更广泛的监控。本文大部分素材来源自Donald K. Burleson 的 Oracle9i Unix AdministrationHandbook,但是对于脚本中的一些错误和不合理的地方作了修改,并且添加了一些功能,本文的测试环境全部基于Sun Solaris 8 Sparc 64bit + Oracle9.2.0.5。本文第一版主要以监控内存消耗和CPUI待的vmstat命令为例,将陆续添加iostat等其它命令的监控脚本。二、思路首先安装statspack ,然后手工创建一个用于存储vmstat命令输出结果的表,再作

3、一个shell定时执行vmstat,将结果全部插入数据库表中,最后就是通过SQL定时分析表中的数据,超过预先指定的门限值就告警。同时根据表中的数据,我们还能作出系统性能的趋势报告。三、vmstat脚本及步骤1 .安装 statspacksqlplus"/ as sysdba ”SQL> ?/rdbms/admin/spcreate.sql按照提示设定perfstat用户的密码之后,由于是 10g,我选择了 SYSAU欣空间作为 perfstat用户的默认表空间,而没有另行创建表空间。2 .创建 stats$vmstat 表SQL> connect perfstat/per

4、fstatSQL> create_vmstat_tab.sql# create_vmstat_tab.sqldrop table stats$vmstat;create table stats$vmstat(start_date date,duration number,server_name varchar2(20), running_queue number,waiting_queue number,swap_in number,swap_out number, kbytes_page_in number, Kbytes_page_out number,page_scan numbe

5、r, user_cpu number, system_cpu number, idle_cpu number, wait_cpu number )tablespace sysauxstorage (initial 10m next 1mpctincrease 0) ;comment on column stats$vmstat.start_dateis '监控时间;comment on column stats$vmstat.duration is '监控日长'comment on column stats$vmstat.server_nameis '服务器名称

6、;comment on column stats$vmstat.running_queueis '执行队列;comment on column stats$vmstat.waiting_queueis '等待队列;comment on column stats$vmstat.swap_inis '每秒平均交换进 LWPs数';comment on column stats$vmstat.swap_outis '交换出进程数;comment on column stats$vmstat.kbytes_page_inis '换页进字节(K)'

7、comment on column stats$vmstat.kbytes_page_outis '换页出字节(K)'comment on column stats$vmstat.page_scanis 换页守护进程扫描页数;comment on column stats$vmstat.user_cpuis '用户操作占用的 CPU'comment on column stats$vmstat.system_cpuis '系统操作占用的 CPU'comment on column stats$vmstat.idle_cpuis 'CPU空

8、闲率;comment on column stats$vmstat.wait_cpuis 'CPU等待率(AIX独有)';3 .创建vmstat目录在oracle用户主目录下创建用于存放所有相关脚本的vmstat目录。$ cd$ mkdir vmstat4 .创建 get_vmstat.ksh 脚本改脚本用于定时执行 vmstat命令并且将结果存入数据库。# get_vmstat.ksh#!/bin/ksh# # 首先设定环境变量,根据实际环境修改.I# ORACLE_SID=kamusdbexport ORACLE_SIDORACLE_HOME='cat /var/o

9、pt/oracle/oratab|grepA$ORACLE_SID:|cut -f2 -d':'、export ORACLE_HOMEPATH=$ORACLE_HOME/bin:$PATHexport PATHSERVER_NAME='uname -a|awk 'print $2'、typeset -u SERVER_NAMEexport SERVER_NAME# # 每5分钟运行一次 vmstat(300秒),可以根据实际情况修 改.# SAMPLE_TIME=300# # 脚本一旦运行将不会停止,除非关闭操作系统.# -S参数表示监控 swap空间的

10、情况,报告 si , so列# msg$中的$表示一个任意2位数字,系统自动生成# while truedovmstat - S $SAMPLE_TIME 2 > /tmp/msg$# # Solaris 系统的vmstat没有wait CPU统计,所以我们在那一 列中存入0# $1, $2, $6, $7等数字分别表示 vmstat输出中的第几列,# 每个Unix系统中的vmstat输出可能都不一样,# 所以修改这些列号,就可以应对不同的操作系统。#cat /tmp/msg$|sed 1,3d | awk ' printf("%s %s %s %s %s %s %s

11、%s %s %s n",$1, $2, $6, $7, $8, $9, $12, $20, $21, $22) 'CPU| while read RUNQUE WAITQUE SWAPIN SWAPOUTPAGE_IN PAGE_OUT PAGE_SCAN USER_CPU SYSTEM_CPU IDdo$ORACLE_HOME/bin/sqlplus perfstat/perfstat <<EOFinsert into perfstat.stats$vmstatvalues (SYSDATE,$SAMPLE_TIME,'$SERVER_NAME'

12、,$RUNQUE,$WAITQUE,$SWAPIN,$SWAPOUT,$PAGE_IN,$PAGE_OUT,$PAGE_SCAN,$USER_CPU,$SYSTEM_CPU,$IDLE_CPU,0);commit;EXITEOFdonedone#删除临时文件#rm /tmp/msg$5 .创建 run_vmstat.ksh 脚本该脚本放在crontab中,用来定时检查 get_vmstat.ksh 脚本有没有 正常运行,如果 在运行,那么不作任何动作,如果不在运行,那么就运行get_vmstat.ksh 脚本。这个脚本的意义在于防止重新启动操作系统之后忘记运行get_vmstat.ksh 脚本

13、。# run_vmstat.ksh#!/bin/ksh# # 首先设定环境变量,根据实际环境修改 .# SCRIPT_PATH='echo oracle/vmstat'export SCRIPT_PATHORACLE_SID=kamusdbexport ORACLE_SIDORACLE_HOME='cat /var/opt/oracle/oratab|grep$ORACLE_SID:|cut -f2 -d':'、export ORACLE_HOMEPATH=$ORACLE_HOME/bin:$PATHexport PATH# # 作更进一步地控制,在系统

14、没有操作的时间内停止监控# 晚上8点到第二天凌晨 8点之间停止监控# 其它时间如果get_vmstat不在运行,就运行它# HOUR='date +"%H"'check_stat='ps -ef|grep get_vmstat|grep -v grep|wc -l'vmstat_num='expr $check_stat'if $HOUR -gt 19 | $HOUR -It 8 thenif $vmstat_num -gt 0 then kill -9 'ps -ef|grep get_vmstat|grep -v

15、grep|awk 'print $2 '' > /dev/nullfielseif $vmstat_num -le 0 then nohup $SCRIPT_PATH/get_vmstat.ksh > /dev/null 2>&1 & fifi6 .创建crontab 作业,定时执行 run_vmstat.ksh 脚本该作业每半小时运行一次。$ crontab - l > oracle.cron$ echo ' 00,30 * * * */export/home/oracle/vmstat/run_vmstat.ksh&g

16、t;> /export/home/oracle/vmstat/run.lst 2>&1' >>oracle.cron$ crontab oracle.cron7 .分析数据至此已经完成了定时运行vmstat和在数据库中存储 vmstat结果的步骤。自然,仅仅是搜集了统计信息是远远不够的,下面我们要分析搜集来的信息,产生操作系统的性能报告。将报告分为以下几类,分别用脚本实现。异常报告:显示超过了门限值的时间段( vmstat_alert.ksh + vmstat_alert.sql每小时趋势报告:显示一天内每小时的系统平均利用情况(rpt_vmstat_h

17、r.sql )。周趋势报告:显示每天的系统平均利用情况( rpt_vmstat_dy.sql )。1)异常报告# vmstat_alert.sqlREMREM该SQL用于报告Oracle环境中每个服务器的异常情况。REM根据get_vmstat.ksh 脚本得到的信息,报告每个小时的平均 值。REM DBAt现异常时间段,则可以深入检查每 5分钟的详细数据。REM在这个脚本中接受一个参数,表示需要报告的时间跨度。REM对于runing queue 的门限值应该设置为 CPU!”REM表示如果出现大量等待执行的任务就报警,这通常表示 CPU 负载过重。REM对于page scan(sr)的门限值

18、设置为 1,REM表示只要出现page daemon扫描页就报警,这通常表示内存 不足。REM对于CPUJ用率,设置为 70,表示超过70猊上的利用率才 报警。REM比如运行 vmstat_alert 7REM表示输出当前日期之前 7天之内的执行队列大于4,REM sr大于1 , CPU利用率超过70%勺按照小时统计的报告。REMset lines 80;set pages 999;set feedback off;set verify off;column my_date heading 'date hour' format a20 column c2 heading wai

19、tq format 9999 column c3 heading pg_in format 9999 column c4 heading pg_ot format 9999 column c5 heading usr format 9999 column c6 heading sys format 9999 column c7 heading idl format 9999 column c8 heading wt format 9999ttitle 'run queue > CPUs|May indicate an overloaded CPU| When runqueue e

20、xceeds the number of CPUs| on the server, tasks are waiting for service.'select server_name, to_char(start_date,'YY/MM/DD HH24') my_date, avg(running_queue) c2, avg(kbytes_page_in) c3, avg(kbytes_page_out) c4, avg(user_cpu) c5, avg(system_cpu) c6, avg(idle_cpu) c7 fromperfstat.stats$vmst

21、at WHERE running_queue > 4 and start_date > sysdate-&1 group by server_name, to_char(start_date,'YY/MM/DD HH24') ORDER BY server_name, to_char(start_date,'YY/MM/DD HH24') ;ttitle 'page_scan > 1|May indicate overloaded memory| Whenever Unix performs a page-in, the RAM

22、 memory | on the server has been exhausted and swap pages are being used.'select server_name, to_char(start_date,'YY/MM/DD HH24') my_date, avg(running_queue) c2, avg(kbytes_page_in) c3, avg(kbytes_page_out) c4, avg(user_cpu) c5, avg(system_cpu) c6, avg(idle_cpu) c7 fromperfstat.stats$vms

23、tat WHERE page_scan >1 and start_date > sysdate-&1 group by server_name, to_char(start_date,'YY/MM/DD HH24') ORDER BYserver_name, to_char(start_date,'YY/MM/DD HH24') ;ttitle 'user+system CPU > 70%11ndicates periods with a fully-loaded CPU subssystem.|Periods of 100%

24、utilization are only a | concern when runqueue values exceeds the number of CPs on the server.'selectserver_name,to_char(start_date,'YY/MM/DD HH24') my_date, avg(running_queue) c2, avg(kbytes_page_in) c3, avg(kbytes_page_out) c4, avg(user_cpu) c5, avg(system_cpu) c6, avg(idle_cpu) c7 fro

25、mperfstat.stats$vmstat WHERE(user_cpu + system_cpu) > 70 and start_date > sysdate-&1 group by server_name, to_char(start_date,'YY/MM/DD HH24') ORDER BYserver_name, to_char(start_date,'YY/MM/DD HH24')J# vmstat_alert.ksh# # 可以将此shell加入cron中,每天7点运行# #!/bin/ksh# # 首先设定环境变量,根据实际

26、环境修改.# 接受一个参数输入,表示当前要报告的数据库SID# ORACLE_SID=$1export ORACLE_SIDORACLE_HOME='cat /var/opt/oracle/oratab|grep$ORACLE_SID:|cut -f2 -d':'、export ORACLE_HOMEPATH=$ORACLE_HOME/bin:$PATHexport PATHSCRIPT_PATH='echo oracle/vmstat'export SCRIPT_PATHsqlplus perfstat/perfstat<<!spool /

27、tmp/vmstat_$ORACLE_SID.lst$SCRIPT_PATH/vmstat_alert 7 4spool off;exit;!# # 检查vmstat_alert.sql的输出结果# 正常情况应该只包含下面2行# SQL> /export/home/oracle/vmstat/vmstat_alert 7# SQL> spool off;# 如果超过3行则表示有异常值,那么直接邮件给 DBA# check_stat='cat /tmp/vmstat_$ORACLE_SID.lst|wc -l'oracle_num='expr $check_s

28、tat'if $oracle_num -gt 3 thencat /tmp/vmstat_$ORACLE_SID.lst|mailx -s"System vmstat alert" kamussome_other_dbafi1. 创建crontab作业,每天 7点定时执行 vmstat_alert.ksh 脚本4$ crontab - l > oracle.cron$ echo ' 00 7 * * */export/home/oracle/vmstat/vmstat_alert.ksh kamusdb>> /export/home/ora

29、cle/vmstat/runalert.lst 2>&1' >>oracle.cron$ crontab oracle.cron2)每小时趋势报告# rpt_vmstat_hr.sqlREMDDREM该SQM于报告Oracle环境中每个服务器一天内小时平均的 CPUt用率REM接受一个参数,用于指定需要报告的日期,格式为 YYYYMMREMconnect perfstat/perfstat;set pages 9999;set feedback off;set verify off;column server_name heading 'server&

30、#39; format a10 column my_hour heading 'hour' format a10 column c2 heading runq format 9999 column c3 heading pg_in format 9999 column c4 heading pg_ot format 9999 column c5 heading usr format 9999 column c6 heading sys format 9999 column c7 heading idl format 9999 column c8 heading wt forma

31、t 9999select server_name,to_char(start_date, 'HH24') my_hour, avg(runing_queue) c2, avg(kbytes_page_in) c3, avg(kbytes_page_out) c4, avg(user_cpu + system_cpu) c5, avg(system_cpu) c6, avg(idle_cpu) c7 from stats$vmstatwhere trunc(start_date) = to_date(&1,'yyyymmdd') group BY serv

32、er_name,to_char(start_date, 'HH24') order by server_name,to_char(start_date, 'HH24');3)周趋势报告# rpt_vmstat_dy.sqlREMREM该SQL用于报告本周内Oracle环境中每个服务器的日平均 CPUt用率REMconnect perfstat/perfstat;set pages 9999;set feedback off;set verify off;column server_name heading 'server' format a10c

33、olumn my_day heading 'day' format a20column c2 heading runq format 9999column c3 heading pg_in format 9999column c4 heading pg_ot format 9999column c5 heading usr format 9999column c6 heading sys format 9999column c7 heading idl format 9999column c8 heading wt format 9999select server_name,t

34、o_char(start_date, 'day') my_day,avg(runing_queue) c2,avg(kbytes_page_in) c3,avg(kbytes_page_out) c4,avg(user_cpu + system_cpu) c5,avg(idle_cpu) c7from stats$vmstatwhere trunc(start_date) >= trunc(next_day(sysdate,'MONDAY') - 7and trunc(start_date) < trunc(next_day(sysdate, 'MONDAY') group BY server_name, to_char(start_date, 'day')order by server_name, to_char(start_date, 'day');好了,有了这些报告。我们就只需要编写一些脚本就可以实现自动的后台监控,当有 问题的时候再自动发送邮件给 DBA

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!