oracle中关于事务槽

oracle中关于事务槽

ID:5402836

大小:381.50 KB

页数:26页

时间:2017-11-10

oracle中关于事务槽_第1页
oracle中关于事务槽_第2页
oracle中关于事务槽_第3页
oracle中关于事务槽_第4页
oracle中关于事务槽_第5页
资源描述:

《oracle中关于事务槽》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Oracle的每个数据块中都有一个或者多个事务槽,每一个对数据块的并发访问事务都会占用一个事务槽。表和索引的事务槽ini_trans是1、max_trans是255,在oracle10g中,不能修改max_trans这个参数,因为oracle10g忽略了这个参数。我们来看一下oracle的事务槽的使用情况:六行数据全部插入到了一个数据块中。selectid,dbms_rowid.rowid_relative_fno(rowid)file#,dbms_rowid.rowid_block_number(ro

2、wid)block#fromt10/另起两个会话,一共三个事务正在访问这个表。其中两个会话访问一个数据块,一个会话访问一个数据块。在一个会话将会使用一个新的数据块。在一个会话将会使用一个新的数据块。Oracle为了防止itl的争用,采取了一些技术:1、如果是insert,默认每个表的ini_transitl是2,尽量保持这个数据块的事务数不超过2,采用在多个数据块中插入的情况。这样将insert分布到多个数据块中,防止了itl的争用。两个事务槽都被占用。结论:对于insert来说,oracle采用的是多

3、数据块分布插入的方式,2、对于update来说,三个会话同时修改一个数据块。事务槽自己增加到了3个。因为max_trans是255,因此发生itl争用的几率也很小。因此基于上面的两种情况来说,ITL发生争用的几率很小。我们来分析一下数据块dump的结果:最后一次对数据块进行cleanout的SCNITL数量Xid:事务id,在回滚段事务表中有一条记录和这个事务对应Uba:回滚段地址,该事务对应的回滚段地址第一段地址:回滚数据块的地址,包括回滚段文件号和数据块号第二段地址:回滚序列号第三段地址:回滚记录号

4、Flag:事务标志位。这个标志位就记录了这个事务的操作,各个标志的含义分别是:C---=transactionhasbeencommittedandlockscleanedout-B--=thisundorecordcontainstheundoforthisITLentry--U-=transactioncommitted(maybelongago);SCNisanupperbound ---T=transactionwasstillactiveatblockcleanoutSCNScn/Fsc:快速

5、提交(FastCommitFsc)的SCN或者CommitSCN。每条记录中的行级锁对应Itl条目lb,对应于Itl列表中的序号,即那个事务在该记录上产生的锁。1表示data2表示index这个事务在这个块上影响的行数。这个事务提交以后,将会释放的字节数。事务已经提交,锁已经cleanout事务是活动的锁定标记还没有消除。事务已经提交,但是还没有发生块清除。Flags----:事务是活动的,或者在块清除前提交事务。C---:事务已经提交并且清除了行锁定。--U-:事务已经提交(SCN已经是最大值),但是

6、锁定还没有清除(快速清除)。---T:当块清除的SCN被记录时,该事务仍然是活动的,块上如果有已经提交的事务,那么在cleanount的时候,块会被进行清除,但是这个块里面的事务不会被清除。C-U-:块被延迟清除,回滚段的信息已经改写,SCN显示为最小的SCN,需要由由回滚段重新生成,例如在提交以前,数据块已经flush到数据文件上。Oracle的两种提交方式:1、快速提交2、延迟提交块清除即清除数据块上与“锁定”有关的信息。Oracle的锁机制是一种轻量级的锁定机制,不是通过构建锁列表来进行数据的锁定

7、管理,而是直接将锁作为数据的属性,存储在数据块首部。因此,每次访问数据时都要去看数据块头部的锁,如果数据已经提交,则可能需要清理这个块,换句话说,要将这些事务信息删除。因此这个动作就会生成redo。事务槽(事务、是否提交、锁定)—事务表(事务、是否提交)Cleanout有2种,一种是fastcommitcleanout(提交清除),另一种是delayedblockcleanout(延迟清除).提交清除是如何工作的?Oracle会记录已修改的块列表,这些列表可以有20个块,Oracle根据需要分配多个这样

8、的列表,但是如果这些修改的块加起来超过buffer_cache的10%,oracle就停止分配这样的列表,因此当提交时就只会清理最多10%buffer_cache的数据块,其余的部分就延迟清除,这样也是为了提高commit的效率。还有一种情况,就是当事务还未commit时,修改的数据块已经写入硬盘,当发生commit时oracle并不会把block重新读入做cleanout,而是把cleanout留到下一次对此块的访问是完成。注意:对于Or

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。