2014年1月22日

转-oracle sql执行过程分析

摘要: 在oracle中存在这样两种语句类型:DDL(create、drop、alter、truncate)、DML(insert、update、delete、select)。DDL语句是从来不会共享使用的,也就是说每次执行都是硬解析,而DML语句会根据实际情况选择解析方式(硬解析或软解析)。下面我们主要对DML类sql语句的执行过程进行分析:oracle对DML类sql语句的执行步骤如下:1.语法检查语句检查主要是对sql语句的规范合法行进行检查,比如关键字select、from 写错等:[sql]view plaincopyprint?SQL>sele*fromdual;sele*fromd 阅读全文

posted @ 2014-01-22 17:08 肖恩__劉 阅读(252) 评论(0) 推荐(0)

转-oracle ITL(事务槽)的理解

摘要: oracle ITL(事务槽)的理解一、ITL描述:ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,用来记录该块所有发生的事务,一个itl可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫itl槽位。如果一个事务一直没有提交,那么,这个事务将一直占用一个itl槽位,itl里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,那么,itl槽位中 阅读全文

posted @ 2014-01-22 17:05 肖恩__劉 阅读(276) 评论(0) 推荐(0)

转-为什么oracle不会发生锁升级?

摘要: 大家都知道oracle里面是不会发生锁升级的。而在sqlserver,db2里面都会发生锁升级,也就是当锁的行达到一定程度时锁就会升一级。为什么oracle里面不会发生锁升级呢?因为oracle的行锁是存放在每行的行头里面的,占用一个字节,它代表的是该事务所占用的ITL号。而不像其他数据库里面行锁是集中存放的,集中存放的话,当行锁的个数达到一定程度时,由于存放的空间问题,就需要发生锁升级。oracle的行锁在事务提交时也不是马上就释放的,也就是delay clean out。这个存放行锁的字节,如果是0,说明没有锁,如果大于0,则说明有行锁,这个数字代表的是该事务所占用的ITL号。假设事务1( 阅读全文

posted @ 2014-01-22 17:03 肖恩__劉 阅读(370) 评论(0) 推荐(0)

导航