重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 120|回复: 0
打印 上一主题 下一主题

[参数设置] 关闭Direct Path Read

[复制链接]
跳转到指定楼层
楼主
发表于 2024-11-15 14:14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Oracle Database 11g中有一个新特性,全表扫描可以通过直接路径读的方式来执行(Direct Path Read),这是一个合理的变化,如果全表扫描的大量数据读取是偶发性的,则直接路径读可以避免大量数据对于Buffer Cache的冲击。


当然对于小表来说,Oracle允许通过Buffer Cache来进行全表扫描,因为这可能更快,也对性能影响不大。
小表受到隐含参数:_small_table_threshold 影响。如果表大于 5 倍的小表限制,则自动会使用DPR替代FTS。
可以设置初始化参数: _serial_direct_read 来禁用串行直接路径读。


当然,Oracle通过一个内部的限制,来决定执行DPR的阈值。
可以通过设置10949事件屏蔽这个特性,返回到Oracle 11g之前的模式上:


alter session set events ‘10949 trace name context forever, level 1’;


还有一个参数 _very_large_object_threshold 用于设定(MB单位)使用DPR方式的上限,这个参数需要结合10949事件共同发挥作用。
10949 事件设置任何一个级别都将禁用DPR的方式执行FTS,但是仅限于小于 5 倍 BUFFER Cache的数据表,同时,如果一个表的大小大于 0.8 倍的 _very_large_object_threshold 设置,也会执行DPR。


这些限定的目标在于:
对于大表的全表扫描,必须通过Direct Path Read方式执行,以减少对于Buffer Cache的冲击和性能影响。
但是我们可以通过参数调整来决定执行DPR的上限和下限。


Event 10949 可以在线设置,但对现有session可能不会生效,新登录的会话会执行新的设置:


在实例级别修改参数设置:


ALTER SYSTEM SET EVENTS ‘10949 TRACE NAME CONTEXT FOREVER’;


增加参数到SPFILE中:


alter system set event=‘10949 TRACE NAME CONTEXT FOREVER’ scope=spfile;


对当前会话设置:


ALTER SESSION SET EVENTS ‘10949 TRACE NAME CONTEXT FOREVER’;
隐含参数"_serial_direct_read" 可以达到类似的限制,其默认值为AUTO,设置为NEVER时禁用 11g 的自动direct path read的特性。
该参数可以动态在实例或会话级别修改,而无需重启实例。


SQL> alter system set “_serial_direct_read”=auto;
SQL> alter system set “_serial_direct_read”=never;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-12-1 10:57 , Processed in 0.093829 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

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