您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何理解Oracle的INITRANS與事務,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Oracle的INITRANS與事務
每個塊都有一個塊首部。這個塊首部中有一個事務表。事務表中會建立一些條目來描述哪些事務將塊上的哪些行/元素鎖定。這個事務表的初始大小由對象的INITRANS 設置指定。對于表,這個值默認為2(索引的INITRANS 也默認為2)。事務表會根據(jù)需要動態(tài)擴展,最大達到MAXTRANS 個條目(假設塊上有足夠的自由空間)。所分配的每個事務條目需要占用塊首部中的23~24 字節(jié)的存儲空間。注意,對于Oracle 10g,MAXTRANS 則會忽略,所有段的MAXTRANS 都是255。
由于oracle塊里有一個PCT_free的概念,即oracle會預留塊大小的10%作為緩沖,當修改oracle的事務增加時,事務槽向下增長,當更新oracle塊的數(shù)據(jù)時,數(shù)據(jù)向上增長,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 參數(shù)生效 這里的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 4 581
2 2 4 581
3 3 4 581
可以看到插入的三行數(shù)據(jù)都在4號文件的581塊
會話1
SCOTT@hyyk> update t3 set num=11 where id =1; //這里不提交
查看事務,可以發(fā)現(xiàn)已經開始一個事務,占據(jù)了一個事務槽080011007A050000
會話2
SCOTT@hyyk> update t3 set num=11 where id =2;
1 row updated. //發(fā)現(xiàn)這里可以插入
這個事務表的初始大小由對象的INITRANS 設置指定。對于表,這個值默認為2(索引的INITRANS 也默認為2)
再次查看事務,又開始了一個事務,事務xid 06001B0075050000
會話三
SCOTT@hyyk> update t3 set num=11 where id =3
...等待
因為事務表沒有槽位
以上就是如何理解Oracle的INITRANS與事務,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。