用Oracle存储来分析Unix系统的性能
2007-05-12 12:27:31 来源:WEB开发网核心提示: 6. 创建crontab作业,定时执行run_vmstat.ksh脚本该作业每半小时运行一次,用Oracle存储来分析Unix系统的性能(5),$ crontab –l > oracle.cron$ echo ’00,30 * * * * /export/ho
6. 创建crontab作业,定时执行run_vmstat.ksh脚本
该作业每半小时运行一次。
$ crontab –l > oracle.cron
$ echo ’00,30 * * * * /export/home/oracle/vmstat/run_vmstat.ksh
>> /export/home/oracle/vmstat/run.lst 2>&1’ >> oracle.cron
$ crontab oracle.cron
7. 分析数据
至此已经完成了定时运行vmstat和在数据库中存储vmstat结果的步骤。自然,仅仅是搜集了统计信息是远远不够的,下面我们要分析搜集来的信息,产生操作系统的性能报告。
将报告分为以下几类,分别用脚本实现。
异常报告:显示超过了门限值的时间段(vmstat_alert.ksh + vmstat_alert.sql)。
每小时趋势报告:显示一天内每小时的系统平均利用情况(rpt_vmstat_hr.sql)。
周趋势报告:显示每天的系统平均利用情况(rpt_vmstat_dy.sql)。
1) 异常报告
# vmstat_alert.sql
REM ----------------------------------------
REM 该SQL用于报告Oracle环境中每个服务器的异常情况。
REM 根据get_vmstat.ksh脚本得到的信息,报告每个小时的平均值。
REM DBA发现异常时间段,则可以深入检查每5分钟的详细数据。
REM 在这个脚本中接受一个参数,表示需要报告的时间跨度。
REM 对于runing queue的门限值应该设置为CPU数,
REM 表示如果出现大量等待执行的任务就报警,这通常表示CPU负载过重。
REM 对于page scan(sr)的门限值设置为1,
REM 表示只要出现page daemon扫描页就报警,这通常表示内存不足。
REM 对于CPU利用率,设置为70,表示超过70%以上的利用率才报警。
REM 比如运行vmstat_alert 7
REM 表示输出当前日期之前7天之内的执行队列大于4,
REM sr大于1,CPU利用率超过70%的按照小时统计的报告。
REM ----------------------------------------
set lines 80;
set pages 999;
set feedback off;
set verify off;
column my_date heading 'date hour' format a20
column c2 heading waitq 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 9999
ttitle 'run queue > CPUs|May indicate an overloaded CPU|
When runqueue exceeds 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
from
perfstat.stats$vmstat
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 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
from
perfstat.stats$vmstat
WHERE
page_scan > 1
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 'user+system CPU > 70%|Indicates periods
with a fully-loaded CPU subssystem.|Periods of
100% utilization are only a | concern when runqueue
values exceeds the number of CPs on the server.';
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
from
perfstat.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 BY
server_name,
to_char(start_date,'YY/MM/DD HH24')
;
# vmstat_alert.ksh
#----------------------------------------
# 可以将此shell加入cron中,每天7点运行
#----------------------------------------
#!/bin/ksh
#----------------------------------------
# 首先设定环境变量,根据实际环境修改. . . .
# 接受一个参数输入,表示当前要报告的数据库SID
#----------------------------------------
ORACLE_SID=$1
export ORACLE_SID
ORACLE_HOME=`cat /var/opt/oracle/oratab|grep $ORACLE_SID:|cut -f2 -d':'`
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH
export PATH
SCRIPT_PATH=`echo ~oracle/vmstat`
export SCRIPT_PATH
sqlplus perfstat/perfstat<<!
spool /tmp/vmstat_$ORACLE_SID.lst
@$SCRIPT_PATH/vmstat_alert 7 4
spool 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_stat`
if [ $oracle_num -gt 3 ]
then
cat /tmp/vmstat_$ORACLE_SID.lst|mailx -s
"System vmstat alert" kamus@itpub.net
some_other_dba@mail.address.net
fi
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接