關於block的ITL和dump的擴充套件
關於block的ITL和dump的擴充套件
關於block的ITL,資料塊在建立時預設會在每個block中分配兩個ITL,也就是initrans,會有list,最大允許有255 Interested Transaction List,也就是block上的maxtrans。而initrans為2是初始分配給block的,雖然經過dbms_metadata.get_dll檢視初始分配了initrans 1,其實大家可以在建立後dump塊看看,初始分配了兩個,而即使手動定義的maxtrans 2在10g下已經失去了意義,oracle一樣會初始分配2個ITL,最大允許255個ITL。
注:oracle 9i推出了自動段空間管理,使block中的fctused引數失效,因為不再用freelists管理段內的空間,避免了segment頭的單個freelist競爭,而改為點陣圖管理extent的free use資訊。不過關於ITL的分配個人經過測試無論在手動還是自動段空間管理下,oracle初始都會分配兩個initrans,最大到255maxtrans,這在oracle 10g後就是如此了(關於9i的版本還沒有詳細的測試資訊,以後有測試資訊補上)
預設建立table用dbms_metadate.get_ddl得到的資訊。
CREATE TABLE "XIAOYU"."TEST0001"
( "ID" NUMBER,
"NAME" VARCHAR2(10)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"
關於ITL是什麼,運用dmp資料塊檢視:
SQL> delete from test0001;
2 rows deleted
Block header dump: 0x01009fbf
Object id on Block? Y
csc: 0x00.9ae330b4 itc: 2 flg: E
brn: 0 bdba: 0x1009fb9 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.022.0000017d 0x00800aaa.0160.1a C--- 0 scn 0x0000.9ae327db
0x02 0x0001.021. .. ---- 2 fsc 0x000e.00000000
這裡先說明下上面的seg/obj: 0xcbe4,這個是sys.obj$基表中的obj#編號,可以轉化為16進位制檢視下是否
ITL是連線的事務槽編號,Xid這個是事務ID,其實可以分為三份,usn佔用回滾段編號,slot和seq,都用16進位制替代,可以用to_number把16進位制轉化為10進位制然後檢視是否存在於sys.obj$(網友提到了oracle是根據obj$檢視物件是否存在),在看看typ: 1 – DATA代表是存放資料的表段,如果是索引type就是2了,如下:
(dump的索引塊)*** 2012-04-27 23:37:16.334
Start dump data blocks tsn: 4 file#: 4 minblk 1731 maxblk 1731
buffer tsn: 4 rdba: 0x010006c3 (4/1731)
scn: 0x0000.000990eb seq: 0x01 flg: 0x04 tail: 0x90eb2301
frmt: 0x02 chkval: 0x6326 type: 0x23=PAGETABLE SEGMENT HEADER
#blocks in seg. hdr's freelists: 0
#blocks below: 1
mapblk 0x00000000 offset: 0
Level 1 BMB for High HWM block: 0x010006c1
Level 1 BMB for Low HWM block: 0x010006c1
--------------------------------------------------------
Segment Type: 2 nl2: 1 blksz: 8192 fbsz: 0
這裡也告誡自己和大寫多動手,雖然很簡單的查詢多動手印象深刻!
SQL> select xidusn,xidslot,xidsqn,ubafil,ubablk,ubasqn,ubarec,status from v$transaction;
XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC STATUS
---------- ---------- ---------- ---------- ---------- ---------- ----------------
1 33 376 2 17 227 43
ACTIVE
SQL> select to_number('00000178','xxxxxxxx') from dual;
TO_NUMBER('00000178','XXXXXXXX
------------------------------
376
而其中的lck也就鎖住的rows數量,scn/fsc是快速提交或延遲提交的scn,看出此時事物沒有提交,所佔用的ITL 0x02,關於flag的標識:----代表事物是活動的,或者提交正在進行快清除;C—代表事物已經提交併且快清除完成;--U-事物提交(可能很久以前);scn是一個上限值;--T-事物依然活動的,在進行塊清楚(transaction was still active at block cleanout SCN),--B- this undo record contains the undo for this ITL entry
而其中的uba,先取前十位也就是0x00800011,轉換為2進位制再取出前10位也就是回滾段的檔案號,剩下的就是dba也就是資料庫編號,00e3是ubasqn,而2b則是ubarec。
繼續摘要一部分dump的內容:
data_block_dump,data header at 0x9102264
===============
tsiz: 0x1f98
hsiz: 0x16
pbl: 0x09102264
bdba: 0x01009fbf
76543210
flag=--------
ntab=1
nrow=2
frre=-1
fsbo=0x16
fseo=0x1f86
avsp=0x1f70
tosp=0x1f82
0xe:pti[0] nrow=2 offs=0
0x12:pri[0] offs=0x1f8f
0x14:pri[1] offs=0x1f86
--- tsiz: hsiz: pbl: bdba: 在資料檔案都是沒有儲存的
--- tsiz: 除了上面的3部分和block尾部的4個位元組剩下的空間 0x1fb8就是8120位元組 8k的block:
--- 8192-20(block head)-24(Transaction Header)-24(一個事務條)-4(block tail)=8120
--- hsiz: 資料塊頭20個位元組+資料塊尾4個位元組=24位元組(0x14)
--- pbl: ptr to buffer holding the block 我是用的專用模式dump的datafile中的block出來
--- 在同一個session的dump檔案中 dump 出來的block 的這個都是同一個值
--- bdba: 和第一部分中的rdba 一個意思
--- flag 1 byte N=pctfree hit(clusters), F=don't put on free list
--- K=flushable cluster keys. 當然還有別的標記: A ...
--- ntab 1 byte 這block中有幾個table的資料 cluster這個就可能大於1
--- nrow 2 bytes block 中有多少行資料
--- frre 2 bytes First free row index entry. -1=you have to add one.
--- fsbo 2 bytes Free Space Begin offset
--- fseo 2 bytes Free Space End offset
--- avsp 2 bytes Available space in the block
--- tosp 2 bytes Total available space when all TXs commit
--- 0xe: nrow 2 bytes block
--- 0xe: offs 2 bytes 偏移量 用 cluster 的時候可以看出值
block_row_dump:
tab 0, row 0, @0x1f8f
tl: 2 fb: --HDFL-- lb: 0x2
tab 0, row 1, @0x1f86
tl: 2 fb: --HDFL-- lb: 0x2
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 40895 maxblk 40895
--- tl: 這條記錄中的長度 包括row head 的一般情況的 3 位元組和表示資料長度的1位元組和資料本身的長度
--- fb: 1 byte K = Cluster Key (Flags may change meaning if this is set to show HASH cluster)
--- C = Cluster table member
--- H = Head piece of row
--- D = Deleted row
--- F = First data piece
--- L = Last data piece
--- P = First column continues from previous piece
--- N = Last column continues in next piece
--- lb: 1 byte 和上面第三部分的 ITL 的lck相對應 表示這行是否被 lock 了
--- cc: 1 byte 表示這行有幾列資料
--- col 0: [ 2] : 1 byte 表示這行的這列的長度
--- c1 02 : 這就是table中的資料 "1" 可以透過下面的語句看 oracle真正使用的是
--- 那些16進位制的資料來表示的使用者資料 select dump(col_name,16) from table_name;(不過個人並沒有看見cc col0 c1 02等資訊,關於資料塊下面延伸的確實有點難以理解,個人也是慢慢對著慢慢理解的。)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1058058/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Block中的ITL槽能擴充套件到多少與pctfree有關係麼 ?BloC套件
- 關於使用擴充套件包的問題。套件
- 關於Interceptor擴充套件問題套件
- 關於給apache新增PHP擴充套件的方法ApachePHP套件
- 關於基於 Jdon+Disruptor 的 橫向擴充套件套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- PHPWAMP安裝Redis擴充套件的方式與相關擴充套件的下載PHPRedis套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 – MomentumChrome套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 - MomentumChrome套件
- 分享自己寫的關於順豐同城配送的擴充套件包套件
- 關於翻譯包的擴充套件 dimsav/Laravel-translatable套件Laravel
- 請教一下關於回滾段的擴充套件和收縮!套件
- 基於MongoDB.Driver的擴充套件MongoDB套件
- 基於 Bootstrap 的 UI 擴充套件:StyleBootstrapbootUI套件
- 關於一些nginx的高階擴充套件應用Nginx套件
- PHPmemcache和memcached擴充套件的區別PHP套件
- UNDO SEGMENT的擴充套件和收縮套件
- php7安裝redis擴充套件和memcache擴充套件PHPRedis套件
- 基於 GatewayWorker 開發的 Laravel 擴充套件GatewayLaravel套件
- 基於PHP擴充套件的WAF實現PHP套件
- 介紹兩個好玩的和Github相關的Chrome擴充套件GithubChrome套件
- 關於32位oracle擴充套件SGA的一些問題Oracle套件
- 關於一些nginx的高階擴充套件應用薦Nginx套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- C# 擴充套件方法 借籤於 Objective-C 擴充套件類.C#套件Object
- 請教關於JAVA動態擴充套件問題Java套件
- 正則的擴充套件套件
- SRAM的容量擴充套件套件
- oracle 關閉資料檔案的擴充套件Oracle套件
- bootstrap – 基於ul的擴充套件 list + listgroup + dropdownboot套件
- 適用於開發者的最佳 Chrome 擴充套件工具Chrome套件
- iOS開發的分類和擴充套件iOS套件
- iOS 協議的繼承和擴充套件iOS協議繼承套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件
- 表空間自動擴充套件 AUTOALLOCATE 的擴充套件規律套件
- 乾貨丨如何水平擴充套件和垂直擴充套件DolphinDB叢集?套件
- Ray:用於擴充套件和分發Python和ML應用的框架套件Python框架
- 關於BOOT和DUMPboot