db block gets (看到当前最新的数据): current mode , 不管这个块上的数据是否可能存在 before image ,也就是说不管是否存在回滚中数据可以 回滚,只看见当前最新块的数据,即使别人正在更新,也看见别人更新状态的数据,比如dml的时候就不需要看见别人更改前的数据,而是看见正在更改的,当然同时,若操作相同数据则被lock住。也就是说一次查询中看见的数据可能不在同一个时间点上,比如一个大的dml,当dml 开始更新一个非常大的表后,这个表更新的过程中,有一个进程去把该表末尾的一个记录更新了,然后这个大更新抵达该记录的时候会被阻塞的,若该进程事物提交,则大更新会覆盖该事务的更新,也就是说,这个大更新所看见的数据是当前的,不具有时间点的一致性,所以叫 current mode,个人认为db block gets这个词用的不好, 容易让人误解. 如果改成inconsistent gets可能会更准确一些
consistent gets(看到查询点前的数据) :consistent_gets是从回滚段中读到的前映(或叫读取一致性影象), 看见的数据是查询开始的时间点的,所以若存在block在查询开始后发生了变化的情况,则必须产生 before image 然后读数据,这就是一致读的含义
查询就是表示 consistent gets (query mode),因为查询要保证所获取的数据的时间点的一致性,所以叫一致读,即使是从当前 buffer 获得的数据,也叫 consistent gets ,这仅仅表达一种模式一种期望,并不表示真实的是从 当前buffer 获得 还是从回滚段获取数据产生的 bufore image 。
===========================================================================
这其中主要涉及到了Oracle读取数据的consistent mode和current mode这两个模式,对于db block gets是在current mode下读取的block数目(单位应该是“块次”,同一个block读取了两个算做2),而consistent gets是在consistent mode下读取的block数目(单位同上)。
current mode下读取数据是为了保证读取到的数据是当前时间点上最新的数据,这样做的目的一般都是为了DML语句的需求,比如需要更新,自然需要知道最新的数据才行;consistent mode呢主要是为了保证Oracle数据一致读的特性,一般都是在select情况下发生,读到的数据可能是一个实际存在的block,也有可能需要根据scn信息以及transaction相关信息以及回滚段中数据来构造。
===========================================================================
把问题简单并粗略化:
db block gets 看作是 DML 的读取(inconsistent gets) ,其看到的数据可能不具有时间点的一致性。
consistent gets 是 select 这样的读取,无论是否来自回滚段的数据都是 consistents gets ,仅仅表示其看到的数据具有时间点上的一致性。
===========================================================================
而physical reads是与logical reads相对的一个概念,两者的区别是读取的数据是从buffer中读取到还是从disk上的db file中取到。通过v$sysstat也可以看到,里面还有db block gets from cache以及consistent gets from cache两项,且这两项的数值与db block gets和consistent gets并不相同且小于后两者。所以不管是db block gets还是consistent gets,都可能出现了physical reads和logical reads两种情况(由buffer中的是否已经存在需要的数据),也即是说,db block gets与consistent gets两者已经构成了一次数据库操作中读取的所有block的总次数了。因此,logical reads自然也就可以通过如下公式算的:logical reads = (db block gets + consistent gets) - physical reads。
由此,自然也就得出了cache命中率的公式:
Hit Ratio = (db block gets + consistent gets - physical reads) / (db block gets + consistent gets)
OR
Hit Ratio = 1 – (physical reads/(db block gets + consistent gets)):
由于在Oracle中,取数据最后都是从Buffer中取,所以每出现一个physical reads必然会出现一次 logical reads,但是这里有一个需要注意的地方,就是当出现一个physical reads后接着会有一个logical reads这里,实际上这里只算了1 block(physical reads)!
分享到:
相关推荐
总之,Oracle执行计划的稳定性与数据库性能紧密相关,理解并掌握优化器的工作原理以及如何控制执行计划的选择,是优化数据库性能的关键。在基于代价的优化器模式下,虽然存在执行计划不稳定的可能,但通过合理管理和...
这部分内容可能涵盖RMAN(Recovery Manager)、数据泵、逻辑备份等技术,以及如何制定和执行灾难恢复计划。 "C/C++ 语言参考"表明有涉及C和C++编程语言的资料,这两种语言在系统级编程、嵌入式开发和高性能计算中...
- **OMem**: 当前操作完成所有内存工作区操作所总共使用私有内存(PGA)中工作区的大小,这个数据是由优化器统计数据以及前一次执行的性能数据估算得出的。 - **1Mem**: 当工作区大小无法满足操作所需的大小时,需要...
在深入了解Oracle执行计划之前,我们先来了解一下几个重要的概念,这些概念对于理解执行计划至关重要。 **共享SQL语句**:为了提高性能并减少资源消耗,Oracle在第一次解析某个SQL语句后,会将其以及相应的执行计划...
执行计划是Oracle数据库处理SQL查询的一种步骤序列,它详细描述了数据如何从表中提取、如何进行排序或聚合,以及如何返回到应用程序。理解执行计划对于优化SQL语句和提高数据库性能至关重要。 1. **执行计划的理解...
执行计划揭示了Oracle如何处理一个SQL查询,包括数据的访问路径、使用的索引、排序方式以及表之间的连接顺序等。本文将深入探讨如何查看执行计划,并提供优化SQL的策略。 一、执行计划的概念 执行计划是Oracle...
### Oracle执行计划深入解析 #### 引言 在数据库领域,尤其对于大型企业级应用,Oracle数据库因其强大的功能和稳定性而被广泛采用。在Oracle中,执行计划是数据库优化器根据SQL语句特性生成的一系列步骤,用于指导...
Oracle解释计划是指Oracle在执行SQL语句之前所生成的计划,它详细描述了数据库如何检索数据以及执行相关操作的步骤。 在Oracle中获取执行计划有多种方法,以下是几种常见的方法: 1. 使用EXPLAIN PLAN语句:这是一...
3. **执行MapReduce作业**:使用RHadoop编写的程序可以通过Hadoop执行MapReduce作业,从而在大数据集上进行统计分析。 4. **结果展示**:分析结果可以直接在R环境中进行展示,如图表绘制等。 #### 四、Hadoop完全...
执行计划是Oracle优化器根据统计信息和优化算法生成的用于执行SQL语句的具体步骤说明,它决定了SQL语句如何访问数据库中的数据,如何执行join操作,以及如何返回查询结果。 ### 执行计划的重要性 执行计划贯穿于...
Oracle执行计划是数据库管理系统在处理SQL语句时的预估工作流程,它是Oracle优化器根据当前数据分布、索引情况和系统资源等信息选择的最佳执行策略。了解和分析执行计划对于提升SQL语句的性能至关重要。 一、生成...
执行计划是指在Oracle数据库中执行SQL查询时所采用的数据访问路径。它详细描述了数据库如何处理查询请求,包括数据读取的方式、使用的索引以及连接操作等。执行计划对于理解查询性能至关重要,因为它直接影响到查询...
Oracle执行计划是数据库执行SQL语句前确定的操作步骤序列。优化器根据表的统计信息、存储参数、可用的执行路径等生成执行计划,以实现最快的查询速度。执行计划通常用一系列数据库操作符来表示,这些操作符及其顺序...
### Oracle数据库执行计划...通过合理选择优化器模式、维护准确的统计数据以及适当调整执行计划,可以显著提升数据库系统的整体性能。在实际应用中,DBA应根据具体情况灵活选择合适的优化策略,以实现最佳的查询效率。
Oracle 执行计划是数据库管理系统在处理SQL查询时制定的一系列步骤,用于高效地检索和处理数据。它是Oracle数据库优化器(Optimizer)根据统计信息、成本估算和已存在的索引等信息生成的。优化器有两种主要的工作...
`SET AUTOTRACE ON`是开启SQLPLUS的自动跟踪功能,它会在你执行SQL语句后显示执行计划和性能统计。在SQLPLUS中输入此命令,系统会记录接下来执行的SQL语句的详细信息,包括解析、执行和收获阶段的信息。 3. **执行...
Oracle SQL执行计划是指Oracle数据库为SQL语句制定的一系列执行步骤,这些步骤指导数据库如何高效地访问数据和执行SQL语句。执行计划对于Oracle数据库的性能调优至关重要,因为它能够揭示SQL语句的执行细节,帮助...
总之,Oracle执行计划的稳定性对于数据库的高效运行具有重要意义。通过合理管理统计信息、选择合适的优化器模式、利用SQL提示和监控工具,可以有效控制执行计划的稳定性,从而提升数据库的整体性能。
Oracle提供了多种工具和方法来监控并行执行的性能,包括使用`V$`视图(如`V$SESSION`、`V$PGA_MEMORY_HISTOGRAM`等)来查看并行执行相关的统计信息。 ##### 调优技巧 - **调整并行度**:合理设置并行度可以提高...