direct path read被触发的条件

在jonathon lewis里的博客里,找到了一个链接,证明了满足direct path read的阀值,他的博客里还提到了11GR2的变化。第一篇证明阀值的思路非常好,非常值得阅读,可能需要翻墙才能看。

http://afatkulin.blogspot.com/2009/01/11g-adaptive-direct-path-reads-what-is.html

http://afatkulin.blogspot.com/2012/07/serial-direct-path-reads-in-11gr2-and.html

 

 

11GR1

11GR2

备注

块阀值

_small_table_threshold*5

_small_table_threshold

统计信息里记录的表的block数目(11GR2)超过此阀值。

Block cache阀值

50%

50%

少于此阀值

脏块阀值

25%

25%

少于此阀值

特别注意第一个阀值,参照的是统计信息里的表的block数,而不是dba_segments里的。如果你的统计信息不准确,很可能导致扫描路径变为direct path read(统计信息值过大),或者怎么都走不上direct path read(统计信息值过小)

设置这三个阀值非常的合理:

第一个阀值:表大小,太小的表从direct path read中的获益太小

第二个阀值:表在内存里的cache率,如果cache率很高,那么还是走传统路径更快

第三个阀值:脏块阀值,由于direct path read需要出发一个段的检查点,因此脏块太多,刷新脏块可能会导致IO繁忙

不过悲剧的是,即使你了解了能有效控制direct path read的这些阀值,但是大多数时候,你还是显得很无助,因为如果你的生产环境的某张表不满足其中某个条件,你都不太可能去更改这些阀值(你敢修改_small_table_threshold?你敢alter system flush buffer_cache?

 

PS:我粗略的做了实验,ORACLE似乎对脏块的比例比较敏感,能立即修正执行计划,但是对block cache的变化不敏感,有时候表的大部分数据已经被cache了,但是执行计划依然会选择走dpr。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22034023/viewspace-762470/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22034023/viewspace-762470/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值