Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

163

积分

0

好友

12

主题
1#
发表于 2013-5-20 17:17:05 | 查看: 7386| 回复: 5
终于终于有点搞清楚 oracle中有关OEM图中的AAS是怎么算的。了了心头一件事

感谢刘大给了AAS的概念 :)

代码如下:
创建三个视图 v_zyf_active_session, V_ZYF_ACTIVE_SESSION_ALL, V_ZYF_ACTIVE_SESSION_AAS
创建一个字典表: zyf_active_type

  1.    create or replace view v_zyf_active_session
  2.     --runs用sample_id相减得出
  3.     --其实简单点,可以取60秒.因为group by 是用trunc(sample_time, 'MI')
  4.     as
  5.     SELECT update_time
  6.           ,activity
  7.           ,COUNT(*) num   --db_time ,
  8.           ,max(runs) runs  --采样的时间间隔(秒)
  9.       FROM (SELECT trunc(sample_time, 'MI') update_time
  10.                   ,nvl(wait_class, 'CPU') activity
  11.                   ,(last_value(sample_id) over(PARTITION BY trunc(sample_time, 'MI') ORDER BY sample_id rows BETWEEN unbounded preceding AND unbounded following) -
  12.                   first_value(sample_id) over(PARTITION BY trunc(sample_time, 'MI') ORDER BY sample_id rows BETWEEN unbounded preceding AND unbounded following)) runs
  13.               FROM gv$active_session_history
  14.              WHERE trunc(sample_time, 'MI') > SYSDATE - 4 / 24
  15.                AND inst_id = 1)
  16.     GROUP BY update_time
  17.              ,activity
  18.     ORDER BY 1
  19.              ,2
  20.     /            
  21.                
  22.     创建活动类型字典表
  23.     SELECT * FROM zyf_active_type;           
  24.     数据如下:
  25.                
  26.     NAME    ORDERID
  27.     CPU                  1
  28.     Scheduler            2
  29.     User I/O            3
  30.     System I/O          4
  31.     Concurrency          5
  32.     Application          6
  33.     Commit            7
  34.     Configuration      8
  35.     Administrative    9
  36.     Network              10
  37.     Cluster              11
  38.     Other                12

  39.     创建视图:
  40.     功能:把v_zyf_active_session未统计到的活动类型,补上0值。
  41.           因为geom_area如果在某个时间点发现没有某一类型的值时,会引用上一个类型的值。图象区间会产生空白
  42.           orderid 用来在geom_area中指定排序

  43.     CREATE OR REPLACE VIEW V_ZYF_ACTIVE_SESSION_ALL AS
  44.     SELECT a."UPDATE_TIME",a."ACTIVITY",a."NUM"
  45.           ,b.orderid  
  46.       FROM (SELECT update_time
  47.                   ,NAME activity
  48.                   ,SUM(num_2) num
  49.               FROM (SELECT update_time
  50.                           ,NAME
  51.                           ,decode(activity, NAME, num, 0) num_2
  52.                           ,orderid
  53.                       FROM (SELECT *
  54.                               FROM v_zyf_active_session
  55.                                   ,zyf_active_type))
  56.              GROUP BY update_time
  57.                      ,NAME) a
  58.           ,zyf_active_type b
  59.     WHERE a.activity = b.name
  60.     ORDER BY 1
  61.              ,orderid;
  62.     /            

  63.     CREATE OR REPLACE VIEW V_ZYF_ACTIVE_SESSION_AAS AS
  64.     SELECT a."UPDATE_TIME"
  65.            ,a."ACTIVITY"
  66.            ,round(a."NUM" /runs,2) AVG_NUM  
  67.            ,orderid
  68.       FROM (SELECT update_time
  69.                   ,NAME activity
  70.                   ,SUM(num_2) num
  71.                   ,MAX(runs) runs
  72.               FROM (SELECT update_time
  73.                           ,NAME
  74.                           ,decode(activity, NAME, num, 0) num_2
  75.                           ,runs
  76.                       FROM (SELECT *
  77.                               FROM v_zyf_active_session
  78.                                   ,zyf_active_type))
  79.              GROUP BY update_time
  80.                      ,NAME) a
  81.           ,zyf_active_type b
  82.     WHERE a.activity = b.name
  83.     ORDER BY 1
  84.              ,orderid  
  85.     /
复制代码
用R软件的ggplot2包:画出两个图,一个是所有活动会话的activity的等待次数(也可以认为是db_time)
  另一个是AAS  average active sessions
的代码如下
  1.     library(ggplot2)
  2.     library(RODBC)
  3.     library(scales) # to access breaks/formatting functions

  4.     channel <- odbcConnect("***",uid="username",pwd="passwd")


  5.     tb_active_session <- sqlQuery(channel,"select * from v_zyf_active_session_all")
  6.     tb_active_session_AAS <- sqlQuery(channel,"select * from V_ZYF_ACTIVE_SESSION_AAS")


  7.     #所有活动会话数的活动类型的次数展现
  8.     #自定义调整图例顺序,
  9.     tb_active_session$ACTIVITY=factor(tb_active_session$ACTIVITY,levels=c("Other","Cluster","Network","Administrative","Configuration"
  10.                                                                           ,"Commit","Application","Concurrency","System I/O","User I/O","Scheduler","CPU"))

  11.     g<-ggplot(tb_active_session, aes(x=UPDATE_TIME,y=NUM))+ ggtitle("ASH one hour  ALL active sessions ACTIVITY")

  12.     g+geom_area(aes(fill=ACTIVITY),stat="identity"
  13.                 ,position = "stack",rm=T ) + scale_fill_manual(values=c("#FF6699", "#CCCC99", "#999966","#666666"
  14.                  , "#663300", "#CC6600", "#CC3300", "#FF0000", "#0099FF", "#0033FF", "#99FF99","#00CC00")) + scale_x_datetime(breaks = date_breaks("10 min"), labels = date_format("%H:%M"))


  15.     #AAS 展现
  16.     #自定义调整图例顺序,
  17.     tb_active_session_AAS$ACTIVITY=factor(tb_active_session_AAS$ACTIVITY,levels=c("Other","Cluster","Network","Administrative","Configuration"
  18.                                                                           ,"Commit","Application","Concurrency","System I/O","User I/O","Scheduler","CPU"))

  19.     gAAS<-ggplot(tb_active_session_AAS, aes(x=UPDATE_TIME,y=AVG_NUM))+ ggtitle("ASH one hour AAS average active sessions")

  20.     gAAS+geom_area(aes(fill=ACTIVITY),stat="identity"
  21.                 ,position = "stack",rm=T ) + scale_fill_manual(values=c("#FF6699", "#CCCC99", "#999966","#666666"
  22.                  , "#663300", "#CC6600", "#CC3300", "#FF0000", "#0099FF", "#0033FF", "#99FF99","#00CC00")) + scale_x_datetime(breaks = date_breaks("10 min"), labels = date_format("%H:%M"))
复制代码
AAS_2.png
all_active_session_ACTIVITY.png

发现跟Oracle的oem展现的大体一致 :)

在学习aas过程中发现老外开发的一个利器
http://www.perfvision.com/ashmon.php


have fun ~
已有 1 人评分威望 理由
Maclean Liu(刘相兵 + 18 很给力!

总评分: 威望 + 18   查看全部评分

2#
发表于 2013-5-21 00:11:26
Really Good Script!! Nice!

回复 只看该作者 道具 举报

3#
发表于 2013-5-21 08:39:03
Maclean Liu(刘相兵 发表于 2013-5-21 00:11
Really Good Script!! Nice!

THANKS~            

回复 只看该作者 道具 举报

4#
发表于 2013-6-24 23:51:21
虽然没帮到什么, 不过 支持下。 好东西。

回复 只看该作者 道具 举报

5#
发表于 2013-6-28 15:26:02
很不错 学习一下

回复 只看该作者 道具 举报

6#
发表于 2013-7-1 11:27:42
支持下,也顺便学习学习

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-29 15:20 , Processed in 0.052486 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569