• 10.3.4 direct path read and direct path read temp


    10.3.4 direct path read and direct path read temp
    
    当一个会话是从磁盘读buffer 直接到PGA(相对于buffer cache 在SGA), 它在这个事件上
    
    如果I/O 子系统不支持异步I/Os, 那么每个等待对应物理读请求。
    
    
    如果 I/O  子系统支持异步I/O, 然后处理是可以 重叠执行度请求和处理blocks 在PGA里。
    
    当处理尝试访问一个block 在PGA ,block 没有从磁盘读取。
    
    它然后执行一个等待请求 和更新统计信息对于这个事件。
    
    因此,等待的次数是和读请求的次数是不相同的
    
    
    检查 v$session_wait 参数列:
    
    
    p1:File_id 对于读的请求
    
    p2: 开始block_id 对于读请求
    
    p3: 读的块数
    
    
    10.3.4.1  原因
    
    这种情况发生在下面的情况:
    
    1. 排序是太大的 来放入到内存, 一些排序的数据是直接写出到磁盘。
    
    
    这个数据是随后被读回,使用直接读
    
    
    2.并行slaves 是用于扫描数据
    
    3.server 进程是处理buffer 快于系统可以返回的buffers, 这个表明一个过载的I/O系统
    
    
    10.3.4.2 Actions:
    
    
    file_id 显示如果 读是对于一个对象 在TEMP 表空间(在磁盘上排序) 或者全表扫描通过并发slaves.
    
    这个等待是最大的等待对于大的数据仓库。 然而,如果负载不是一个设计支持系统负载的,然后检查为什么这个状态是发生的
    
    
    10.3.4.2.1  磁盘排序
    
    检验 SQL语句当前通过session 经历等待来看 什么导致了排序。
    
    
    查询V$TEMPSEG_USAGE 来找到SQL语句 在进行排序。
    
    
    也从v$sesstat 查询统计信息对于session来决定排序的大小。
    
    
    查看如果它是可能降低排序通过优化SQL语句。
    
    如果WORKAREA_SIZE_POLICY设置为手动,然后考虑增加 SORT_AREA_SIZE 对于系统(如果排序不是太大的)
    
    或者 对于单个进程。
    
    
    10.3.4.2.2  Full Table Scans:
    
    
    如果表是定义一个高度的并行读, 然后设置可以倾斜的让优化器使用全表扫描。
    
    检查 object 被读取使用直接路径读取。
    
    
    如果 全表扫描是一个正确的工作部分,然后确认I/O 子系统是恰当的并发度。
    
    

  • 相关阅读:
    day02
    Hive_分区排序(Distribute By)
    flink添加水位线
    SparkSQL读写JDBC
    spark累加器及UDTF
    datax同步json中文乱码问题
    mysql踩过的坑
    spark算子
    spark分区计算方式
    git操作
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349937.html
Copyright © 2020-2023  润新知