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

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

0

积分

1

好友

3

主题
1#
发表于 2013-4-7 15:54:07 | 查看: 8906| 回复: 11
我在网上找到的查Estd Interconnect traffic (KB)的SQL:
select round(((SELECT VALUE
                 FROM DBA_HIST_PARAMETER
                WHERE SNAP_ID = &beg_snap
                  AND DBID = &DBID
                  AND INSTANCE_NUMBER = &INST_NUM
                  AND PARAMETER_NAME = 'db_block_size') *
             (SELECT sum(e.VALUE) - sum(b.value)
                 FROM DBA_HIST_SYSSTAT b, DBA_HIST_SYSSTAT e
                WHERE B.SNAP_ID = &beg_snap
                  AND E.SNAP_ID = &end_snap
                  AND B.DBID = &DBID
                  AND E.DBID = &DBID
                  AND B.INSTANCE_NUMBER = &INST_NUM
                  AND E.INSTANCE_NUMBER = &INST_NUM
                  and e.STAT_NAME in
                      ('gc cr blocks received', 'gc current blocks received',
                       'gc current blocks received',
                       'gc current blocks served')
                  and b.stat_name in
                      ('gc cr blocks received', 'gc current blocks received',
                       'gc current blocks received',
                       'gc current blocks served')) +
             200 *
             (SELECT sum(e.VALUE) - sum(b.value)
                 FROM DBA_HIST_SYSSTAT b, DBA_HIST_SYSSTAT e
                WHERE B.SNAP_ID = &beg_snap
                  AND E.SNAP_ID = &end_snap
                  AND B.DBID = &DBID
                  AND E.DBID = &DBID
                  AND B.INSTANCE_NUMBER = &INST_NUM
                  AND E.INSTANCE_NUMBER = &INST_NUM
                  and e.STAT_NAME in
                      ('gcs msgs received', 'ges msgs received',
                       'gcs messages sent', 'ges messages sent')
                  and b.stat_name in
                      ('gcs msgs received', 'ges msgs received',
                       'gcs messages sent', 'ges messages sent'))) / 1024 /
             (SELECT EXTRACT(DAY FROM
                             E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) *
                     86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME -
                                     B.END_INTERVAL_TIME) * 3600 +
                     EXTRACT(MINUTE FROM
                             E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 60 +
                     EXTRACT(SECOND FROM
                             E.END_INTERVAL_TIME - B.END_INTERVAL_TIME)
                FROM DBA_HIST_SNAPSHOT B, DBA_HIST_SNAPSHOT E
               WHERE B.SNAP_ID = &beg_snap
                 AND E.SNAP_ID = &end_snap
                 AND B.DBID = &DBID
                 AND E.DBID = &DBID
                 AND B.INSTANCE_NUMBER = &INST_NUM
                 AND E.INSTANCE_NUMBER = &INST_NUM
                 AND B.STARTUP_TIME = E.STARTUP_TIME
                 AND B.END_INTERVAL_TIME < E.END_INTERVAL_TIME),
             2)
  from dual;


但是AWR和查询结果出来的结果差很多,代码中为什么用200乘以?
不太明白Estd Interconnect traffic (KB)是怎么计算的?
2#
发表于 2013-4-7 16:12:51
因为:

Estd Interconnect traffic (KB): =(('gc cr blocks received'
         + 'gc current blocks received' + 'gc cr blocks served'
         + 'gc current blocks served') * Block size)
         + (('gcs messages sent' + 'ges messages sent' + 'gcs msgs received'
          + 'gcs msgs received')*200)/1024/Elapsed Time


回复 只看该作者 道具 举报

3#
发表于 2013-4-7 16:13:18
('gcs messages sent' + 'ges messages sent' + 'gcs msgs received'
          + 'gcs msgs received')*200

==> 这里平均估算 一条msgs为 200 bytes

回复 只看该作者 道具 举报

4#
发表于 2013-4-7 16:17:21
Maclean Liu(刘相兵 发表于 2013-4-7 16:12
因为:

Estd Interconnect traffic (KB): =(('gc cr blocks received'

那比较奇怪的是为什么AWR的结果和我手动执行该SQL的结果不一致呢?

回复 只看该作者 道具 举报

5#
发表于 2013-4-7 16:18:10
如果差的不多的话 ,一般无需纠结, 其实都是估算 算法上可能有点小区别

回复 只看该作者 道具 举报

6#
发表于 2013-4-7 16:21:07
Maclean Liu(刘相兵 发表于 2013-4-7 16:18
如果差的不多的话 ,一般无需纠结, 其实都是估算 算法上可能有点小区别

差一倍之多,AWR 的是26,360.55        ,手动执行的SQL是53,031.77

回复 只看该作者 道具 举报

7#
发表于 2013-4-7 16:52:31
Maclean Liu(刘相兵 发表于 2013-4-7 16:13
('gcs messages sent' + 'ges messages sent' + 'gcs msgs received'
          + 'gcs msgs received')*20 ...

明白啦多谢

回复 只看该作者 道具 举报

8#
发表于 2013-10-11 11:21:24
Maclean Liu(刘相兵 发表于 2013-4-7 16:12
因为:

Estd Interconnect traffic (KB): =(('gc cr blocks received'

请问刘大 gcs msgs received',                       'ges msgs received' 这两个指标 为何在dba_hist_sysstat中找不到?
但是awr报告中Global Enqueue Statistics的章节里却有,
请问这是通过计算出来的吗?

回复 只看该作者 道具 举报

9#
发表于 2013-10-11 11:22:49
楼主,你这sql语句中,
'gc current blocks received',              'gc current blocks received', 两个指标写重复了

回复 只看该作者 道具 举报

10#
发表于 2013-10-11 11:53:47
不了峰 发表于 2013-10-11 11:21
请问刘大 gcs msgs received',                       'ges msgs received' 这两个指标 为何在dba_hist_s ...

FYI

SELECT
DECODE(name,'gc cr blocks received','global cache blocks received','gc cr blocks served','global cache blocks served','gc current blocks received','global cache blocks received','gc current blocks served','global cache blocks served',name) AS name,
  SUM(VALUE) AS VALUE,
  TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') AS date_taken
  FROM gv$sysstat
  WHERE inst_id=1
  AND name IN ('gc cr blocks received','gc cr blocks served','gc current blocks received','gc current blocks served','gcs messages sent','ges messages sent')
  GROUP BY DECODE(name,'gc cr blocks received','global cache blocks received','gc cr blocks served','global cache blocks served','gc current blocks received','global cache blocks received','gc current blocks served','global cache blocks served',name)
  UNION
  SELECT name,VALUE,TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') AS date_taken
  FROM gv$dlm_misc
  WHERE name IN ('gcs msgs received','ges msgs received')
  AND inst_id=1;

回复 只看该作者 道具 举报

11#
发表于 2013-10-11 12:03:09
awr 里是使用了如下的查询   自己修改一下即可
  1. select e.instance_number                                            inst
  2.          , sum(case when e.stat_name in (''user rollbacks''
  3.                                        , ''user commits'')
  4.                     then (e.value - nvl(b.value,0)) else 0 end)         tran
  5.          , sum(case when e.stat_name in (''gc cr blocks received''
  6.                                        , ''gc current blocks received'')
  7.                     then (e.value - nvl(b.value,0)) else 0 end)         gcbr
  8.          , sum(case when e.stat_name in (''gc cr blocks served''
  9.                                        , ''gc current blocks served'')
  10.                     then (e.value - nvl(b.value,0)) else 0 end)         gcbs
  11.          , sum(case when e.stat_name = ''DBWR fusion writes''
  12.                     then (e.value - nvl(b.value,0)) else 0 end)         fw
  13.          , sum(case when e.stat_name in (''gcs messages sent''
  14.                                        , ''ges messages sent'')
  15.                     then (e.value - nvl(b.value,0)) else 0 end)         gcms
  16.      from dba_hist_sysstat b, dba_hist_sysstat e
  17.     where e.dbid = :dbid2
  18.       and b.dbid (+)= e.dbid
  19.       and b.snap_id (+)= :bid2
  20.       and e.snap_id = :eid2
  21.       and b.instance_number (+)= e.instance_number
  22.       and e.instance_number member of :inst_num2
  23.       and b.stat_id (+)= e.stat_id
  24.       and e.stat_name in (''user rollbacks''
  25.                         , ''user commits''
  26.                         , ''gc cr blocks received''
  27.                         , ''gc current blocks received''
  28.                         , ''gc cr blocks served''
  29.                         , ''gc current blocks served''
  30.                         , ''gcs messages sent''
  31.                         , ''ges messages sent''
  32.                         , ''DBWR fusion writes'')
  33.       group by e.instance_number),
  34.     dlm1 as
  35.     (select e.instance_number                                            inst
  36.           , sum(case when e.name in (''gcs msgs received''
  37.                                    , ''ges msgs received'')
  38.                      then (e.value - nvl(b.value,0)) else 0 end)         gcmr
  39.       from dba_hist_dlm_misc b, dba_hist_dlm_misc e
  40.      where e.dbid = :dbid
  41.        and b.dbid (+)= e.dbid
  42.        and b.snap_id (+)= :bid
  43.        and e.snap_id = :eid
  44.        and b.instance_number (+)= e.instance_number
  45.        and e.instance_number member of :inst_num
  46.        and b.statistic# (+)= e.statistic#
  47.        and e.name in (''gcs msgs received'', ''ges msgs received'')
  48.       group by e.instance_number
复制代码

回复 只看该作者 道具 举报

12#
发表于 2013-10-11 14:09:07
Maclean Liu(刘相兵 发表于 2013-10-11 12:03
awr 里是使用了如下的查询   自己修改一下即可

无敌呀~ 谢谢 !!

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-5-19 02:43 , Processed in 0.052653 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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