【Oracle性能诊断艺术】学习笔记----第二章:关键概念

    xiaoxiao2021-03-25  90

    2.1选择性和基数 cardinality = selectivity * num_rows   2.2.0 概念 #游标:    指向私有sql区、及其关联的共享sql区的句柄 #私有sql区     存储绑定变量、查询执行状态信息等数据。属于具体回话 #用户全局区     存储私有sql区的回话的内存 #父游标    存储与游标关联的sql语句 #子游标    执行环境、执行计划有关的元素。 #共享sql区    可用于多个会话,存储在库缓存中 2.2游标的生命周期 #打开游标:  系统会在与这个会话相关的服务器进程的服务器端私有内存中为这个游标分配一个内存结构,也就是用户全局区(User Global Area,UGA)。注意,SQL语句与游标还没有关联。   在会话的UGA中分配用于打开游标的私有sql区、分配一个引用私有sql区的客户端句柄。此时 sql语句还没有与游标关联 #解析游标:  有一条SQL语句与这个游标关联。解析后内容(包括执行计划)会被加载到共享池的库缓存(library cache)中。UGA中的结构会被更新,以保存指向这个共享游标在库缓存中的位置。   #定义输出变量 #绑定输入变量 #执行游标 #获取游标 #关闭游标   与句柄和私有sql区有关的资源被释放。库缓存中的共享sql区没变化。   2.3解析的过程 #包含VPD的约束条件----如果系统中使用了虚拟私有数据库(VPD,以前也称为行级安全控制,row-level security),并且被解析的SQL语句中引用的某张表激活了它的话,安全策略生成的约束条件就会被添加到WHERE子句中。 #语法、语义以及访问权限检查 #将父游标保存到库缓存------与父游标有关的关键信息是这个SQL语句的文本。  v$sqlarea 父游标由(address,hash_value)或(sql_id)唯一识别。 #逻辑优化 #物理优化 #将子游标保存到库缓存--------与子游标有关的关键内容是执行计划与执行环境。  v$sql 子游标由(address,hash_value,child_number)或(sql_id,child_number)唯一识别。 软解析(soft parse):只执行解析过程的前两步 硬解析(hard parse):执行解析过程的所有步骤 闩锁(latch) 2.3.1共享游标 父游标无法被共享的情形:SQL语句文本不匹配 可以共享父游标而无法共享子游标的情形:执行环境不匹配 v$sql_shared_cursor 可以了解到是由于哪种不匹配导致多个子游标的产生。 2.3.2绑定变量 #优点:可以在库缓存中共享游标,避免硬解析及与之相关的额外开销。 绑定变量分级(graduation) v$sql_bind_metadata #缺点:在WHERE子句中使用绑定变量的缺点是会有一些至关重要的信息对查询优化器不可见。 绑定变量窥测(bind variable peeking),9i引入。 扩展的游标共享(extended cursor sharing,也称为适应性游标共享, adaptive cursor sharing),11g引入。它的目的是在重用一个已经存在的但是会导致执行效率低下的游标时能够自动进行识别。 11g:  v$sql (is_bind_sensitive,is_bind_aware,is_shareable) v$sql_cs_statistics v$sql_cs_selectivity v$sql_cs_histogram #最佳实践 不涉及WHERE子句的时候,没理由不使用绑定变量。 直方图信息对查询优化器有很大影响的情况下,最好不要使用绑定变量。 两个关键案例: --SQL语句处理少量数据:OLTP、SQl语句频繁执行、解析时间可能接近或高于执行时间。使用绑定变量。 --SQL语句处理大量数据:OLAT、解析时间常常比执行时间要少好几个数量级。不使用绑定变量。   2.4读写数据块 逻辑读(logical read) 物理读(physical read) 物理写(physical write) 直接读(direct read) 直接写(direct write)   2.5小结
    转载请注明原文地址: https://ju.6miu.com/read-22975.html

    最新回复(0)