亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle Freelist和HWM原理探討及相關(guān)性能優(yōu)化

瀏覽:23日期:2023-11-15 19:56:36
Oracle Freelist和HWM原理探討及相關(guān)性能優(yōu)化中興通訊重慶研究所 游波要害詞:Freelist,HWM,存儲參數(shù),段,塊,dump,優(yōu)化文章摘要: 近期來,F(xiàn)reeList的重要作用逐漸為Oracle DBA所熟悉,網(wǎng)上也出現(xiàn)一些相關(guān)的討論。本文以FreeList為線索對Oracle的存儲治理的原理進(jìn)行較深入的探討,涉及Oracle段區(qū)塊治理的原理,F(xiàn)reeList算法等。而與FreeList密切相關(guān)的一個重用特性HWM,與sql性能密切相關(guān),本文也作了原理分析介紹。在原理探討的基礎(chǔ)上,介紹了常用的存儲參數(shù)分析方法,并對所涉及的存儲優(yōu)化、HWM的優(yōu)化和Freelist競爭優(yōu)化作了說明??s略語: ASSM:auto segement space management HWM:high water mark DBA:data block address OLTP:online transaction process OPS:oracle parallel server1.簡介 Oracle的空間治理和存儲參數(shù)治理是Oracle治理及優(yōu)化的重要部分。FreeList作為Oracle底層存儲參數(shù)中的核心參數(shù),其行為方式對Oracle的存儲治理及性能優(yōu)化有重大影響,而現(xiàn)有的Oracle文檔對此方面的內(nèi)容比較缺乏。雖然Oracle 9i已出現(xiàn)了ASSM,但是作為深入調(diào)優(yōu)對FreeList熟悉仍是必要的。 近期來,F(xiàn)reeList的重要作用逐漸為Oracle DBA所熟悉,網(wǎng)上也出現(xiàn)一些相關(guān)的討論。本文以FreeList為線索對Oracle的存儲治理的原理進(jìn)行較深入的探討,涉及Oracle段區(qū)塊治理的原理,F(xiàn)reeList算法等。而與FreeList密切相關(guān)的一個重用特性HWM,與sql性能密切相關(guān),本文也作了原理分析介紹。在原理探討的基礎(chǔ)上,介紹了常用的存儲參數(shù)分析方法,并對所涉及的存儲優(yōu)化、HWM的優(yōu)化和Freelist競爭優(yōu)化作了說明。 這些原理分析和性能優(yōu)化都建立在探討的基礎(chǔ)上,限于篇幅和本人經(jīng)驗(yàn)可能存在局限、偏差或謬誤。 為了準(zhǔn)確文中部分結(jié)構(gòu)和字段的說明直接用英文描述。 限于篇幅本文不對同樣很重要的block結(jié)構(gòu)作更深入的討論,對OPS性能有重要影響的free list group本文也未提及,因此本文在單一free list group下討論。對于block的深入討論、free list group的介紹與優(yōu)化以及PCTUSED和PCTFREE等重要參數(shù)的優(yōu)化請參見參考文獻(xiàn)和資料。2.原理探討 FreeList作為一個Oracle存儲治理的核心參數(shù)。其行為方式由Oralce內(nèi)部控制,我們一般不需要把握和控制。但是我們可能會碰到這些問題,當(dāng)插入一條記錄,會插入到那個塊中?是使用新塊,還是插入有數(shù)據(jù)的老塊?段是什么時候擴(kuò)展的,如何擴(kuò)展的?表中只有一條記錄,但是作一次select時代價卻是上千個塊,為什么?假如我們從原理上清楚了Oracle的存儲治理方式,對相關(guān)這些問題的解決及性能優(yōu)化就清楚自然了。2.1 Oracle的邏輯儲存結(jié)構(gòu) Oralce的邏輯存儲結(jié)構(gòu)按表空間,段,區(qū),塊進(jìn)行治理。塊是Oracle用來治理存儲空間的最基本單元,Oracle數(shù)據(jù)庫在進(jìn)行輸入輸出操作時,都是以塊為單位進(jìn)行邏輯讀寫操作的。區(qū)由一系列連續(xù)的塊組成,Oralce在進(jìn)行空間分配、回收和治理時是以區(qū)為基本單位的。段由多個區(qū)組成,這些區(qū)可以是連續(xù)的也可以是不連續(xù)的,一般情況下一個對象擁有一個段。表空間中容納段和區(qū)。 在生成段的時候,會同時分配初始區(qū)(initial extents), 初始區(qū)的第一個塊就格式化為segment header,并被用來記錄free list描述信息、extents信息,HWM信息等。2.2 free list概念free list是一種單向鏈表用于定位可以接收數(shù)據(jù)的塊,在字典治理方式的表空間中,Oracle使用free list來治理未分配的存儲塊。Oracle記錄了有空閑空間的塊用于insert或Update??臻e空間來源于兩種方式:1.段中所有超過HWM的塊,這些塊已經(jīng)分配給段了,但是還未被使用。2.段中所有在HWM下的且鏈入了free list的塊,可以被重用。free list具有下列屬性l flag指示free list 被使用(1)或未使用(0)l free list 鏈的首塊的地址DBA(data block address)l free list 鏈的尾塊的地址DBAfree list 的信息通常保留在segment header中,這里給出segment header block dump片段加以說明:nfl = 3, nfb = 1 typ = 1 nxf = 0SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 SEG LST:: flg: USEDlhd: 0x03c00233 ltl: 0x03c00233 SEG LST:: flg: USEDlhd: 0x03c00234 ltl: 0x03c00234 SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 Segment Header:==> nfl: number of free lists/block==> nfb: number of free list blocks + segment header==> typ: block type ==> nxf: number of transaction free listsSegment List:==> flg: flag USED or UNUSED the free list==> lhd: head of free list==> ltl: tail of free list在每一個塊中都有一個標(biāo)記flg用來表明塊是否鏈入了 free list鏈中。 假如這個標(biāo)志置上,該塊中后向指針指向free list鏈中下一個塊的DBA。假如當(dāng)前塊是鏈的最末尾的塊,該后向指針值為0。這里給出位于free list上的block dump的片段Block header dump:; 0x03c00235Object id on Block? Yseg/obj: 0xe2d8; csc: 0x00.6264c61; itc: 1; flg: O; typ: 1 - DATA ;fsl: 1; fnx: 0x3c00234 ver: 0x01==> Seg/obj Object ID in dictionary==> csc SCN of last block cleanout ==> itc Number of ITL slots==> flg O = On freelist , - = Not on freelist==> typ 1 = DATA 2 = INDEX==> fsl ITL TX freelist slot==> fnx DBA of NEXT block on freelist舉例來說假如有五個塊在free list中,分別為A,B,C,D,E就會形成segment header->A->B->C->D->E--同時segment header->E2.3 free list類別在段中存在3類free list, 即Master Freelists (MFL), Process Freelists (PrFL), 和 Transaction Freelists. 2.3.1 Master Free List(公用空閑空間池): 每一個段中有一個Master free list,在段創(chuàng)建的時候自動生成。對于每一個段來說都有這樣一個空閑空間池,對每個進(jìn)程都是公用的,空閑空間就是位于master free list 的塊上。由于Master free list是公用的,因此當(dāng)多個進(jìn)程同時插入行到同一個段上,master free list競爭使用程度就會增加。2.3.2 Process Free Lists為了減少M(fèi)aster Free list的競爭問題, 引入了另一種free list叫做Process free lists, 根據(jù)sql命令 CREATE/ALTER 中的參數(shù)FREELISTS 創(chuàng)建. 這樣多個free list 就可以分?jǐn)偪臻e空間的治理,以提高OLTP應(yīng)用作高度并發(fā)插入和更新事務(wù)時空間分配治理的性能。通過指定CREATE TABLE / CLUSTER or INDEX的子句STORAGE的參數(shù)FREELISTS 來創(chuàng)建,例如: CREATE TABLE flg ( . . . .) . . . STORAGE ( ... FREELISTS 10 ...)。缺省的FREELISTS為1,此時不會創(chuàng)建Process free lists。當(dāng)FREELISTS>=2時,創(chuàng)建Process free lists。 進(jìn)程在使用process free list是根據(jù)進(jìn)程的Oracle PID (Process ID)來選擇的,公式如下:select list entry = (PID % NFL) + 1 NFL : FREELISTS定義的Process free list個數(shù)2.3.3 Transaction Free Lists當(dāng)Oracle需要時動態(tài)創(chuàng)建。一個Transaction Free List 是一種專門給某一個事務(wù)使用的free list. 每個段至少有16個transactions free lists, 并且這個值在需要時會增長,直到達(dá)到Segment Header塊的大小限制。一個事務(wù)只有下面情況下會需要分配一個Tx Free Lists entry: 塊中釋放空間時(DELETE or UPDATE) 并且還不存在Tx Free Lists entry時。 2.4 Free list行為2.4.1 Freelist Link and Unlink 操作 Freelist 按后進(jìn)先出隊(duì)列(LIFO) 方式治理。也就是說最后被link到freelist的塊擁有最先unlink的機(jī)會。當(dāng)塊中空閑空間增加到大于PCTFREE時,塊放入freelist中。free list中的塊可用來作update 或insert。 當(dāng)塊中沒有足夠的空間用于insert操作時并且使用空間大于PCTUSED,塊就會從free list中移出。在塊在DELETE or UPDATE 操作之后,假如使用空間落到PCTUSED下,塊再次link到free list中。每次塊加入free list時,都是link到鏈表的頭部。例如:考慮段中有120個塊編號由1到120。其中有6個塊在free list上并假設(shè)HWM是 80。(block實(shí)際使用DBA編號)10->24->45->46->65->80-現(xiàn)在作INSERT 操作,需要400 bytes空間。假設(shè)塊10上空間不足,但塊24上空間可用?,F(xiàn)在數(shù)據(jù)插入到塊 24 ,現(xiàn)在塊24的剩余空間小于該表的PCTUSED。因此塊 24 從free list鏈表中移出。PCTFREE and PCTUSED參數(shù)的目的就是用來控制數(shù)據(jù)塊從free list的鏈表中移入/移出行為的。現(xiàn)在free lists象這樣:10->45->46->65->80-然后在同一事務(wù)中作DELETE同一個段的數(shù)據(jù),使塊 54 和 67落到PCTUSED下?,F(xiàn)在這些塊加入到free list鏈中。free list鏈現(xiàn)在象這樣:67->54->10->45->46->65->80-2.4.2 Transaction Free List 算法掃描segment Header塊中所有的Tx free list,檢查是否還沒有Tx free list entry分配給transaction, 如何沒有,將尋找未使用的entry或已經(jīng)提交了事務(wù)的空的Tx free list。 假如上述搜索過程失敗, 新的entry會在segment Header塊中Tx free lists區(qū)域中開辟。假如沒有空間來生成, 事務(wù)就必須等待entry的釋放。segment header中的最大free list個數(shù):Block Size;Max # Freelists ---------------------------- 2K; ;24 4K; ;50 8K; ;101 16k; ;204 事務(wù)T1釋放出來的空閑塊(DELETE or UPDATE)的使用 : l 立即被T1所重用l 當(dāng)T1 commit后被其它需要空閑塊的事務(wù)重用,過程舉例如下: 2.5 HMW概念HIGH WATER MARK代表一個表使用的最大的(top limit)塊 。2.1中已經(jīng)提到HIGH WATER MARK 記錄在segment header中,并且在Oracle插入數(shù)據(jù)時一般增長5個blocks(并非總是5個塊,具體參見2.4.2中流程圖中HMW增長方式)。segment header block中與HWM相關(guān)信息說明如下:EXTENT CONTROL: Extent Header:: spare1: 0;;;space2: 0;;;#extents: 13;;#blocks: 1429; last map; 0x00000000; #maps: 0;;;offset: 4128; Highwater::; 0x020004d0; ext#: 12;;blk#: 275;ext size: 475#blocks in seg. hdr's freelists: 5;;#blocks below: 1229; mapblk; 0x00000000; offset: 12;Unlocked==> spare1:this field is no longer used (old inc#, now always 0)==> space2:this field is no longer used (old ts#, now always 0)==> #extents: number of extents allocated to segment==> #blocks:; number of blocks allocated to segment==> last map: address of last extent map block 0 if extent map is entirely in the segment header==> #maps:;number of extent map block==> offset:offset to end of extent map==> HWM dba:; address of block at highwater mark==> ext#:;;HWM extent number relative to segment==> blk#:;;HWM block number within extent==> ext size: HWM extent size (in blocks)==> #blocks in seg. hdr's freelists: number of blocks in seg. hdr's free list ==> #blocks below: number of blocks below HWM==> mapblk dba: dba of extent map block containing HWM extent is 0 if HWM is in the segment header==> offset:offset within extent map block is the ext# if HWM is in segment header==> Locked by: if locked by a transaction, the xid is displayedHWM可以說是已經(jīng)使用過的存儲空間和未使用過的存儲空間之間的分界線。 在表使用過程中,HWM一直向一個方向移動,插入記錄時HWM可能會向增加的方向移動,但是刪除記錄時HWM并不會向相反的方向移動。參見2.4.2。下圖顯示了某個數(shù)據(jù)段中HWM的位置情況。圖2.5HIGH WATER MARK之所以重要是因?yàn)樗鼘θ頀呙栊阅艿挠绊?。?dāng)實(shí)施一個全表掃描時,Oracle會讀取所有HIGH WATER MARK下的塊即使它們是空塊。當(dāng)HIGH WATER MARK 下有很多unused block時實(shí)施全表掃描會增加額外的不必要的I/O。它也會在全局共享區(qū)中填充很多很多空塊。3.分析方法 存儲參數(shù)基本上屬于oracle internal的東西,因此oralce并沒有提供很好的手段來分析。但是對于DBA來說,還是可以通過block dump和DBMS_SPACE等手段來獲取部分信息。3.1 提取block和free list信息創(chuàng)建dbms_space使用的存儲過程show_spaceSQL>create or replace procedure show_space( p_segname in varchar2,p_owner in varchar2 default user,p_type in varchar2 default 'TABLE',p_partition in varchar2 default NULL )asl_free_blks number;l_total_blocks number;l_total_bytes number;l_unused_blocks number;l_unused_bytes number;l_LastUsedExtFileId number;l_LastUsedExtBlockId number;l_last_used_block number;procedure p( p_label in varchar2, p_num in number )isbegindbms_output.put_line( rpad(p_label,40,'.') p_num );end;begindbms_space.free_blocks( segment_owner => p_owner,segment_name => p_segname,segment_type => p_type,partition_name => p_partition,freelist_group_id => 0,free_blks => l_free_blks );dbms_space.unused_space( segment_owner => p_owner,segment_name => p_segname,segment_type => p_type,partition_name => p_partition,total_blocks => l_total_blocks,total_bytes => l_total_bytes,unused_blocks => l_unused_blocks,unused_bytes => l_unused_bytes,last_used_extent_file_id => l_LastUsedExtFileId,last_used_extent_block_id => l_LastUsedExtBlockId,last_used_block => l_last_used_block );p( 'Free Blocks', l_free_blks );p( 'Total Blocks', l_total_blocks );p( 'Total Bytes', l_total_bytes );p( 'Unused Blocks', l_unused_blocks );p( 'Unused Bytes', l_unused_bytes );p( 'Last Used Ext FileId', l_LastUsedExtFileId );p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );p( 'Last Used Block', l_last_used_block );end;過程已創(chuàng)建。SQL> create table t1(a char(1000)) storage( freelists 3);表已創(chuàng)建。 SQL> set serveroutput on;SQL> exec show_space('T1');Free Blocks.............................0;;;;<==Number of blocks on freelistTotal Blocks............................5;;;;<==Total data blocks in segmentTotal Bytes.............................20480<==Total bytes in segmentUnused Blocks...........................4;;;;<==Total unused blocks in segmentUnused Bytes............................16384<==Total unused bytes in segmentLast Used Ext FileId....................15;;;<==File id of last used extentLast Used Ext BlockId...................562;;<==Block id of last used extentLast Used Block.........................1;;;;<==Last used block in extentPL/SQL 過程已成功完成。有關(guān)show_space的進(jìn)一步使用技巧可參考文獻(xiàn)5。以下利用上面得到的數(shù)據(jù)對segment header block進(jìn)行dump。SQL>alter system dump datafile 15 block 562;在udump/ora10792.trc中*** 2004-09-08 15:29:57.343Start dump data blocks tsn: 27 file#: 15 minblk 562 maxblk 562buffer tsn: 27 rdba: 0x03c00232 (15/562)scn: 0x0000.064560e4 seq: 0x02 flg: 0x00 tail: 0x60e41002frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED Extent Control Header ----------------------------------------------------------------- Extent Header:: spare1: 0;;;space2: 0;;;#extents: 1;;;#blocks: 4;; last map; 0x00000000; #maps: 0;;;offset: 2080; Highwater::; 0x03c00233; ext#: 0;;;blk#: 0;;;ext size: 4;; #blocks in seg. hdr's freelists: 0;; #blocks below: 0;; mapblk; 0x00000000; offset: 0;; Unlocked Map Header:: next; 0x00000000; #extents: 1;obj#: 60033; flag: 0x40000000 Extent Map ----------------------------------------------------------------- 0x03c00233; length: 4;; nfl = 3, nfb = 1 typ = 1 nxf = 0 SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000 End dump data blocks tsn: 27 file#: 15 minblk 562 maxblk 562 對于上述塊中字段的說明,以及相關(guān)試驗(yàn)。 由于篇幅所限,本文不再列舉??蓞⒖嘉墨I(xiàn)7。對非segment header的data block的dump方法和上述類似。data block的結(jié)構(gòu)和segment header block不一樣,假如需要了解,可查閱參考文獻(xiàn)和資料。3.2 提取HWM信息3.2.1 HWM位置HWM位置按下面的公式計算: HWM = useed byte = Total Bytes - Unused BlocksTotal Bytes和Unused Blocks都可以用show_space提取。還可以通過ANALYZE tables得到HWM信息. DBA_TABLES視圖中包含了可用于各表空間分析的列。其中blocks代表已使用過的塊即HWM,empty_blocks代表未使用的空間。3.2.1 HWM下空間利用信息要比較有數(shù)據(jù)行的塊的塊數(shù)和HIGH WATER MARK下總塊數(shù),可以用下面的公式來展示HWM下未用空間的比例。p = 1- r/hr:有數(shù)據(jù)行的塊的塊數(shù)h:HWM下的塊數(shù).r可以通過如下方法獲得:Oracle7:SELECT count(distinct substr(rowid, 15,4) substr(rowid, 1,8) ); FROM schema.table;Oracle8 and Oracle9:SELECT count(distinct substr(rowid, 7,3) substr(rowid, 10,6) ); FROM schema.table;假如公式計算的結(jié)果 p是0,就不需要對表進(jìn)行重建。假如結(jié)果p大于0,應(yīng)該考慮系統(tǒng)狀況和應(yīng)用需要來決定是否需要總組表。4.優(yōu)化4.1手工回收存儲空間在HIGH WATER MARK以上的塊對性能沒有影響,但是會耗費(fèi)空間。如何空間大小是一個考慮的問題,就可以決定回收空塊。假設(shè)表T1的存儲示意圖如圖2.5所示,使用ALTER TABLE ... DEALLOCATE UNUSED語句可以回收HWM以上的空間。比如:alter table t1 deallocate unused;回收后T1的存儲示意如圖4.1.1圖4.1.1 假如在ALTER TABLE ... DEALLOCATE UNUSED語句中使用了KEEP要害字,則可以在HWM之后保留指定大小的空閑空間,比如: alter table t1 deallocate unused keep 10K;回收后T1的存儲示意如圖4.1.2圖4.1.24.2刪減表 根據(jù)3.2.1可以得到HWM以下塊的使用情況。如何p大于時,對全表掃描性能會產(chǎn)生影響,同時也會耗用空間。假如能夠確認(rèn)應(yīng)用有良好的索引幾乎不會用到全表掃描,那么HIGH WATER MARK以下的空塊,盡管耗費(fèi)了空間,不會對訪問產(chǎn)生影響。假如不能確定,那么就需要考慮刪減表。 刪減表的操作將刪除表中所有的記錄,并且重置HWM標(biāo)記。表在刪減之后將成為一個空表。 在Oracle中刪減表只有如下的兩種辦法:1.使用drop語句 先使用drop語句刪除整個表,然后再重建這個表。在刪除-重建的過程中,與表相關(guān)的所有索引、完整性約束以及觸發(fā)器都會丟失,并且所有依靠于該表的對象都會變?yōu)镮NVALID狀態(tài),同時原來爭對表的授權(quán)也會失效。因此采用這種方式刪除表中的記錄代價太大。2.使用TRUNCATE語句 TRUNCATE語句屬于DDL語句,不會產(chǎn)生任何回退信息,并且被立即自動提交。在執(zhí)行TRUNCATE語句時不會影響到與被刪減表相關(guān)的任何數(shù)據(jù)庫對象與授權(quán),也不會觸發(fā)表中所定義的觸發(fā)器。此外,在對標(biāo)進(jìn)行刪減時,HWM將重置,已經(jīng)為表分配的存儲空間將被回收。 在執(zhí)行TRUNCATE語句時,可以通過drop storage子句和reuse storage子句來控制被釋放的區(qū)是否回收到表空間中。如何作在線系統(tǒng)的TRUNCATE,不希望表長時間鎖住,那么可以使用reuse storage子句,僅將HWM重置。4.3 free list優(yōu)化free list 競爭出現(xiàn)在多個進(jìn)程使用同一個free list并試圖同時修改free list頭部數(shù)據(jù)塊時??梢酝ㄟ^查詢視圖v$waitsate的class類型為data block 的記錄來檢查競爭情況。 產(chǎn)生data block類型競爭的主要原因是多個進(jìn)程試圖同時修改free list頭部數(shù)據(jù)塊。 然而,它也會出現(xiàn)在當(dāng)進(jìn)程預(yù)備將塊讀入buffer cathe時,另一個進(jìn)程需要訪問同一個塊。假如能在V$SESSION_WAIT中正好捕捉buffer busy waits,就可以通過查詢V$SESSION_WAIT中的P3來判定是那一類。A 0 或 1014代表讀類型,其他的值為修改競爭的類型。 下一步需要確定競爭涉及那些段。 假如能夠在V$SESSION_WAIT捕捉waits,就可以用P1和P2的值 (對應(yīng)file 和 block) 在DBA_EXTENTS中找到段名。 如何是一個表,就很可能需要重建表來創(chuàng)建更多的process freelists。 一種計算需要創(chuàng)建多少個freelist的方法是dump一些段中接近HWM的塊,檢查interested transaction list的個數(shù),具體方法可參見3.1。interested transactions個數(shù)的峰值加1 就是需要的最小process freelists的值。從2.3和2.4可以看出,使用多個free list可能導(dǎo)致更多的空塊未被使用, 也可能導(dǎo)致段更快地擴(kuò)展。 假如性能是當(dāng)前所關(guān)心的重點(diǎn),那么多free lists 可以用來提高并發(fā)訪問能力,當(dāng)然會增加一些額外空間的耗用。然而,假如空間使用大小是首先考慮的因素,那么推薦使用single freelist,使參數(shù)FREELISTS=1, 當(dāng)然就不能提升并發(fā)事務(wù)的性能了。V$WAITSTAT 也可顯示其他類型class的競爭,包括segment header 和free list。 出現(xiàn)在同一個free list group中多個事務(wù)需要同時更新它們的free list header記錄時。 有多種方法來解決這個問題如重建表采用更多的free list groups,或者增加 _bump_highwater_mark_count大小,或者調(diào)整應(yīng)用本身。參考文獻(xiàn)和資料:1.《FREELISTS and FREELIST GROUPS. SCOPE & APPLICATION 》2.《INITRANS, MAXTRANS, FREELISTS and FREELIST GROUPS, PCTFREE and PCTUSED》,Mike Ault3.《Freelist Internals: An OverviewKnowledge》,XPert for Oracle Administration4.《Blockdump - 8.x Data Segment Header in Oracle》5.《AskTom dbms_space_free_space》,http://asktom.oracle.com6.《Data Blocks and Freelists》,http://www.ixora.com.au7.《偷窺Data block 的物理結(jié)構(gòu)》,http://www.itpub.net8.《Oracle 9i for windows nt/2000數(shù)據(jù)系統(tǒng)培訓(xùn)教程》,清華大學(xué)出版社上述部分文章在我的blog網(wǎng)站http://blog.csdn.net/youbo2004上可找到,對于研究free list,free list group和block等有很好的幫助。
標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 国产色窝| 亚洲精品一区二区手机在线 | 59pao成国产成视频永久免费 | 人超级碰碰视频在线观看 | 亚洲高清综合 | 国产免费福利片 | 免费国内精品久久久久影院 | 国产主播在线观看 | 久久久久久免费播放一级毛片 | 99久久精品国产片 | 又亲又揉摸下面视频免费看 | 国内自拍网址 | 青青热久免费精品视频精品 | 中文字幕乱码二三区免费 | 美女黄视频大全 | 免费一级生活片 | 久久免费视频3 | 68久久久久欧美精品观看 | 亚洲狠狠 | 亚洲国产二区三区久久 | 亚洲欧美二区三区久本道 | 久久精品久久精品久久 | 亚洲成a人片在线观看播放 亚洲成a人片在线播放观看国产 | 久久精品这里有 | 日本欧美片 | 91射射射 | 99re7在线精品免费视频 | 亚洲精品午夜国产va久久成人 | 日本免费一区二区三区a区 日本内谢69xxxx免费播放 | 中文字幕欧美日韩久久 | 色播欧美| 韩国一级毛片a级免观看 | 国内在线视频 | 中文字幕在线视频播放 | 黄色免费在线视频 | 国产综合欧美 | 国产精品视频一区二区三区w | 欧美一区二区三区男同 | 青草资源视频在线高清观看 | 欧美一级黄| 日本一级毛片视频 |