zoukankan      html  css  js  c++  java
  • 关闭Direct Path Read

    关闭Direct Path Read

    鸿惊九天2020-03-30
    1078

    在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;

  • 相关阅读:
    POJ 1860 Currency Exchange (Bellman ford)
    POJ 1502 MPI Maelstrom (最短路)
    2015 Multi-University Training Contest 2 1006(DFS)
    HDU 1495 非常可乐(枚举+DFS)
    HDU 5289 Assignment(单调队列)
    ACDream 1734 Can you make a water problem?(贪心)
    ACDream 1735 输油管道
    ACDream 1726 A Math game (折半查找)
    CSU 1602 Needle Throwing Game (投针问题)
    CSU 1604 SunnyPig (BFS)
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15406926.html
Copyright © 2011-2022 走看看