- 浏览: 403476 次
- 性别:
- 来自: 上海
最新评论
-
liuwenlong62555:
...
Linux防火墙的关闭和开启 -
baolong101010:
永久关闭:chkconfig --level 2345 ipt ...
Linux防火墙的关闭和开启 -
lijie1819:
3)查看防火墙状态chkconfig iptables --l ...
Linux防火墙的关闭和开启 -
Annah:
总结的很好,谢谢
Vector和ArrayList区别 -
celavi:
非常好的文章,谢谢分享!
ORACLE SQL TUNING
cost of b-tree access
这一节我们看看CBO是如何来计算最普通的b-tree索引的访问的cost的。 我们知道B-tree索引的结构是一个树状结构,索引中包括root block,branch block, leaf block,这些结构分别相当与树的根,茎和叶。 我们知道CBO的Cost包括IO的cost和CPU的cost,而Oracle认为每一个single block access都是一个真实的IO,所以如果我们启动CPU的cost,访问索引的Cost就是访问索引的Block个数。 访问索引的cost可以用下面的公式来表示: cost = blevel + 第一行的blevel是指为了访问一个leaf block,我们需要访问的block的个数(不包括leaf block本身),Oracle总是维护一个Balanced B-trees,也就是说不管访问哪桓鰈eaf block,我们需要访问的中间block(包括root block和branch block)的个数都是一样多的。这个blevel也常常被称为索引的高度。 第二行是指我们的查询需要访问的leaf block的个数。 第三行是指为了获取我们需要的所有数据,我们需要访问的表的block的个数。 我们来做个实验来验证上面的公式。 1) 建表,建索引并收集统计数据: create index t1_i1 on t1(n1, ind_pad, n2) begin 我们查询表和索引的统计信息: TABLE_NAME BLOCKS NUM_ROWS (HWM下有371个block,一共有10000行) select NUM_ROWS DISTINCT_KEYS BLEVEL LEAF_BLOCKS CLUSTERING_FACTOR AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY (索引上一共有10000行, 这里简单解释一下几个概念: 2,cluster_factor, 下面是一个cluster_factor=10的图示:
实验1
先做个简单的实验: Execution Plan 我们看到索引本身RANGE SCAN的Cost=5,Card=20, 最后的总cost是25,也就是table的访问cost是20,按照我们个公式: cost = blevel + 放在一起我们得到 从这个例子里我们发现表本身的cost占绝大多数,这是因为这个索引的clustering_factor很大。很多时候我们都希望重建索引可以大大提高提高索引的效率,但要记住重建索引只能减少leaf_blocks的值(能减少多少取决于索引的具体情况),但实际上有时候真正影响更大的是clustering_factor(当然有时候是leaf_blocks,取决于具体情况)。 实验2
我们在条件里面加一个范围查询: select Execution Plan 首先我们加了一个/*+ index(t1) */强制使用索引,否则这个查询会选择full table scan,因为如果你实验一下或按照我们以前介绍的方法算一下,这个表的full table scan的cost只有58。 selectivity (n2 between 1 and 3) = Effective index selectivity = 1 * 0.04 * 0.205263 = 0.0082105 实验3
我们修改一下上面的SQL: alter session set "_optimizer_skip_scan_enabled"=false; Execution Plan 我们这里修改_optimizer_skip_scan_enabled为false,这样CBO就会使用Cost更低的Index skip scan。 这次我们发现总的cost相当高,但是按照公式计算: Effective index selectivity= 0.163333*1*0.05=0.0081667 我们的公式结果和explain plan里的显示差很多,这是为什么呢? 第二组: ..... 第二十五组:
cost= 2 + 在Oracle9i的plan_table里面引入了两个新的列: 这里access_predicates列出访问索引是被使用了的条件,filter_predicates列出被忽略了的条件。
我们知道8i开始有一个和索引有关的参数:OPTIMIZER_INDEX_CACHING,官方关于这个参数的解释是: 也就是说,这个参数仅仅影响nested loops和in list中的index的使用,我们在其他的部分介绍nested loops,现在现看看对In-list的影响: 默认情况optimizer_index_caching = 0 select
select
select Execution Plan
alter session set optimizer_index_caching = 75; select Execution Plan
select Execution Plan 不是很清楚具体是怎么计算了,看上来好像是只影响Index部分的cost,比如原来的cost是9,当设置optimizer_index_caching =75之后,那么新的cost= trunc(9*0.25)=2。 8i引入的和index有关的另一个重要的参数是optimizer_index_cost_adj,我们知道在8i里面CBO是不知道单块读和多块读的区别的,而这个参数就是为了弥补这个问题,默认值100是说单块读和多块读的cost一样,当我们调小这个参数值以后,CBO认为单块读比多块读的cost小,否则如果调大,CBO会认为单块读比多块读cost大。optimizer_index_cost_adj的问题在于它并不是影响CBO对多块读的cost,而是影响CBO对单块读的cost,这其实是个有问题的逻辑,因为合理的思维是应该调整多块读的cost,所有有的时候可能会导致CBO本来选择了一个较好的索引,但调整了optimizer_index_cost_adj后会选择一个较差的索引。从这个角度来说9i的system statistics就是调整多块读的cost,所以system statistics是更加合理的,而且system statistics是可以在真实环境中收集信息的,所以也比我们估计optimizer_index_cost_adj来的合理。 |
发表评论
-
一次oracle无法open的解决
2009-01-16 13:59 3725这几天因为公司的复杂查询出现性能的问题(说实话本来就没设计好, ... -
Oracle10g 自动共享内存管理
2009-01-14 13:25 39355.6 自动共享内存管理 从Oracle 10g开始,Or ... -
如何改善Oracle的索引
2009-01-12 16:40 15851、速度因素 PARALLEL选项:当创建索引时,O ... -
Oracle latch竞争总结(一)
2009-01-07 11:38 2907在Oracle中,Latch的概念是非常重要的,v$l ... -
PX Deq: Execute Reply 案例说明
2009-01-03 09:55 30901 背景:Oracle 数据库在执行sql时,会自动的选择较 ... -
MySQL优化经验——第一讲
2008-12-28 19:41 1416今天突然想起自己 ... -
oracle中对workarea_size_policy和sort_area_size的总结
2008-12-19 12:06 8942在实际的工作中,想必很多人会对SORT_AREA_SIZE和s ... -
Oracle专用服务器与共享服务器的区别
2008-12-19 11:51 3393在建立Oracle数据库的时候,应该会在数据库建立助手向导上面 ... -
Oracle高级SQL调优:CLUSTER_FACTOR案例研究
2008-12-18 22:27 1872大家在大型数据库生产系统的运维中可能会遇到这样一个问题,一条查 ... -
Oracle分析函数RANK()|ROW_NUMBER()|LAG()使用详解
2008-12-16 14:58 3131ROW_NUMBER()的使用方法: ROW_NUMB ... -
index和rowid的一点关系
2008-12-16 14:18 1520相信很多朋友在rowid和index之间都会有些疑问,今天在w ... -
关于MySQL的查询缓存收
2008-12-13 21:21 1215关于MySQL的查询缓存收 原理 QueryCache(下面简 ... -
oracle 被锁,解锁,阻塞语句
2008-12-12 18:35 2695//查询被锁的表 select A.s ... -
通过Oracle10g的FLASHBACK_TRANSACTION_QUERY指定事务的历史信息
2008-12-12 13:05 3196在数据库操作中,我们经常会遇到余下情况: 1.莫名其妙数据被D ... -
对于Oracle中DML使用UNDO的一些看法
2008-12-11 17:53 1259insert操作回滚段中只记录这些记录的ROWID updat ... -
oracle中x$ksppi和x$ksppcv详解
2008-12-09 17:22 3455SQL> desc x$ksppi 名称 ... -
ORA-600 [2103]错误及CF enqueue竞争
2008-12-09 17:21 1263昨天,客户的一套Oracle 10.2.0.3 RAC环境遇到 ... -
Oracle的redo 和undo的区别
2008-12-05 15:26 2633redo--> undo-->datafile i ... -
从 v$session 视图获取客户端 IP 地址
2008-11-18 19:42 2691缺省从 v$session 中不能直接获得客户端 IP ... -
oracle中聚合函数RANK和dense_rank的使用
2008-04-18 17:23 1388聚合函数RANK 和 dense_rank ...
相关推荐
在这个学习笔记中,我们将深入探讨Oracle中的Hash Join操作,这是一种重要的联接(JOIN)类型,尤其在处理大数据量时能展现高效的性能。 Hash Join的基本原理是通过构建一个哈希表来实现两个表的连接。首先,Oracle...
以下是对这份"最牛逼的Oracle 11g OCP学习笔记"中的关键知识点的详细阐述: 一、Oracle 11g基础知识 Oracle 11g引入了许多新特性,如自动内存管理、数据屏蔽、实时应用集群(RAC)、闪回数据库等。其中,自动内存管理...
6. SQL优化器改进:包括Cost-Based Optimizer(CBO)和Rule-Based Optimizer(RBO),使得SQL查询更高效。 7. 数据库审计:增强了安全性和合规性,支持详细的审计记录。 二、安装与配置 Oracle 10g的安装涉及多个...
- **基于成本的优化器(CBO)**:CBO考虑了多种因素,包括表的大小、索引的存在与否、数据分布情况等,从而计算出每种可能的执行路径的成本,并选择成本最低的那个作为执行计划。这种方式更加灵活和智能,能够适应...
这篇"HTML入门笔记2源代码"提供了关于a、img、table和form等基础标签的使用示例,非常适合初学者掌握和实践HTML的基本语法。 一、a标签 a标签是HTML中的超链接标签,用于创建链接到其他页面、文件、邮件地址或者...
- **写笔记**:记录学习过程中重要的知识点和思考,有助于巩固记忆。 - **做实验**:通过实践来验证理论知识的有效性,加深理解。 - **再次思考与写笔记**:重复这个过程,直到完全理解为止。 **2.2 解决问题的态度...
Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,...这18天的笔记内容全面覆盖了Oracle的主要知识点,通过深入学习,可以建立起对Oracle数据库系统的全面认识,为实际工作中的数据库管理与维护打下坚实基础。
3. 优化器:理解CBO(成本基优化器)和RBO(规则基优化器),以及如何影响查询执行计划。 第十一天至第十三天:备份与恢复 1. 数据库备份:完整备份、增量备份和差异备份的原理与实现。 2. 灾难恢复:RMAN(恢复...
Oracle数据库是全球最广泛...Jack Chiang的笔记可能涵盖了以上部分或全部内容,对于学习和理解Oracle数据库的运作机制和管理技巧具有很高的参考价值。通过深入阅读和实践,你可以成为一名熟练的Oracle数据库管理员。
这个压缩文件可能包含关于Oracle查询优化的深度内容,讲解了Oracle的CBO(Cost-Based Optimizer)如何根据成本选择执行计划。可能涉及索引、统计信息、执行计划分析、SQL优化技巧等内容。 5. **oracle管理课件** ...
以上是Oracle数据库核心技术的概览,实际应用中还需要结合具体场景和需求,深入学习和理解这些概念,才能更好地管理和优化Oracle数据库。通过阅读和理解这些读书笔记,可以提升对Oracle数据库的理解和操作能力。
- 对于CBO(成本为基础的优化器)无法优化的情况,DBA需要深入分析执行计划,可能需要手动调整索引或统计信息。 4. **Oracle压缩技术**: - Oracle提供了多种压缩选项,包括基础表压缩、压缩数据的修改以及针对...
- **CBO(Cost-Based Optimizer)与RBO(Rule-Based Optimizer)**:CBO根据统计信息和成本估算选择执行计划,RBO则基于预定义的规则。 - **绑定变量与硬解析**:使用绑定变量可以减少硬解析次数,提高性能。 - *...
这部分的学习需要理解CBO(Cost-Based Optimizer)的工作原理,以及如何通过统计信息来评估查询计划的成本。 再者,Oracle的存储引擎部分,包括表空间、数据块、段、区等概念,以及如何进行物理存储和逻辑存储的...
本资源包“Mysql源码整理_news4ep_mysql源码_MYSQL_”是数据库学习者在研究MySQL源码过程中的笔记和资料集合,旨在帮助用户更深入地了解MySQL的内部工作机制。 MySQL源码的学习可以从以下几个关键方面展开: 1. **...
这份文档可能是个人或集体学习Oracle数据库时的笔记总结,可能包括安装配置、SQL语法、数据类型、表空间管理、存储过程、触发器、事务处理等内容。通过阅读,读者可以对Oracle的基本操作和概念有初步理解。 2. **...
4. **优化查询执行**:Hive通过查询优化器(如CBO - Cost-Based Optimization)改进查询性能,选择最佳的执行计划。 **Jupyter Notebook**: Jupyter Notebook是一个交互式笔记本环境,广泛用于数据分析、机器学习...