Bo's Oracle Station

查看: 6635|回复: 7

一份AWR报告请教

[复制链接]

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
发表于 2017-8-8 15:25:17 | 显示全部楼层 |阅读模式
本帖最后由 lujiaguai 于 2017-8-8 15:25 编辑

唐sir:
   前几天周末收到一封来自Cloud Control的告警,关于操作系统磁盘资源的:“Message=DiskDevice sda is 97.186% busy.
  大概20分钟后,这个告警clear了
  事后查询了这个时间段的AWR报告,发现是一个小时内写了47G多的归档日志,加上95G的在线日志,查看日志生成的时间,大部分都集中发生在告警的时段。
  产生日志的原因,在AWR中看到几个TOP语句,都是系统本身在做dml,详见附件的报告。
  看到这样一条DDL语句执行了6次: create table tt36208
  那么那些系统的dml,大概就是由于这个原因吗?
  但是很奇怪,建这张表的语句,看不到 as select **  ; top sql中也看不到大量的 insert into tt36208或者update
  那么在短时间内出现这么多redo的原因,就是部分系统DML造成的,比如top sql中看到的部分如下:
delete from access$ where d_obj#=:1
delete from dependency$ where d_obj#=:1
insert into access$(d_obj#, order#, columns, types) values (:1, :2, :3, :4)
delete from cdef$ where obj#=:1
delete from col$ where obj#=:1
begin prvt_hdm.auto_execute( :dbid, :inst_num , :end_snap_id ); end;
insert into sys.wri$_optstat_histhead_history (obj#, intcol#, flags, expression, colname, savtime) values (:1, :2, :3, :4, :5, :6)
insert into dependency$(d_obj#, d_timestamp, order#, p_obj#, p_timestamp, property, d_attrs)values (:1, :2, :3, :4, :5, :6, :7)
delete from idl_ub2$ where obj#=:1 and part=:2



  请教唐sir,这些dml跟6次create table tt36208有关吗?又或是其他什么原因导致的(看不出其他哪里有异常),不解。。。。 awr_report_27841_27842.rar (49.79 KB, 下载次数: 961)
回复

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-8-11 11:08:51 | 显示全部楼层
这个表应该是全局临时表,默认如此之大的“enq: RO - fast object“是由于create global temporary table ....
on commit delete rows时,极大的数据量引起的。

估计iostat  -d -x -k 1 5磁盘iostat的结果显示%util应该在90%以上。

解决办法:
增大db_writer_process参数,增大log_buffer,增加几组日志。
iostat  -d -x -k 1 5
磁盘iostat的结果显示%util平均不要超过60%;

另外db_cache_size设置大一些。
回复 支持 反对

使用道具 举报

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
 楼主| 发表于 2017-8-11 16:01:35 | 显示全部楼层
create global temporary table  tt36208 吗?
可是awr里看到的就是create table tt36208  看不出是临时表

或者跟create global temporary table  tt36208 无关
从:enq: RO - fast object reuse  enq: KO - fast object checkpoint
这2个都是发生在PGA里的对吗? 每次从pga做变更都要做一致性检查,从这里倒推出来由于全局临时表造成的,可以这样理解吗?
这个库就是经常会用到临时表写数据,每个月总有个别时间会造成类似的情况,要不要加日志和增加dbwr进程,我在观察一下吧。

由此想到一个data guard的问题,11g handbook里说11g DG 的 redo apply基准测试,在承担OLTP工作负载时速度可以达到 37MB/S ,直接路径加载的情况下速度高达112MB/S 。不理解这要表达的意思
37MB/S指的是redo 生成的速率,是不是说理论上:主库的日志生成速度在37MB/S以下时,如果传输本身没有滞后,那么备库的redo apply也不会滞后
那么直接路径加载的112MB/S 指的是什么? 是不是说在备库在处理间隔的时候,从SRL或者SRL的归档内追主库时,redo apply的速度。

另外:
这个库内存很小,一些表超过阈值参数 “_small_table_threshold” 就会导致直接路径的物理读:db file sequential read;direct path read
当时那条语句反复执行几万次,总的读取数也很大,一个小时可以达到 Direct Reads 933.4G
但是这个情况下,因为都是读取同一张表,我发现物理存储本身没有告警,大多数都落在存储的缓存上命中了
oracle ASM好像没有提高缓存的概念,如果这个库是用服务器本地磁盘,不组阵列,直接绑定ASM磁盘来做 normal冗余,遇到这样的情况是不是就没有缓存可以命中,所有的IO会直接落在物理磁盘上?
那么如果我用了硬件存储阵列,再划LUN出来做ASM的话,加入是normal冗余度,那磁盘空间浪费的太厉害了,阵列上看了一刀,ASM normal冗余再砍一刀?
我的理解是,最佳的用法是不是ASM挂着2个或更多的物理存储阵列,把ASM磁盘分布都不通的物理存储阵列上,做数据冗余。
如果就只有一个存储,那么做normal冗余度还有意义吗?空间浪费太厉害了
我记得OCP考题里面有一道,大概意思是说如果物理磁盘已经做了raid,asm就可以不做冗余度。是不是正确的理解?
如果只有一个存储,不做normal的话,做external有意义吗?物理存储在组raid的时候就已经做过条带化,颗粒化了,那么在物理存储上在做一次条带化,颗粒化的asm,是否有意义?
回复 支持 反对

使用道具 举报

2

主题

15

帖子

118

积分

版主

Rank: 7Rank: 7Rank: 7

积分
118
发表于 2017-9-7 12:03:13 | 显示全部楼层
lujiaguai 发表于 2017-8-11 16:01
create global temporary table  tt36208 吗?
可是awr里看到的就是create table tt36208  看不出是临时表 ...

我目前待过的地方。。。数据盘目前都是raid后做external冗余度,当然你要不要做normal完全看你的安全等级了。。。。。                 但是回过头来说如果存储控制器坏的话。。。normal也没啥用不是吗?
回复 支持 反对

使用道具 举报

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
 楼主| 发表于 2017-9-7 15:51:20 | 显示全部楼层
xiaoyu 发表于 2017-9-7 12:03
我目前待过的地方。。。数据盘目前都是raid后做external冗余度,当然你要不要做normal完全看你的安全等级 ...

还是有差别的,如果在有硬件raid的情况下,做external冗余度。
那么如果这部分数据要迁移存储怎么办?
normal冗余度的话,如果要把数据迁移到新的存储,就非常容易,只是磁盘空间浪费的厉害。
OCP考题中一题涉及到这个,大致意思也是说如果硬件有raid,那么可以用external冗余度。

其实还有另外要给问题,normal冗余度可以跨广域网专线,异地部署存储。

应该说,如果只有一个硬件存储,已经在做了raid,也不考虑动态迁移数据的话,用external就是对的。
存储如果坏了,那完事皆休,只能从异地的备份里重新还原出来,停机时间会很长,哪怕是rac也受不了这样单一的存储挂掉。

如果后端是2个硬件存储,本地的也好,异地的也好,还是要考虑做normal把数据分布在2个存储上。

其实normal在迁移数据上,还是很有优势的,我学习不久,就做了一次。
当时的情况就是有一个低端的存储先上线,高端的后上线。
装数据库的时候只有低端的存储,当时要求装好以后迁移存储不能停机。
就在低端存储上建normal冗余度,然后高端存储到位以后直接重平衡过去就可以了。


回复 支持 反对

使用道具 举报

2

主题

15

帖子

118

积分

版主

Rank: 7Rank: 7Rank: 7

积分
118
发表于 2017-9-7 20:00:13 | 显示全部楼层
lujiaguai 发表于 2017-9-7 15:51
还是有差别的,如果在有硬件raid的情况下,做external冗余度。
那么如果这部分数据要迁移存储怎么办?
...

66666想到很多。不过异地存储做normal。。。考虑延迟的话。。。估计得很高的成本啊带来的可能是很低的性能。。不如用OGG异地传输带宽小很多。
回复 支持 反对

使用道具 举报

81

主题

181

帖子

781

积分

高级会员

Rank: 4

积分
781
 楼主| 发表于 2017-9-13 14:54:29 | 显示全部楼层
xiaoyu 发表于 2017-9-7 20:00
66666想到很多。不过异地存储做normal。。。考虑延迟的话。。。估计得很高的成本啊带来的可能是很低的性 ...

用dataguard吧,感觉靠谱的多,全库同步理论上开销也比OGG小,关键是可以实施监控
OGG没法实时监控状态,再说OGG有点像DATA GUARD的逻辑备库
遇到很多库里面主键约束等不是做的很好的,会导致一大串不受支持的对象,看的胆战心惊,这些对象实际都是不受保护的。
但是OGG的配置看上去趋势比DATA guard简单一些,我觉得主要还是用在无法使用DATA guard的情况下,比如跨平台了,跨数据库版本之类的。
回复 支持 反对

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-9-15 10:38:18 | 显示全部楼层
lujiaguai 发表于 2017-9-13 14:54
用dataguard吧,感觉靠谱的多,全库同步理论上开销也比OGG小,关键是可以实施监控
OGG没法实时监控状态 ...

同意
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-4-19 17:14 , Processed in 0.041787 second(s), 27 queries .

快速回复 返回顶部 返回列表