原创 Oracle 作者:jeanron100 时间:2014-05-23 08:56:26  8912  2

平时在查看数据库的问题时,会有种迷茫的感觉,如果没有任何人反馈问题,基本上没有主动查找问题的方向,awr,ash都是在得知问题发生的时间段或者一些时间戳来从历史记录中查找相关的信息,个人整理了如下的脚本,能够显示当天的时间段内数据库的负载信息,能够很好掌握数据库的忙闲情况。

来看一个简单的例子,比如我要查看早上6点到中午12点数据库的负载情况

脚本 showdbtime.sh 显示的是在制定的时间段内的 数据库负载的一个综合值。比如6点到7点个小时(60分钟),dbtime如果是120分钟,那么显示的负载就是200%

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 <

set 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

在此基础上如果要查看每个小时的数据库负载情况,可以略做一些改进。

脚本showdbtimerpt.sh

sqlplus -s $DB_CONN_STR@$SH_DB_SID < prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
set head off 
set pages0 
set feedback off 
set serveroutput on 
spool showdbtimerpt_tmp.sh 
begin 
for i in $1..$2 loop 
dbms_output.put_line('ksh showdbtime  '||i||' '||(i+1)); 
end loop; 
end; 

spool off;

EOF 
clear 
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
echo BEGIN_TIME------------------------- END_TIME--------------------------- ELAPSED_TIME- BTIME----- WORKLOAD_PER-------- 
echo ----------------------------------- ----------------------------------- ------------- ---------- -------------------- 
ksh showdbtimerpt_tmp.sh 
rm showdbtimerpt_tmp.sh 
exit

运行结果类似下面的样子。

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%

201 ** 21-MAY-14 07.07.33.893 PM    201 ** 21-MAY-14 08.07.33.893 PM             60          150            250%

201 ** 21-MAY-14 08.07.33.893 PM    201 ** 21-MAY-14 09.07.33.893 PM             60          240            400%

201 ** 21-MAY-14 09.07.33.893 PM    201 ** 21-MAY-14 10.07.33.893 PM             60          60              100%

201 ** 21-MAY-14 10.07.33.893 PM    201 ** 21-MAY-14 11.07.33.893 PM             60          120            200%

可以生成每个时间段的负载报表,这样就一目了然了。可以有针对性的根据负载进行相关的性能抓取。

使用shell脚本查看数据库负载情况的更多相关文章

  1. shell脚本监控系统负载、CPU和内存使用情况

    hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...

  2. Shell脚本查看linux系统性能瓶颈(转)

    Shell脚本查看linux系统性能瓶颈(转自:http://blog.51cto.com/lizhenliang/1687612) [root@test ~]# cat show_sys_info. ...

  3. Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

    Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要 ...

  4. linux下如何查看多核负载情况【转】

    最近服务器负载超荷,CPU的单个荷使用率到了百分之八九十,内存占用超大,让给检测性能,不给源码,只给一个+ -g编译生成的执行文件,Fuck!!! 1, 在linux下载了valgrind,使用val ...

  5. 使用shell脚本生成数据库markdown文档

    学习shell脚本编程的一次实践,通过shell脚本生成数据库的markdown文档,代码如下: HOST=xxxxxx PORT=xxxx USER="xxxxx" PASSWO ...

  6. Shell脚本备份数据库

    使用crontab 定时备份数据库 1. 编辑crontab 规则,定时执行脚本 2. 在my.cnf 文件中加 [mysqldump] user=root password=密码 3.编写shell ...

  7. Centos上通过shell脚本实现数据库备份和还原

    最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...

  8. 查看硬盘负载情况:iostat命令

    Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同 ...

  9. Shell 脚本操作数据库实战

    安装mariadb 数据库  (默认没有密码,直接mysql即可进入数据库管理控制台) yum install mariadb mariadb-server mariadb-libs -y syste ...

随机推荐

  1. python输出日志到文件(每天一个日志)

    import logging from logging.handlers import TimedRotatingFileHandler logger = logging.getLogger('sim ...

  2. Python3 类与对象之王者荣耀对战小游戏

    王者荣耀对战小游戏 # 定义英雄: 亚瑟 class Arthur: hero_type = 'Tank' def __init__(self, attack_value=164, armor=98, ...

  3. Python的小整数池

    此处经常会作为面试题!!! 小整数池目的:节省内存,提高执行效率 需要注意的是:Python实现int的时候有个小整数池.为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器 ...

  4. CreateDefaultBuilder方法都做了什么?

    当我们创建好一个新的ASP.NET Core Web应用时,系统会使用CreateDefaultBuilder方法,这个方法完成了以下操作: use Kestrel as the web server ...

  5. .NET Core依赖注入集成Dynamic Proxy

    在<Castle DynamicProxy基本用法>中介绍了如何将DP与Autofac集成使用,而 .NET Core有自己的依赖注入容器,在不依赖第三方容器的基础上,如何实现动态代理就成 ...

  6. Python基础-day02-1

    判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?-- 程序 ...

  7. 在WPF中开启摄像头扫描二维码(Media+Zxing)

    近两天项目中需要添加一个功能,是根据摄像头来读取二维码信息,然后根据读出来的信息来和数据库中进行对比显示数据. 选择技术Zxing.WPFMediaKit.基本的原理就是让WPFmediaKit来对摄 ...

  8. 浅析 Java 与 C++ 的垃圾回收机制

        Java老师在期末复习大纲上出了一道关于JVM垃圾回收机制的题目,想要我们简述一下JVM垃圾回收机制,与老师交流后,大概老师是希望通过与其他语言在垃圾回收对比,介绍一下Java在这方面的特点和 ...

  9. ERP系统到底能做什么?

    ERP的定义:在先进的企业管理思想的基础上,应用信息技术实现对整个企业资源的一体化管理. 关键词:信息技术 先进的管理思想 企业资源一体化: 那么,ERP系统在企业日常经营管理中到底能做什么? 1.在 ...

  10. MySQL数据库Group by分组之后再统计数目Count(*)与不分组直接统计数目的区别

    简述问题“统计最新时刻处于某一状态的设备的数量” 1. 首先子查询结果,可以看到每个设备最新的状态信息 2.1 在子查询的基础上,对设备状态进行分组,进行统计每个状态的设备数量 2.1.1 可以看到处 ...