日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

深入探討Oracle數(shù)據(jù)庫(kù)10g的Shrink機(jī)制

瀏覽:196日期:2023-11-23 09:58:29

從10g開(kāi)始,oracle開(kāi)始提供Shrink的命令,假如我們的表空間中支持自動(dòng)段空間管理 (ASSM),就可以使用這個(gè)特性縮小段,即降低HWM。這里需要強(qiáng)調(diào)一點(diǎn),10g的這個(gè)新特性,僅對(duì)ASSM表空間有效,否則會(huì)報(bào) ORA-10635: Invalid segment or tablespace type。

在這里,我們來(lái)討論如和對(duì)一個(gè)ASSM的segment回收浪費(fèi)的空間。

同樣,我們用系統(tǒng)視圖all_objects來(lái)在tablespace ASSM上創(chuàng)建測(cè)試表my_objects,這一小節(jié)的內(nèi)容,實(shí)驗(yàn)環(huán)境為oracle10.1.0.2:

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod

PL/SQL Release 10.1.0.2.0 - Production

CORE 10.1.0.2.0 Production

TNS for 32-bit Windows: Version 10.1.0.2.0 - Production

NLSRTL Version 10.1.0.2.0 – Production

SQL> select TABLESPACE_NAME,BLOCK_SIZE,EXTENT_MANAGEMENT,

2 ALLOCATION_TYPE, SEGMENT_SPACE_MANAGEMENT

3 from dba_tablespaces where TABLESPACE_NAME = 'ASSM';

TABLESPACE_NAME BLOCK_SIZE EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPACE_MANAGEMENT

---------------- ---------- ----------------- --------------- ------------------------

ASSM 8192 LOCAL UNIFORM AUTO

SQL> create table my_objects tablespace assm

2 as select * from all_objects;

Table created

然后我們隨機(jī)地從table MY_OBJECTS中刪除一部分?jǐn)?shù)據(jù):

SQL> select count(*) from my_objects;

COUNT(*)

----------

47828

SQL> delete from my_objects where object_name like '%C%';

16950 rows deleted

SQL> delete from my_objects where object_name like '%U%';

4503 rows deleted

SQL> delete from my_objects where object_name like '%A%';

6739 rows deleted

現(xiàn)在我們使用show_space和show_space_assm來(lái)看看my_objects的數(shù)據(jù)存儲(chǔ)狀況:

SQL> exec show_space('MY_OBJECTS','DLINGER');

Total Blocks............................680

Total Bytes.............................5570560

Unused Blocks...........................1

Unused Bytes............................8192

Last Used Ext FileId....................6

Last Used Ext BlockId...................793

Last Used Block.........................4

PL/SQL 過(guò)程已成功完成。

SQL> exec show_space_assm('MY_OBJECTS','DLINGER');

free space 0-25% Blocks:................0

free space 25-50% Blocks:...............205

free space 50-75% Blocks:...............180

free space 75-100% Blocks:..............229

Full Blocks:............................45

Unformatted blocks:.....................0

PL/SQL 過(guò)程已成功完成。

這里,table my_objects的HWM下有679個(gè)block,其中,free space為25-50%的block有205個(gè),free space為50-75%的block有180個(gè),free space為75-100%的block有229個(gè),full space的block只有45個(gè),這種情況下,我們需要對(duì)這個(gè)table的現(xiàn)有數(shù)據(jù)行進(jìn)行重組。

要使用assm上的shink,首先我們需要使該表支持行移動(dòng),可以用這樣的命令來(lái)完成:

alter table my_objects enable row movement;

現(xiàn)在,就可以來(lái)降低my_objects的HWM,回收空間了,使用命令:

alter table bookings shrink space;

我們具體的看一下實(shí)驗(yàn)的結(jié)果:

SQL> alter table my_objects enable row movement;

表已更改。

SQL> alter table my_objects shrink space;

表已更改。

SQL> exec show_space('MY_OBJECTS','DLINGER');

Total Blocks............................265

Total Bytes.............................2170880

Unused Blocks...........................2

Unused Bytes............................16384

Last Used Ext FileId....................6

Last Used Ext BlockId...................308

Last Used Block.........................3

PL/SQL 過(guò)程已成功完成。

SQL> exec show_space_assm('MY_OBJECTS','DLINGER');

free space 0-25% Blocks:................0

free space 25-50% Blocks:...............1

free space 50-75% Blocks:...............0

free space 75-100% Blocks:..............0

Full Blocks:............................249

Unformatted blocks:.....................0

PL/SQL 過(guò)程已成功完成。

在執(zhí)行玩shrink命令后,我們可以看到,table my_objects的HWM現(xiàn)在降到了264的位置,而且HWM下的block的空間使用狀況,full space的block有249個(gè),free space 為25-50% Block只有1個(gè)。

我們接下來(lái)討論一下shrink的實(shí)現(xiàn)機(jī)制,我們同樣使用討論move機(jī)制的那個(gè)實(shí)驗(yàn)來(lái)觀察。

SQL> create table TEST_HWM (id int ,name char(2000)) tablespace ASSM;

Table created

往table test_hwm中插入如下的數(shù)據(jù):

insert into TEST_HWM values (1,'aa');

insert into TEST_HWM values (2,'bb');

insert into TEST_HWM values (2,'cc');

insert into TEST_HWM values (3,'dd');

insert into TEST_HWM values (4,'ds');

insert into TEST_HWM values (5,'dss');

insert into TEST_HWM values (6,'dss');

insert into TEST_HWM values (7,'ess');

insert into TEST_HWM values (8,'es');

insert into TEST_HWM values (9,'es');

insert into TEST_HWM values (10,'es');

我們來(lái)看看這個(gè)table的rowid和block的ID和信息:

SQL> select rowid , id,name from TEST_HWM;

ROWID ID NAME

------------------ ---------- ----- ---------

AAANhqAAGAAAAFHAAA 1 aa

AAANhqAAGAAAAFHAAB 2 bb

AAANhqAAGAAAAFHAAC 2 cc

AAANhqAAGAAAAFIAAA 3 dd

AAANhqAAGAAAAFIAAB 4 ds

AAANhqAAGAAAAFIAAC 5 dss

AAANhqAAGAAAAFJAAA 6 dss

AAANhqAAGAAAAFJAAB 7 ess

AAANhqAAGAAAAFJAAC 8 es

AAANhqAAGAAAAFKAAA 9 es

AAANhqAAGAAAAFKAAB 10 es

11 rows selected

SQL> select EXTENT_ID,FILE_ID,RELATIVE_FNO,BLOCK_ID,BLOCKS

2 from dba_extents where segment_name='TEST_HWM' ;

EXTENT_ID FILE_ID RELATIVE_FNO BLOCK_ID BLOCKS

---------- ---------- ------------ ---------- ----------

0 6 6 324 5

1 6 6 329 5

然后從table test_hwm中刪除一些數(shù)據(jù):

delete from TEST_HWM where id = 2;

delete from TEST_HWM where id = 4;

delete from TEST_HWM where id = 3;

delete from TEST_HWM where id = 7;

delete from TEST_HWM where id = 8;

觀察table test_hwm的rowid和blockid的信息:

SQL> select rowid , id,name from TEST_HWM;

ROWID ID NAME

------------------ ---------- ----- --------

AAANhqAAGAAAAFHAAA 1 aa

AAANhqAAGAAAAFIAAC 5 dss

AAANhqAAGAAAAFJAAA 6 dss

AAANhqAAGAAAAFKAAA 9 es

AAANhqAAGAAAAFKAAB 10 es

SQL> select EXTENT_ID,FILE_ID,RELATIVE_FNO,BLOCK_ID,BLOCKS

2 from dba_extents where segment_name='TEST_HWM' ;

EXTENT_ID FILE_ID RELATIVE_FNO BLOCK_ID BLOCKS

---------- ---------- ------------ ---------- ----------

0 6 6 324 5

1 6 6 329 5

從以上的信息,我們可以看到,在table test_hwm中,剩下的數(shù)據(jù)是分布在AAAAFH,AAAAFI,AAAAFJ,AAAAFK這樣四個(gè)連續(xù)的block中。

SQL> exec show_space_assm('TEST_HWM','DLINGER');

free space 0-25% Blocks:................0

free space 25-50% Blocks:...............1

free space 50-75% Blocks:...............3

free space 75-100% Blocks:..............3

Full Blocks:............................0

Unformatted blocks:.....................0

通過(guò)show_space_assm我們可以看到目前這四個(gè)block的空間使用狀況,AAAAFH,AAAAFI,AAAAFJ上各有一行數(shù)據(jù),我們猜測(cè)free space為50-75%的3個(gè)block是這三個(gè)block,那么free space為25-50%的1個(gè)block就是AAAAFK了,剩下free space為 75-100% 的3個(gè)block,是HWM下已格式化的尚未使用的block。(關(guān)于assm下hwm的移動(dòng)我們前面已經(jīng)詳細(xì)地討論過(guò)了,在extent不大于于16個(gè)block時(shí),是以一個(gè)extent為單位來(lái)移動(dòng)的)

然后,我們對(duì)table my_objects執(zhí)行shtink的操作:

SQL> alter table test_hwm enable row movement;

Table altered

SQL> alter table test_hwm shrink space;

Table altered

SQL> select rowid ,id,name from TEST_HWM;

ROWID ID NAME

------------------ ---------- ------ -----------

AAANhqAAGAAAAFHAAA 1 aa

AAANhqAAGAAAAFHAAB 10 es

AAANhqAAGAAAAFHAAD 9 es

AAANhqAAGAAAAFIAAC 5 dss

AAANhqAAGAAAAFJAAA 6 dss

SQL> select EXTENT_ID,FILE_ID,RELATIVE_FNO,BLOCK_ID,BLOCKS

2 from dba_extents where segment_name='TEST_HWM' ;

EXTENT_ID FILE_ID RELATIVE_FNO BLOCK_ID BLOCKS

---------- ---------- ------------ ---------- ----------

0 6 6 324 5

1 6 6 329 5

當(dāng)執(zhí)行了shrink操作后,有意思的現(xiàn)象出現(xiàn)了。我們來(lái)看看oracle是如何移動(dòng)行數(shù)據(jù)的,這里的情況和move已經(jīng)不太一樣了。我們知道,在move操作的時(shí)候,所有行的rowid都發(fā)生了變化,table所位于的block的區(qū)域也發(fā)生了變化,但是所有行物理存儲(chǔ)的順序都沒(méi)有發(fā)生變化,所以我們得到的結(jié)論是,oracle以block為單位,進(jìn)行了block間的數(shù)據(jù)copy。那么shrink后,我們發(fā)現(xiàn),部分行數(shù)據(jù)的rowid發(fā)生了變化,同時(shí),部分行數(shù)據(jù)的物理存儲(chǔ)的順序也發(fā)生了變化,而table所位于的block的區(qū)域卻沒(méi)有變化,這就說(shuō)明,shrink只移動(dòng)了table其中一部分的行數(shù)據(jù),來(lái)完成釋放空間,而且,這個(gè)過(guò)程是在table當(dāng)前所使用的block中完成的。

那么Oracle具體移動(dòng)行數(shù)據(jù)的過(guò)程是怎樣的呢?我們根據(jù)這樣的實(shí)驗(yàn)結(jié)果,可以來(lái)猜測(cè)一下:

Oracle是以行為單位來(lái)移動(dòng)數(shù)據(jù)的。Oracle從當(dāng)前table存儲(chǔ)的最后一行數(shù)據(jù)開(kāi)始移動(dòng),從當(dāng)前table最先使用的block開(kāi)始搜索空間,所以,shrink之前,rownum=10的那行數(shù)據(jù)(10,es),被移動(dòng)到block AAAAFH上,寫到(1,aa)這行數(shù)據(jù)的后面,所以(10,es)的rownum和rowid同時(shí)發(fā)生改變。然后是(9,es)這行數(shù)據(jù),重復(fù)上述過(guò)程。這是oracle從后向前移動(dòng)行數(shù)據(jù)的大致遵循的規(guī)則,那么具體移動(dòng)行數(shù)據(jù)的的算法是比較復(fù)雜的,包括向ASSM的table中insert數(shù)據(jù)使用block的順序的算法也是比較復(fù)雜的,大家有興趣的可以自己來(lái)研究,在這里我們不多做討論。

我們還可以在shrink table的同時(shí)shrink這個(gè)table上的index:

alter table my_objects shrink space cascade;

同樣地,這個(gè)操作只有當(dāng)table上的index也是ASSM時(shí),才能使用。

關(guān)于日志的問(wèn)題,我們對(duì)比了同樣數(shù)據(jù)量和分布狀況的兩張table,在move和shrink下生成的redo size(table上沒(méi)有index的情況下):

SQL> select tablespace_name,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces

2 where tablespace_name in('ASSM','HWM');

TABLESPACE_NAME SEGMENT_SPACE_MANAGEMENT

------------------------------ ------------------------

ASSM AUTO

HWM MANUAL

SQL> create table my_objects tablespace ASSM as select * from all_objects where rownum<20000;

Table created

SQL> create table my_objects1 tablespace HWM as select * from all_objects where rownum<20000;

Table created

SQL> select bytes/1024/1024 from user_segments where segment_name = 'MY_OBJECTS';

BYTES/1024/1024

---------------

2.1875

SQL> delete from my_objects where object_name like '%C%';

7278 rows deleted

SQL> delete from my_objects1 where object_name like '%C%';

7278 rows deleted

SQL> delete from my_objects where object_name like '%U%';

2732 rows deleted

SQL> delete from my_objects1 where object_name like '%U%';

2732 rows deleted

SQL> commit;

Commit complete

SQL> alter table my_objects enable row movement;

Table altered

SQL> select value from v$mystat, v$statname

2 where v$mystat.statistic# = v$statname.statistic#

3 and v$statname.name = 'redo size';

VALUE

----------

27808792

SQL> alter table my_objects shrink space;

Table altered

SQL> select value from v$mystat, v$statname

2 where v$mystat.statistic# = v$statname.statistic#

3 and v$statname.name = 'redo size';

VALUE

----------

32579712

SQL> alter table my_objects1 move;

Table altered

SQL> select value from v$mystat, v$statname

2 where v$mystat.statistic# = v$statname.statistic#

3 and v$statname.name = 'redo size';

VALUE

----------

32676784

對(duì)于table my_objects,進(jìn)行shrink,產(chǎn)生了32579712 – 27808792=4770920,約4.5M的redo ;對(duì)table my_objects1進(jìn)行move,產(chǎn)生了32676784-32579712= 97072,約95K的redo size。那么,與move比較起來(lái),shrink的日志寫要大得多。

Shrink的幾點(diǎn)問(wèn)題:

a. shrink后index是否需要rebuild:

因?yàn)閟hrink的操作也會(huì)改變行數(shù)據(jù)的rowid,那么,如果table上有index時(shí),shrink table后index會(huì)不會(huì)變?yōu)閁NUSABLE呢?我們來(lái)看這樣的實(shí)驗(yàn),同樣構(gòu)建my_objects的測(cè)試表:

create table my_objects tablespace ASSM as select * from all_objects where rownum<20000;

create index i_my_objects on my_objects (object_id);

delete from my_objects where object_name like '%C%';

delete from my_objects where object_name like '%U%';

現(xiàn)在我們來(lái)shrink table my_objects:

SQL> alter table my_objects enable row movement;

Table altered

SQL> alter table my_objects shrink space;

Table altered

SQL> select index_name,status from user_indexes where index_name='I_MY_OBJECTS';

INDEX_NAME STATUS

------------------------------ --------

I_MY_OBJECTS VALID

我們發(fā)現(xiàn),table my_objects上的index的狀態(tài)為VALID,估計(jì)shrink在移動(dòng)行數(shù)據(jù)時(shí),也一起維護(hù)了index上相應(yīng)行的數(shù)據(jù)rowid的信息。我們認(rèn)為,這是對(duì)于move操作后需要rebuild index的改進(jìn)。但是如果一個(gè)table上的index數(shù)量較多,我們知道,維護(hù)index的成本是比較高的,shrink過(guò)程中用來(lái)維護(hù)index的成本也會(huì)比較高。

b. shrink時(shí)對(duì)table的lock

在對(duì)table進(jìn)行shrink時(shí),會(huì)對(duì)table進(jìn)行怎樣的鎖定呢?當(dāng)我們對(duì)table MY_OBJECTS進(jìn)行shrink操作時(shí),查詢v$locked_objects視圖可以發(fā)現(xiàn),table MY_OBJECTS上加了row-X (SX) 的lock:

SQL>select OBJECT_ID, SESSION_ID,ORACLE_USERNAME,LOCKED_MODE from v$locked_objects;

OBJECT_ID SESSION_ID ORACLE_USERNAME LOCKED_MODE

---------- ---------- ------------------ -----------

55422 153 DLINGER 3

SQL> select object_id from user_objects where object_name = 'MY_OBJECTS';

OBJECT_ID

----------

55422

那么,當(dāng)table在進(jìn)行shrink時(shí),我們對(duì)table是可以進(jìn)行DML操作的。

c. shrink對(duì)空間的要求

我們?cè)谇懊嬗懻摿藄hrink的數(shù)據(jù)的移動(dòng)機(jī)制,既然oracle是從后向前移動(dòng)行數(shù)據(jù),那么,shrink的操作就不會(huì)像move一樣,shrink不需要使用額外的空閑空間。

日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲欧美日韩在线观看一区二区| 国产一区成人| 日韩成人在线看| 亚州av日韩av| 国产毛片久久久| 免费一级欧美片在线观看网站| 日韩欧美中文在线观看| 你懂的网址国产 欧美| 精品女同一区二区三区在线观看| 国产精品流白浆在线观看| 91麻豆精品| 久久字幕精品一区| 国产精选在线| 日韩久久精品| 午夜久久久久| 亚洲精品一二三**| 国产激情久久| 日韩不卡免费高清视频| 99国产精品久久久久久久| 亚洲一级淫片| 久久中文字幕一区二区| 91欧美在线| 欧美日韩国产精品一区二区亚洲| 中文字幕一区二区三区在线视频| 国产日韩中文在线中文字幕| 久久精品国产久精国产| 欧美日韩在线二区| 日韩精品免费视频一区二区三区| 美女尤物国产一区| 久久久成人网| 亚洲精品四区| 国产福利片在线观看| 亚洲欧美日韩在线观看a三区| 欧美伊人久久| 欧美日韩精品免费观看视欧美高清免费大片 | 久久天堂av| 欧美专区在线| 国产欧美日韩精品一区二区三区| 在线一区视频观看| 日韩av一区二| 色综合www| 日本不卡的三区四区五区| 国产精品99在线观看| 综合激情视频| 免费高潮视频95在线观看网站| 亚洲免费观看高清完整版在线观| 老牛影视精品| 国产日韩三级| 亚洲一区不卡| 久草免费在线视频| 日韩超碰人人爽人人做人人添| 久久久久久自在自线| 青青草91久久久久久久久| 亚洲一级网站| 老司机精品视频在线播放| 国产精品呻吟| 亚洲91视频| 精品国产精品久久一区免费式 | 亚欧成人精品| 国产在线日韩| 成人在线超碰| 日韩在线网址| 国产日韩综合| 久久精品欧美一区| 国产欧美日韩一区二区三区在线| 快she精品国产999| 精品三级久久| 丁香婷婷久久| 欧美激情久久久久久久久久久| 视频一区二区欧美| 成人午夜国产| 国产成人1区| 国产精品一区二区99| 亚洲精品四区| 综合激情视频| 亚洲综合婷婷| 综合激情网站| 免费日本视频一区| 亚洲精品小说| 99精品在线| 91综合视频| 国产中文欧美日韩在线| 久久久久伊人| 精品视频一区二区三区四区五区| 国产三级一区| 青草国产精品久久久久久| 午夜亚洲福利| 日本aⅴ亚洲精品中文乱码| 日韩精品亚洲专区在线观看| 亚洲人妖在线| 日本a级不卡| 日本麻豆一区二区三区视频| 综合在线一区| 日韩精品久久久久久| 亚洲一区二区av| 伊人久久大香伊蕉在人线观看热v| 亚洲综合另类| 亚洲精品女人| 青青伊人久久| 国产精品一区二区三区www | 天使萌一区二区三区免费观看| 欧美精品一区二区三区精品| 不卡中文字幕| 美女黄网久久| 日韩精品久久理论片| 国产日韩一区二区三区在线| 久久天堂影院| 成人久久一区| 好吊视频一区二区三区四区| 9国产精品视频| 中文字幕av亚洲精品一部二部| 亚洲精品自拍| 国产亚洲一区二区三区不卡| 国产精品一二| 久草免费在线视频| 不卡在线一区二区| 日本亚洲最大的色成网站www | 国模大尺度视频一区二区| 福利一区和二区| 91看片一区| 日韩中文字幕区一区有砖一区| 日韩一区精品| 精品中文字幕一区二区三区| 亚洲国产福利| 蜜桃成人av| 亚洲视频二区| 久久免费视频66| 久久国产中文字幕| 亚洲小说春色综合另类电影| 国产精品久久久久久久久免费高清 | 精品日韩一区| 红桃视频欧美| 国产精品一区毛片| 久久青草久久| 视频一区日韩| 日韩国产在线| 美女日韩在线中文字幕| 国产无遮挡裸体免费久久| av在线日韩| 日韩精品午夜视频| 国产精品亚洲一区二区三区在线观看| 日韩制服丝袜先锋影音| 久久69成人| 另类av一区二区| 国产精品久久观看| 首页国产欧美久久| 国产精品2区| 黄页网站一区| 国产精品一区免费在线| 精品一区在线| 国产精品视频一区二区三区| 日韩中文视频| 欧美一区在线观看视频| 久久高清精品| 国产精品综合色区在线观看| 亚洲成av人片一区二区密柚| 日韩成人午夜精品| 欧美日韩一区二区三区视频播放| 欧美一级网站| 欧美另类综合| 国产不卡人人| 日本va欧美va欧美va精品| 欧美一级精品| 精品一区91| 天堂va欧美ⅴa亚洲va一国产| 亚洲va中文在线播放免费| 国产精品欧美在线观看| 国产精品88久久久久久| 欧美1区二区| 亚洲精品日本| 国产精品美女久久久浪潮软件| 日韩欧美一区二区三区免费看| 日韩精品中文字幕一区二区| 在线一区欧美| 成人精品天堂一区二区三区| 久久婷婷国产| 青青国产精品| 香蕉久久国产| 国产一区欧美| 亚洲天堂1区| 91视频一区| 国产一区二区色噜噜| 日本欧美一区| 亚洲精品亚洲人成在线观看| 亚洲免费播放| 亚洲成a人片| 国产精品蜜芽在线观看| 美腿丝袜亚洲三区| 国产精一区二区| 日韩高清三区| 日韩高清欧美激情| 日韩一区二区三区高清在线观看| 久久国产88| 免费久久99精品国产| 在线视频精品| 精品1区2区3区4区| 国产精品88久久久久久| 久久久久91| 久久精品中文| 欧美va天堂|