Welcome 微信登录

首页 / 数据库 / MySQL / 使用shell脚本查看数据库负载情况

平时在查看数据库的问题时,会有种迷茫的感觉,如果没有任何人反馈问题,基本上没有主动查找问题的方向,awr,ash都是在得知问题发生的时间段或者一些时间戳来从历史记录中查找相关的信息,个人整理了如下的脚本,能够显示当天的时间段内数据库的负载信息,能够很好掌握数据库的忙闲情况。
 
来看一个简单的例子,比如我要查看早上6点到中午12点数据库的负载情况脚本 showdbtime.sh 显示的是在制定的时间段内的 数据库负载的一个综合值。比如6点到7点个小时(60分钟),dbtime如果是120分钟,那么显示的负载就是200%Linux Shell参数替换 http://www.linuxidc.com/Linux/2013-06/85356.htmShell for参数 http://www.linuxidc.com/Linux/2013-07/87335.htmLinux/Unix Shell 参数传递到SQL脚本 http://www.linuxidc.com/Linux/2013-03/80568.htmShell脚本中参数传递方法介绍 http://www.linuxidc.com/Linux/2012-08/69155.htmShell脚本传递命令行参数 http://www.linuxidc.com/Linux/2012-01/52192.htm
 BEGIN_TIME                                      END_TIME                                  ELAPSED_TIME      DBTIME      WORKLOAD_PER
----------------------------------- ----------------------------------- ------------- ---------- --------------------
201 ** 21-MAY-14 06.07.33.893 PM    201 ** 21-MAY-14 07.07.33.893 PM            60          120            200%脚本内容如下:sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOFset linesize 200
col begin_time format a35
col end_time format a35
col elapsed_time format 99999999.999
col workload_per format a20
SELECT
begin_time,end_time,
elapsed_time,
dbtime,
trunc(dbtime/decode(elapsed_time,0,1,elapsed_time),2)*100||"%" workload_per
from

select
B.SNAP_ID||" ** "||B.END_INTERVAL_TIME begin_time,
E.SNAP_ID||" ** "||E.END_INTERVAL_TIME end_time,
EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 1440 +
EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)* 60 +
EXTRACT(MINUTE FROM E.END_INTERVAL_TIME -B.END_INTERVAL_TIME) +
EXTRACT(SECOND FROM E.END_INTERVAL_TIME -B.END_INTERVAL_TIME) / 60  elapsed_time,
db_time.dbtime
FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E,
                        (
                        SELECT b.snap_id begin_snap, e.snap_id end_snap ,
                        round((sum(e.value) -
                        sum(b.value)) / 1000000 /60,2) dbtime
                        FROM DBA_HIST_SYS_TIME_MODEL e, DBA_HIST_SYS_TIME_MODEL b,
                                        (
                                        select min(snap_id)  begin_snap,max(snap_id)  end_snap from DBA_HIST_SNAPSHOT where begin_interval_time > sysdate -1
                                        and EXTRACT(HOUR FROM END_INTERVAL_TIME) between $1 and $2
                                        ) temp_snap
                        WHERE
                        e.STAT_NAME = "DB time"
                        and b.snap_id=temp_snap.begin_snap
                        and e.snap_id =temp_snap.end_snap
                        AND b.STAT_NAME = "DB time"
                        group by e.snap_id,b.snap_id
                        ) db_time
WHERE b.begin_interval_time > sysdate -1
and EXTRACT(HOUR FROM e.END_INTERVAL_TIME) between $1  and $2
and b.snap_id=db_time.begin_snap
and e.snap_id=db_time.end_snap

/EOF
exit更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-06/102902p2.htm
  • 1
  • 2
  • 下一页
Oracle创建index 使用Online导致的问题使用awk来解析dump文件相关资讯      Shell脚本 
  • 在shell脚本中使用函数  (今 11:53)
  • 使用shell批量生成数据整合式迁移  (03月29日)
  • shell脚本:监控MySQL服务是否正常  (11/19/2015 20:05:43)
  • Shell脚本 入门 —— 符号篇  (08月16日)
  • shell脚本中报错dirname:无效选项  (12/21/2015 19:12:37)
  • shell脚本:MySQL启动简易脚本  (11/19/2015 19:59:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数


评论声明