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

 
2.1选择性和基数
cardinality = selectivity * num_rows
 
2.2游标的生命周期
#打开游标:
 系统会在与这个会话相关的服务器进程的服务器端私有内存中为这个游标分配一个内存结构,也就是用户全局区(User Global Area,UGA)。注意,SQL语句与游标还没有关联。
#解析游标:
 有一条SQL语句与这个游标关联。解析后内容(包括执行计划)会被加载到共享池的库缓存(library cache)中。UGA中的结构会被更新,以保存指向这个共享游标在库缓存中的位置。
#定义输出变量
#绑定输入变量
#执行游标
#获取游标
#关闭游标
 
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小结

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

转载于:http://blog.itpub.net/23945361/viewspace-759305/

你可能感兴趣的:(【Oracle性能诊断艺术】学习笔记----第二章:关键概念)