** 作者简介: ** ** **
张乐奕,通常使用的网名为 kamus ,也曾用过 seraphim ,现在任职于北京某大型软件公司, Oracle 数据库 DBA ,主要负责证券行业的核心交易系统数据库管理及维护工作。
热切关注 Oracle 技术和相关操作系统技术,出没于各大数据库技术论坛,目前是中国最大的 Oracle 技术论坛 www.itpub.net 的数据库管理版版主。
我的邮件地址: [email protected]
我的 MSN: [email protected]
期望与各位朋友讨论 Oracle 相关技术。
本人所有文章,不经许可,不得转载。
** 目录 **
一、 前言 ... 4
二、 思路 ... 4
三、 vmstat 脚本及步骤 ... 4
1. 安装 statspack . 4
2. 创建 stats$vmstat 表 ... 4
3. 创建 vmstat 目录 ... 6
4. 创建 get_vmstat.ksh 脚本 ... 6
5. 创建 run_vmstat.ksh 脚本 ... 8
6. 创建 crontab 作业,定时执行 run_vmstat.ksh 脚本 ... 9
7. 分析数据 ... 9
异常报告 ... 9
每小时趋势报告 ... 13
周趋势报告 ... 14
长期趋势报告 ... 14
四、 使用 Excel 生成趋势图 ... 15
五、 参考资料 ... 15
一、 前言
作为 UNIX 系统中的 Oracle 数据库管理员,时刻监控操作系统的性能无疑是非常重要的,幸运的是 UNIX 系统提供了大量的监控命令,比如 vmstat, iostat, sar, top 等等,这些监控命令均以字符界面输出结果,再加上 UNIX 系统中 shell 的强大分析功能,这样我们只需要编写一些脚本就可以实现自动的后台监控,当有问题的时候再自动发送邮件给 DBA 。
其实相类似的一些监控脚本可能已经随处可见了,但是本文提到的一个新的思路,就是利用 Oracle 数据库的 statspack 空间来存储监控的结果,再利用数据库天生的检索优势,这样比以往靠 shell 分析甚或是人工分析生成的监控结果文件要更加轻松,智能,同时也能实现更持久和更广泛的监控。
本文大部分素材来源自 Donald K. Burleson 的 Oracle9i UNIX Administration Handbook ,但是对于脚本中的一些错误和不合理的地方作了修改,并且添加了一些功能,本文的测试环境全部基于 Sun Solaris 8 Sparc 64bit + Oracle 9.2.0 .5 。
本文第一版主要以监控内存消耗和 CPU 等待的 vmstat 命令为例,将陆续添加 iostat 等其它命令的监控脚本。
二、 思路
首先安装 statspack ,然后手工创建一个用于存储 vmstat 命令输出结果的表,再作一个 shell 定时执行 vmstat ,将结果全部插入数据库表中,最后就是通过 SQL 定时分析表中的数据,超过预先指定的门限值就告警。同时根据表中的数据,我们还能作出系统性能的趋势报告。
三、 vmstat 脚本及步骤
1. 安装 statspack
sqlplus “/ as sysdba”
SQL> @?/rdbms/admin/spcreate.sql
按照提示设定 perfstat 用户的密码之后,由于是 10g ,我选择了 SYSAUX 表空间作为 perfstat 用户的默认表空间,而没有另行创建表空间。
2. 创建 stats$vmstat 表
SQL> connect perfstat/perfstat
SQL> @create_vmstat_tab.sql
** # create_vmstat_tab.sql **
** drop ** 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 number ,
user_cpu number ,
system_cpu number ,
idle_cpu number ,
wait_cpu number
)
tablespace sysaux
storage ( initial 10 m
next 1 m
pctincrease 0 )
;
** comment ** on column stats$vmstat.start_date
is ' 监控时间 ' ;
comment on column stats$vmstat.duration
is ' 监控时长 ' ;
** comment ** on column stats$vmstat.server_name
is ' 服务器名称 ' ;
comment on column stats$vmstat.running_queue
is ' 执行队列 ' ;
** comment ** on column stats$vmstat.waiting_queue
is ' 等待队列 ' ;
** comment ** on column stats$vmstat.swap_in
is ' 每秒平均交换进 LWPs 数 ' ;
** comment ** on column stats$vmstat.swap_out
is ' 交换出进程数 ' ;
** comment ** on column stats$vmstat.kbytes_page_in
is ' 换页进字节 (K)' ;
comment on column stats$vmstat.kbytes_page_out
is ' 换页出字节 (K)' ;
** comment ** on column stats$vmstat.page_scan
is ' 换页守护进程扫描页数 ' ;
** comment ** on column stats$vmstat.user_cpu
is ' 用户操作占用的 CPU' ;
comment on column stats$vmstat.system_cpu
is ' 系统操作占用的 CPU' ;
** comment ** on column stats$vmstat.idle_cpu
is 'CPU 空闲率 ' ;
comment on column stats$vmstat.wait_cpu
is 'CPU 等待率 (AIX 独有 )' ;
3. 创建 vmstat 目录
在 oracle 用户主目录下创建用于存放所有相关脚本的 vmstat 目录。
$ cd
$ mkdir vmstat