通过shell脚本同时监控多个数据库负载(r5笔记第14天)

在平时的工作中,需要管理的数据库还是很多的,因为远程和权限的关系,访问不了一些图形工具,有时候做检查的时候感觉都是一个串行的过程,这样检查针对性就不够强了,比如我们不知道在检查的这个时间范围内,数据库的负载是在什么范围内,如果有些库的负载极高,就需要格外注意,进行更有针对性的分析和检查,要不假设有20个库需要同时管理,没有重点,眉毛胡子一把抓还是很头疼的。查看数据库的负载还是一个不错的指标,我们可以根据这个基准来同时监控多个数据库,基本能够在一个大屏幕内显示就可以了。 自己专门写了脚本,发现效果还是不错的。这样数据库的负载就很清晰了,哪些库在忙需要重点关注,哪些库还基本处于休眠状态,可以不用太关注。

实现的脚本如下:

#getload.sh
function showsnap
{
sqlplus -s $1 <<EOF
break on db_name
set pages 50
set linesize  65
prompt
prompt Current Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid            dbid
     , d.name            db_name
     , i.instance_number inst_num
     , i.instance_name   inst_name
  from v\$database d,
       v\$instance i;
select
begin_snap
,end_snap
,snapdate
,round(((END_INTERVAL_TIME+0)-(BEGIN_INTERVAL_TIME+0 ))*24*60) dur_mins
,round((select round((sum(e.value) -
                        sum(b.value)) / 1000000 /60,2) dbtime
                        FROM DBA_HIST_SYS_TIME_MODEL e, DBA_HIST_SYS_TIME_MODEL b
                        WHERE
                         e.STAT_NAME = 'DB time'
                         and b.snap_id=begin_snap
                        and e.snap_id =end_snap
                        AND b.STAT_NAME = 'DB time'
                        group by e.snap_id,b.snap_id)) dbtime
from
(
select
      s.snap_id                                         begin_snap
     ,lead(s.snap_id ,1,s.snap_id ) over(order by s.end_interval_time ) end_snap
     , to_char(s.end_interval_time,'dd Mon YYYY HH24:mi') snapdate
     ,s.end_interval_time
     ,s.begin_interval_time
  from dba_hist_snapshot s
     , dba_hist_database_instance di
 where
  ( di.dbid,di.instance_number) in
 (select d.dbid            dbid
     , i.instance_number inst_num
  from v\$database d,
       v\$instance i)
   and di.dbid             = s.dbid
   and di.instance_number  = s.instance_number
   and di.startup_time     = s.startup_time
   and to_char(END_INTERVAL_TIME,'yyyymmdd')='$2'
   and EXTRACT(HOUR FROM END_INTERVAL_TIME) between $3-1 and $4+1
 order by db_name, instance_name, snap_id
 );
EOF
}


curr_hr=`date '+%H'`
pre_hr=`expr $curr_hr - 3` 
DATE=`date '+%Y%m%d'`
#echo $curr_hr   $pre_hr
SH_DB_SID=`echo "$1"|awk -F@ '{print $2}'|tr '[a-z]' '[A-Z]'`
showsnap $1  $DATE $pre_hr $curr_hr > tmp_${SH_DB_SID}_${DATE}_load

function format_rpt
{
awk '
BEGIN{
print "#################################################################"
printf "%-65s\n","DB workload  "
print "#################################################################"
}
{
printf "%-65s\n",$0
}' $1 > $2
}
format_rpt tmp_${SH_DB_SID}_${DATE}_load  ${SH_DB_SID}_${DATE}_load
rm tmp_${SH_DB_SID}_${DATE}_load
cat ${SH_DB_SID}_${DATE}_load

第二个脚本是集成这些输出结果的,使用动态地方式灵活指定监控的指标,

#showall.sh
#get db load input getload
#get db tsps input showtsps
act_type=$1
ksh ${act_type}.sh xxx/xxx@xxxx > tmp_b4 cat b7

比如我们有一个脚本getload.sh是专门监控数据库负载的,就可以运行脚本 showall.sh getload即可。如果要查看表空间使用情况,我们有脚本showtsps.sh,就运行脚本showall.sh showtsps即可。DB_CONN_STR=XXX/XXX

#get db load input getload
#get db tsps input showtsps
act_type=$1

#### DB01
SH_DB_SID=XXX
ksh ${act_type}.sh $DB_CONN_STR@$SH_DB_SID > a1

#### DB02
SH_DB_SID=XXX
ksh ${act_type}.sh $DB_CONN_STR@$SH_DB_SID > a2

#### DB03
SH_DB_SID=XXX
ksh ${act_type}.sh $DB_CONN_STR@$SH_DB_SID > a3

cat a1
paste a2 a3
paste a4 a5
paste a6  a7 
cat a8

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏blackheart的专栏

[认证授权] 6.Permission Based Access Control

那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后,我们的资源服务如何来验证这些token是否有权限来执行对资源的某一项操作...

234100
来自专栏杨建荣的学习笔记

VXFS启用异步IO导致的严重问题(r2笔记56天)

今天在做数据迁移的时候,碰到了一个严重的问题,数据加载完全hang住了,最后无奈回退了。 系统使用的vxfs文件系统,在生产升级前一个月的时候,做过一次小规模的...

34870
来自专栏FreeBuf

适用于渗透测试不同阶段的工具收集整理

该资源清单列表涵盖了一系列,适用于渗透测试不同阶段的开源/商业工具。如果你想为此列表添加贡献,欢迎你向我发送pull request。

1.1K00
来自专栏Hadoop实操

如何使用Sentry实现Hive/Impala的数据脱敏

本文主要描述如何使用Sentry实现数据的脱敏(masking of sensitive data elements),高大上的叫法也就是Data Maskin...

74360
来自专栏V站

PHP丨如何判断访客PC及PE端?(图片API配合使用)

手机双端比如自适应网站的站长来说还是比较有用的,使用它不但单纯的可以完美解决如何用PHP判断用户通过电脑端还是手机端访问网站,还可以实现一些实际的网站问题,比如...

24240
来自专栏Python小屋

Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码

本文代码来自于我自己使用开发的一套课堂管理系统,界面是用tkinter编写的,教师端界面如图所示: ? 为了防止学生关闭客户端而接收不到屏幕广播,大概3个月前为...

31250
来自专栏跨界架构师

C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)

  在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_c...

13210
来自专栏北京马哥教育

mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据...

32580
来自专栏数据和云

关于 Oracle 存储双活配置和实战

作者简介 ? 任小闯 云和恩墨交付技术顾问,6年以上数据库开发维护工作经历,Oracle 10g OCM,Oracle 11g OCP,曾就职于某互联网行业任数...

43580
来自专栏蜉蝣禅修之道

ubuntu下adsl拨号上网

41320

扫码关注云+社区

领取腾讯云代金券