如何理解Oracle的INITRANS与事务


本篇文章给大家分享的是有关如何理解Oracle的INITRANS与事务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
Oracle的INITRANS与事务
每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足够的自由空间)。所分配的每个事务条目需要占用块首部中的23~24 字节的存储空间。注意,对于Oracle 10g,MAXTRANS 则会忽略,所有段的MAXTRANS 都是255。
由于oracle块里有一个PCT_free的概念,即oracle会预留块大小的10%作为缓冲,当修改oracle的事务增加时,事务槽向下增长当更新oracle块的数据时,数据向上增长,PCT_free的空间被压缩。这里我们只是看INITRANS的作用,所以pctfree 0 SCOTT@hyyk> create table t3 (id int, num int ) INITRANS 1 pctfree 0 ; SCOTT@hyyk> select TABLE_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE from user_tables where table_name=’T3′;
可以看到pctfree 0 参数生效 这里的INITRANS初始值是1 SCOTT@hyyk> insert into t3 values(1,1) ; SCOTT@hyyk> insert into t3 values(2,2); SCOTT@hyyk> insert into t3 values(3,3); SCOTT@hyyk> commit; SCOTT@hyyk> select id,num ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from T3;
ID NUM FILE免费云主机域名# BLOCK#
———- ———- ———- ———-
1 1 4581
2 2 4581
3 3 4581 可以看到插入的三行数据都在4号文件的581块 会话1
SCOTT@hyyk> update t3 set num=11 where id =1; //这里不提交查看事务,可以发现已经开始一个事务,占据了一个事务槽080011007A050000
会话2
SCOTT@hyyk> update t3 set num=11 where id =2;
1 row updated. //发现这里可以插入这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2) 再次查看事务,又开始了一个事务,事务xid 06001B0075050000
会话三
SCOTT@hyyk> update t3 set num=11 where id =3
…等待因为事务表没有槽位以上就是如何理解Oracle的INITRANS与事务,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注百云行业资讯频道。

相关推荐: redis能不能算是数据库

这篇文章主要介绍了redis能不能算是数据库,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。redis是数据库吗?Redis是由意大利人Salvatore Sanfilippo(网名:antirez)…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/15 17:57
下一篇 01/15 18:25