Oracle高水位HWMHighWaterMark說(shuō)明_第1頁(yè)
Oracle高水位HWMHighWaterMark說(shuō)明_第2頁(yè)
Oracle高水位HWMHighWaterMark說(shuō)明_第3頁(yè)
Oracle高水位HWMHighWaterMark說(shuō)明_第4頁(yè)
Oracle高水位HWMHighWaterMark說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一. 準(zhǔn)備知識(shí):ORACL的邏輯存儲(chǔ)管理.ORACLES邏輯存儲(chǔ)上分4個(gè)粒度:表空間,段,區(qū) 和 塊.1.1塊:是粒度最小的存儲(chǔ)單位,現(xiàn)在標(biāo)準(zhǔn)的塊大小是8KORACLE每一次 I/O操作也是按塊來(lái)操作的,也就是說(shuō)當(dāng)ORACL從數(shù)據(jù)文件讀數(shù)據(jù)時(shí),是讀取多 少個(gè)塊,而不是多少行.每一個(gè)Block里可以包含多個(gè)row.1.2區(qū):由一系列相鄰的塊而組成,這也是ORACL空間分配的基本單位,舉 個(gè)例子來(lái)說(shuō),當(dāng)我們創(chuàng)建一個(gè)表Dave時(shí),首先ORACL會(huì)分配一區(qū)的空間給這個(gè)表 隨著不斷的INSERT數(shù)據(jù)到Dave,原來(lái)的這個(gè)區(qū)容不下插入的數(shù)據(jù)時(shí),ORACL是以 區(qū)為單位進(jìn)行擴(kuò)展的,也就是說(shuō)再分配多少個(gè)區(qū)給D

2、ave,而不是多少個(gè)塊.1.3段:是由一系列的區(qū)所組成,一般來(lái)說(shuō),當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí)(表,索引), 就會(huì)分配一個(gè)段給這個(gè)對(duì)象所以從某種意義上來(lái)說(shuō),段就是某種特定的數(shù)據(jù) 如 CREATE TABLE Dav這個(gè)段就是數(shù)據(jù)段,而 CREATE INDEX ON Dave(NAME), ORACLS樣會(huì)分配一個(gè)段給這個(gè)索引,但這是一個(gè)索引段了 .查詢段的信息可以 通過(guò)數(shù)據(jù)字典:SELECT * FROM USER_SEGMENT獲得.1.4表空間:包含段,區(qū)及塊.表空間的數(shù)據(jù)物理上儲(chǔ)存在其所在的數(shù)據(jù)文 件中.一個(gè)數(shù)據(jù)庫(kù)至少要有一個(gè)表空間表空間(tableSpace)段(segment)盤區(qū)(exten

3、t)塊(block)關(guān)系 http:/blog.csd n.n et/tia nlesoftware/archive/2009/12/08/4962476.aspx當(dāng)我們創(chuàng)建了一個(gè)表,即使我沒(méi)有插入任何一行記錄,ORACL還是給它分配 了 8個(gè)塊.當(dāng)然這個(gè)跟建表語(yǔ)句的INITIAL參數(shù)及MINEXTENT參數(shù)有關(guān).女口: STORAGE(INITIAL 64KMINEXTENTS 1MAXEXTENTS UNLIMITED);也就是說(shuō),在這個(gè)對(duì)象創(chuàng)建以后ORACLES少給它分配一個(gè)區(qū),初始大小是 64K, 一個(gè)標(biāo)準(zhǔn)塊的大小是 8K,剛好是8個(gè)BLOCK.Oracle Table 創(chuàng)建參數(shù)說(shuō)明h

4、ttp:/blog.csd n.n et/tia nlesoftware/archive/2009/12/07/4954417.aspx二. 高水線(High Water Mark)2.1官網(wǎng)說(shuō)明如下http:/dow l.htm#CNCPT89022To man age space, Oracle Database tracks the state of blocks in the segment. The high water mark (HWM)is the point in a segment beyond which data blocks are un formatted and

5、have n ever bee n used.MSSM uses free lists to man age segme nt space. At table creati on, no blocks in the segme nt are formatted. When a sessi on first in serts rows into the table, the database searches the free list for usable blocks. If the database finds no usable blocks, then it preformats a

6、group of blocks, places them on the free list, and begi ns in sert ing data into the blocks. In MSSM, a full table scan reads all blocks below the HWM.ASSM does not use free lists and so must man age space differe ntly.When a session first inserts data into a table, the database formats a sin gle bi

7、tmap block in stead of preformatt ing a group of blocks as in MSSM The bitmap tracks the state of blocks in the segme nt, tak ing the place of the free list. The database uses the bitmap to find free blocks and the n formats each block before filli ng it with data.ASSM spread outin serts among block

8、s to avoid con curre ncy issues.Oracle 自動(dòng)段空間管理(ASSM:auto segment space management) http:/blog.csd n.n et/tia nlesoftware/archive/2009/12/07/4958989.aspxEvery data block in an ASSM segment is in one of the following states:(1) Above the HWMThese blocks are un formatted and have n ever bee n used.(2)

9、Below the HWMThese blocks are in one of the following states:(1) Allocated, but currently unformatted and unused(2) Formatted and contain data(3) Formatted and empty because the data was deletedFigure 12-23 depicts an ASSMsegment as a horizontal series of blocks . At table creatio n, the HWM% at the

10、 beg inning of the segme nt on the left. Because no data has bee n in serted yet, all blocks in the segme nt are un formatted and n ever used.Figure 12-23 HWM at Table CreationHWM at T 2blc CreationNever Used,UnformattadSuppose that a transaction inserts rows into the segment. The database must allo

11、cate a group of blocks to hold the rows.The allocated blocksfall below the HWM. The database formats a bitmap block in this group to hold the metadata, but does not preformat the rema ining blocks in the group.In Figure 12-24, the blocks below the HWMre allocated, whereas blocks above the HWM are n

12、either allocated or formatted. As in serts occur, the database can write to any block with available space. The low high water mark (low HWM) marks the point below which all blocks are known to be formatted because they either con ta in data or formerly contained data.Low HWMNever Used. UnformattedF

13、igure 12-24 HWM and Low HWMIn Figure 12-25, the database chooses a block between the HWMnd low HWM and writes to it. The database could have just as easily chose n any other block between the HWM and low HWM, or any block below the low HWMthat had available space. In Figure 12-25 , the blocks to eit

14、her side of the newly filled block are unformatted.Figure 12-25 HWM and Low HWMLow HWMHWMNever Used, UnfcrmaltedThe low HWM is importa nt in a full table sca n.Because blocks belowthe HWM are formatted only whe n used, some blocks could be un formatted, as in Figure 12-25 . For this reason,the datab

15、ase reads the bitmap blockto obta in the locatio n of the low HWM . The database reads all blocks up to the low HWMecause they are known to be formatted, and then carefully reads only the formatted blocks between the low HWM and the HWM.Assume that a new transaction inserts rows into the table, but

16、the bitmap in dicates that in sufficie nt free space exists un der the HWM. In Figure 12-26 , the database advances the HWM to the right, allocating a new group of un formatted blocks.Figure 12-26 Adva ncing HWM and Low HWMLow hwmhwmNever Used. UnformattedWhenthe blocks between the HWMnd low HWMre f

17、ull, the HWMdvances to the right and the low HWM adva nces to the location of the old HWM. Asthe database in serts data over time, the HWMcontinues to adva nee to the right, with the low HWM always traili ng beh ind it.Uni ess you manu allyrebuild, trun cate, or shri nk the object, the HWM n ever re

18、treats.Oracle數(shù)據(jù)塊Block說(shuō)明 http:/blog.csd n.n et/tia nlesoftware/archive/2011/05/12/6414765.aspx2. 2 Oracle表段中的高水位線 HWM在Oracle數(shù)據(jù)的存儲(chǔ)中,可以把存儲(chǔ)空間想象為一個(gè)水庫(kù),數(shù)據(jù)想象為水 庫(kù)中的水。水庫(kù)中的水的位置有一條線叫做水位線,在Oracle中,這條線被稱為高水位線(High-warter mark, HWM )。在數(shù)據(jù)庫(kù)表剛建立的時(shí)候,由于沒(méi)有 任何數(shù)據(jù),所以這個(gè)時(shí)候水位線是空的,也就是說(shuō)HW為最低值。當(dāng)插入了數(shù)據(jù) 以后,高水位線就會(huì)上漲,但是這里也有一個(gè)特性,就是如果你

19、采用delete語(yǔ)句刪除數(shù)據(jù)的話,數(shù)據(jù)雖然被刪除了,但是高水位線卻沒(méi)有降低,還是你剛才刪 除數(shù)據(jù)以前那么高的水位。也就是說(shuō),這條高水位線在日常的增刪操作中只會(huì)上 漲,不會(huì)下跌。HW通常增長(zhǎng)的幅度為一次5個(gè)數(shù)據(jù)塊.Select語(yǔ)句會(huì)對(duì)表中的數(shù)據(jù)進(jìn)行一次掃描,但是究竟掃描多少數(shù)據(jù)存儲(chǔ)塊 呢,這個(gè)并不是說(shuō)數(shù)據(jù)庫(kù)中有多少數(shù)據(jù),Oracle就掃描這么大的數(shù)據(jù)塊,而是Oracle會(huì)掃描高水位線以下的數(shù)據(jù)塊。現(xiàn)在來(lái)想象一下,如果剛才是一張剛剛 建立的空表,你進(jìn)行了一次 Select操作,那么由于高水位線 HWMfc最低的0位 置上,所以沒(méi)有數(shù)據(jù)塊需要被掃描,掃描時(shí)間會(huì)極短。而如果這個(gè)時(shí)候你首先插 入了一千萬(wàn)

20、條數(shù)據(jù),然后再用delete語(yǔ)句刪除這一千萬(wàn)條數(shù)據(jù)。由于插入了一 千萬(wàn)條數(shù)據(jù),所以這個(gè)時(shí)候的高水位線就在一千萬(wàn)條數(shù)據(jù)這里。后來(lái)刪除這一千 萬(wàn)條數(shù)據(jù)的時(shí)候,由于delete語(yǔ)句不影響高水位線,所以高水位線依然在一千 萬(wàn)條數(shù)據(jù)這里。這個(gè)時(shí)候再一次用select語(yǔ)句進(jìn)行掃描,雖然這個(gè)時(shí)候表中沒(méi) 有數(shù)據(jù),但是由于掃描是按照高水位線來(lái)的,所以需要把一千萬(wàn)條數(shù)據(jù)的存儲(chǔ)空 間都要掃描一次,也就是說(shuō)這次掃描所需要的時(shí)間和掃描一千萬(wàn)條數(shù)據(jù)所需要的 時(shí)間是一樣多的。所以有時(shí)候有人總是經(jīng)常說(shuō),怎么我的表中沒(méi)有幾條數(shù)據(jù),但 是還是這么慢呢,這個(gè)時(shí)候其實(shí)奧秘就是這里的高水位線了。那有沒(méi)有辦法讓高水位線下降呢,其實(shí)有一種

21、比較簡(jiǎn)單的方法,那就是采用 TRUNCATE句進(jìn)行刪除數(shù)據(jù)。采用TRUNCATE句刪除一個(gè)表的數(shù)據(jù)的時(shí)候,類 似于重新建立了表,不僅把數(shù)據(jù)都刪除了,還把HW給清空恢復(fù)為0。所以如果需要把表清空,在有可能利用TRUNCATE句來(lái)刪除數(shù)據(jù)的時(shí)候就利用 TRUNCATE 語(yǔ)句來(lái)刪除表,特別是那種數(shù)據(jù)量有可能很大的臨時(shí)存儲(chǔ)表。在手動(dòng)段空間管理(Manual Segment Space Management)中,段中只有一 個(gè)HWM但是在Oracle 9i Release1 才添加的自動(dòng)段空間管理(Automatic Segment Space Managemen)中,又有了一個(gè) 低HW啲概念出來(lái)。為什

22、么有了 HW還又有一個(gè)低HWI呢,這個(gè)是因?yàn)樽詣?dòng)段空間管理的特性造成的。在手段段 空間管理中,當(dāng)數(shù)據(jù)插入以后,如果是插入到新的數(shù)據(jù)塊中,數(shù)據(jù)塊就會(huì)被自動(dòng) 格式化等待數(shù)據(jù)訪問(wèn)。而在自動(dòng)段空間管理中,數(shù)據(jù)插入到新的數(shù)據(jù)塊以后,數(shù) 據(jù)塊并沒(méi)有被格式化,而是在第一次訪問(wèn)這個(gè)數(shù)據(jù)塊的時(shí)候才格式化這個(gè)塊 。所 以我們又需要一條水位線,用來(lái)標(biāo)示已經(jīng)被格式化的塊。這條水位線就叫做低HWM 一般來(lái)說(shuō),低HW肯定是低于等于HW啲。23修正ORACL表的高水位線在ORACL中,執(zhí)行對(duì)表的刪除操作不會(huì)降低該表的高水位線。而全表掃描 將始終讀取一個(gè)段(extent)中所有低于高水位線標(biāo)記的塊。如果在執(zhí)行刪除操作 后不降

23、低高水位線標(biāo)記,則將導(dǎo)致查詢語(yǔ)句的性能低下。rebuild, trun cate,shrin k,move等操作會(huì)降低高水位。2.3.1 執(zhí)行表重建指令 alter table table_name move;在線轉(zhuǎn)移表空間 ALTER TABLE . MOVE TABLESPACE .當(dāng)你創(chuàng)建了一個(gè)對(duì)象如表以后,不管你有沒(méi)有插入數(shù)據(jù),它都會(huì)占用一些 塊ORACLE會(huì)給它分配必要的空間.同樣,用ALTER TABLE MOVE放自由空間 后,還是保留了一些空間給這個(gè)表.ALTER TABLE . MOVE后面不跟參數(shù)也行,不跟參數(shù)表還是在原來(lái)的表空 間,Move后記住重建索引.如果以后還要繼續(xù)

24、向這個(gè)表增加數(shù)據(jù),沒(méi)有必要 move 只是釋放出來(lái)的空間,只能這個(gè)表用,其他的表或者segme nt無(wú)法使用該空間。2.3.2 執(zhí)行 alter table table_name shrink space;此命令為Oracle 10g新增功能,再執(zhí)行該指令之前必須允許行移動(dòng) altertable table_ name en able row moveme nt;233重建表復(fù)制要保留的數(shù)據(jù)到臨時(shí)表t, drop原表,然后rename臨時(shí)表t為原表2.3.4用邏輯導(dǎo)入導(dǎo)出:Emp/lmp2.3.5. Alter table table_ name deallocate unu sedDEALL

25、OCATENUSE為釋放HW上面的未使用空間,但是并不會(huì)釋放HW下面 的自由空間,也不會(huì)移動(dòng)HW啲位置.2.3.6 推薦使用 truncate.2.3.7 一些注意事項(xiàng)Oracle 9i:(1)如果是 INEXTENT 可以使 alter table table name deallocate un used 將HW以上所有沒(méi)使用的空間釋放(2)如果MINEXTENT >HWM釋放 MINEXTENT以上的空間。如果要釋放 HW以上的空間則使用KEEP 0SQL>alter table tables name deallocate unu sed keep 0;(3)truncat

26、e table drop storage (缺省值)命令可以將 MINEXTENT上的 空間完全釋放(交還給操作系統(tǒng)),并且重置HWM(4)如果僅是要移動(dòng)HWM而不想讓表長(zhǎng)時(shí)間鎖住,可以用truncate table reuse storage,僅將 HWMt置。(5)ALTERTABLEMOV會(huì)將 HW移動(dòng),但在MOVE寸需要雙倍的表空間,而且 如果表上有索引的話,需要重構(gòu)索引(6)DELETES不會(huì)重置 HWM也不會(huì)釋放自由的空間(也就是說(shuō)DELETE出 來(lái)的空間只能給對(duì)象本身將來(lái)的INSERT/UPDAT使用,不能給其它的對(duì)象使用)Oracle 10g :(1) 可以使用 alter t

27、able test_tab shrink space命令來(lái)聯(lián)機(jī)移動(dòng) hwm,(2)如果要同時(shí)壓縮表的索引,可以發(fā)布:alter table test_tab shrink space cascade2.4 HWM特點(diǎn)2.4.1 ORACLE用HWI來(lái)界定一個(gè)段中使用的塊和未使用的塊.舉個(gè)例子來(lái)說(shuō),當(dāng)我們創(chuàng)建一個(gè)表時(shí),ORACL蹴會(huì)為這個(gè)對(duì)象分配一個(gè)段.在 這個(gè)段中,即使我們未插入任何記錄,也至少有一個(gè)區(qū)被分配,第一個(gè)區(qū)的第一個(gè) 塊就稱為段頭(SEGMENT HEADER頭中就儲(chǔ)存了一些信息,基中HW啲信息就存 儲(chǔ)在此.此時(shí),因?yàn)榈谝粋€(gè)區(qū)的第一塊用于存儲(chǔ)段頭的一些信息,雖然沒(méi)有存儲(chǔ)任何 實(shí)際的記

28、錄,但也算是被使用,此時(shí)HWM!位于第2個(gè)塊.當(dāng)我們不斷插入數(shù)據(jù)到 表后,第1個(gè)塊已經(jīng)放不下后面新插入的數(shù)據(jù),此時(shí)ORACLE各高水位之上的塊用 于存儲(chǔ)新增數(shù)據(jù),同時(shí),HWM本身也向上移.也就是說(shuō),當(dāng)我們不斷插入數(shù)據(jù) 時(shí),HW除往不斷上移,這樣,在HW之下的,就表示使用過(guò)的塊,HWM之上的就表示 已分配但從未使用過(guò)的塊.242. HWM在插入數(shù)據(jù)時(shí),當(dāng)現(xiàn)有空間不足而進(jìn)行空間的擴(kuò)展時(shí)會(huì)向上移,但刪 除數(shù)據(jù)時(shí)不會(huì)往下移.ORACL環(huán)會(huì)釋放空間以供其他對(duì)象使用,有一條簡(jiǎn)單的理由:由于空間是 為新插入的行保留的,并且要適應(yīng)現(xiàn)有行的增長(zhǎng)。被占用的最高空間稱為最高使 用標(biāo)記(HWM),2.4.3. HWM

29、的信息存儲(chǔ)在段頭當(dāng)中.HW本身的信息是儲(chǔ)存在段頭.在段空間是手工管理 方式時(shí)ORACLE!通過(guò) FREELIST一個(gè)單向鏈表)來(lái)管理段內(nèi)的空間分配.在段空間是自動(dòng)管理方式時(shí) (ASSM),ORACL是通過(guò)BITMAP來(lái)管理段內(nèi)的空間分配.2.4.4. ORACLE的全表掃描是讀取高水位標(biāo)記(HWM以下的所有塊.所以問(wèn)題就產(chǎn)生了 .當(dāng)用戶發(fā)出一個(gè)全表掃描時(shí),ORACLE!臺(tái)終必須從段一直 掃描到HWM即使它什么也沒(méi)有發(fā)現(xiàn)。該任務(wù)延長(zhǎng)了全表掃描的時(shí)間。2.4.5. 當(dāng)用直接路徑插入行時(shí),即使 HWMU下有空閑的數(shù)據(jù)庫(kù)塊,鍵入在插入 數(shù)據(jù)時(shí)使用了 append關(guān)鍵字,則在插入時(shí)使用HWM以上的數(shù)據(jù)塊

30、,此時(shí)HW會(huì) 自動(dòng)增大。例如,通過(guò)直接加載插入(用 APPEND提示插入)或通過(guò)SQL*LOADERft接 路徑 數(shù)據(jù)塊直接置于HWM之上。它下面的空間就浪費(fèi)掉了。三. 相關(guān)測(cè)試1)創(chuàng)建測(cè)試表SQL> create table tt (id nu mber);Table created.此時(shí)表沒(méi)有分析,是原始的數(shù)據(jù),即 8個(gè)數(shù)據(jù)塊。SQL>SELECT segme nt_name,segme nt_type,blocks FROM dba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLO

31、CKSTTTABLE8SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT2) 向表中插入一些測(cè)試數(shù)據(jù)SQL> declare2 i nu mber;3 beg in4 for i in 1.10000 loop5 in sert into tt values(i);6 end loop;7 commit;8 end;9 /PL/SQL procedur

32、e successfully completed.3) 在次查看表的信息SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTTSQL> SELECTsegme nt_name,segme nt_type,blocks FROMiba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMEN

33、T_TYPE BLOCKSTTTABLE24此時(shí)表TT占用的數(shù)據(jù)庫(kù)已經(jīng)是24個(gè)了。但是user_tables 顯示的信息還 是為空。因?yàn)闆](méi)有做統(tǒng)計(jì)分析。4) 收集統(tǒng)計(jì)信息SQL> exec DBMS_STATS.GATHER_TABLE_STATS('SYS','TT');PL/SQL procedure successfully completed.SQL> SELECTsegme nt_name,segme nt_type,blocks FROMdba_segme nts WHERE segme nt_n ame='TT'SEGM

34、ENT_NAME SEGMENT_TYPE BLOCKSTTTABLE24SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT10000200此時(shí)user_tables 已經(jīng)有了數(shù)據(jù),顯示的使用了 20個(gè)數(shù)據(jù)塊。但是 empty_blocks還是為空。這里要注意的地方。這個(gè)字段只有使用analyze收集統(tǒng)計(jì)信息之后才會(huì)有數(shù)據(jù)。5)使用analyze收集統(tǒng)計(jì)信息

35、SQL> ANALYZE TABLE TT COMPUTE STATISTICS;Table an alyzed.SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT10000203-這里有顯示空的數(shù)據(jù)庫(kù)有3個(gè)。 注意:20+3=23.比占用的24個(gè)數(shù)據(jù)塊少 一個(gè)。因?yàn)橛幸粋€(gè)數(shù)據(jù)庫(kù)塊被保留用作 segment header。SQL> SELECTs

36、egme nt_name,segme nt_type,blocks FROMiba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLOCKSTTTABLE246) delete 數(shù)據(jù),不會(huì)降低高水位SQL> delete from tt;10000 rows deleted.SQL> commit;Commit complete.SQL> SELECTsegme nt_name,segme nt_type,blocks FROMdba_segme nts WHERE segme nt

37、_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLOCKSTTTABLE24SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT10000203SQL> an alyze table tt compute statistics;Table an alyzed.SQL> SELECT table_ name

38、, num _rows,blocks,empty_blocks FROM user_tablesWHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT0203SQL> SELECTsegme nt_name,segme nt_type,blocks FROMiba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLOCKSTTTABLE24SQL>7) truncate表,可以降低高水位SQL> tr

39、un cate table tt;Table trun cated.SQL> SELECTSegme nt_name,segme nt_type,blocks FROMdba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLOCKSTTTABLE8SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BL

40、OCKS EMPTY_BLOCKSTT0203-段的信息沒(méi)有改變,收集一下統(tǒng)計(jì)信息看看SQL> exec dbms_stats.gather_table_stats('SYS','TT');PL/SQL procedure successfully completed.SQL> SELECT table_ name, num _rows,blocks,empty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT0

41、03SQL> SELECTsegme nt_name,segme nt_type,blocks FROMiba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLOCKSTTTABLE8-段的信息已經(jīng)改變,但是empty_blocks段沒(méi)有改變,該段只有使用 analyze 才能改變。SQL> an alyze table tt compute statistics;Table an alyzed.SQL> SELECT table_ name, num _rows,blocks,em

42、pty_blocks FROM user_tables WHERE table_name='TT'TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKSTT007SQL> SELECTsegme nt_name,segme nt_type,blocks FROMdba_segme nts WHERE segme nt_n ame='TT'SEGMENT_NAME SEGMENT_TYPE BLOCKSTTTABLE8SQL>-總共8個(gè)數(shù)據(jù)塊,7個(gè)為空,還有一個(gè)是 segment header。四. Alter table mo

43、ve 和 Shrink 區(qū)別在下面2篇blog有說(shuō)明:http:/blog.csd n.n et/robi nson 1988/archive/2010/09/07/5868742.aspxalter table move 跟 shrink space 的區(qū)另http:/blog.csd n.n et/wyzxg/archive/2010/05/28/5631721.aspxMOS上的說(shuō)明,ID:577375.1:The shrink algorithm starts from the bottom of the segment and starts moving those rows to

44、the beg inning of the segme nt. Shrink is a comb in ati on of delete/i nsert pair for every row moveme ntand this gen erates man yUNDO and REDO blocks .Move從segment的底部開始,move這些rows到segment的頭部。Shrink 則是delete/insert相結(jié)合,這樣會(huì)產(chǎn)生非常多的 UND(和REDO4.1 Shrink在10g之后,整理碎片消除行遷移的新增功能shrink spaceSQL>alter table <table_ name> shri nk space <n ull> | compact | cascade ;compact:這個(gè)參數(shù)當(dāng)系統(tǒng)的負(fù)載比較大時(shí)可以用,不降低HWM如果系統(tǒng)負(fù) 載較低時(shí),直接用 alter table table_name shrink space就一步到位了cascade:這個(gè)參數(shù)是在shrink table的時(shí)候自動(dòng)級(jí)聯(lián)索引,相當(dāng)于rebulid index。以下SQL基于普通表shrink必須開啟行遷移功能。alter table table_ name en able row moveme nt ;保持HWM相當(dāng)于把塊中數(shù)據(jù)打

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論