Wir wollen testen, ob man bei verschiedenen LOB Größen und bei verschiedenem Füllgrad der Segmente einen Unterschied in der Shrink Effektivität sieht. Eine weitere Frage ist: Hat die Lückenverteilung einen Einfluss im LOB Segment?
Um eine generelle Tendenz besser erkennen zu können, wählen wir mehrere Kombinationen:
Im Tabellennamen sieht man
Als Beispiel:
B10_ANFANG - beinhaltet Basic Lobs mit 10K Größe, dann Änderung am Segmentanfang
S20_VERTEILT - beinhaltet SecureFiles mit 20K Größe , dann Änderung über Segment verteilt
Die Tabellen mit 5K LOBs enthalten 16384 Sätze, Tabellen mit 10K LOBs 8192 Sätze und Tabellen mit 20K LOBs 4096 Sätze.
Aus der Tabelle V$SQL_PLAN werden 3 OTHER_XML Werte mit der gewünschten Größe extrahiert und in der Tabelle T gespeichert.
select id,length(other_xml) from t;
ID LENGTH(OTHER_XML)
-------------- -----------------
1 5188
2 10368
3 20795
Bei jedem Test werden die Tabellen neu angelegt, Sätze geändert, Shrink und anschließend ein Alter Table Move durchgeführt.
Tabellen werden wie folgt angelegt:
alter session set db_securefile=ALWAYS;
create table S05_ANFANG (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=1 and rownum<=32768;
create table S05_VERTEILT (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=1 and rownum<=32768;
create table S05_ENDE (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=1 and rownum<=32768;
create table S10_ANFANG (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=2 and rownum<=16384;
create table S10_VERTEILT (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=2 and rownum<=16384 ;
create table S10_ENDE (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=2 and rownum<=16384;
create table S20_ANFANG (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=3 and rownum<=8192 ;
create table S20_VERTEILT (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=3 and rownum<=8192 ;
create table S20_ENDE (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=3 and rownum<=8192;
alter session set db_securefile=NEVER;
create table B05_ANFANG (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=1 and rownum<=32768;
create table B05_VERTEILT (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=1 and rownum<=32768;
create table B05_ENDE (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=1 and rownum<=32768;
create table B10_ANFANG (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=2 and rownum<=16384;
create table B10_VERTEILT (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=2 and rownum<=16384;
create table B10_ENDE (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=2 and rownum<=16384;
create table B20_ANFANG (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=3 and rownum<=8192;
create table B20_VERTEILT (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=3 and rownum<=8192 ;
create table B20_ENDE (id,other_xml) as select rownum,other_xml from dba_objects , t where t.id=3 and rownum<=8192;
1) 25% der Sätze wurden auf Null gesetzt
Beispiel für Basic Lobs, ähnlich wird es bei SecureFiles durchgeführt.
update B05_ANFANG set other_xml=null where id<=8192;
update B05_VERTEILT set other_xml=null where mod(id,4)=0;
update B05_ENDE set other_xml=null where id>32768-8192;
update B10_ANFANG set other_xml=null where id<=4096;
update B10_VERTEILT set other_xml=null where mod(id,4)=0;
update B10_ENDE set other_xml=null where id> 16384-4096;
update B20_ANFANG set other_xml=null where id<=2048;
update B20_VERTEILT set other_xml=null where mod(id,4)=0;
update B20_ENDE set other_xml=null where id> 8192-2048;
2) 50% der Sätze wurden auf Null gesetzt
Beispiel für Basic Lobs, ähnlich wird es bei SecureFiles durchgeführt.
update B05_ANFANG set other_xml=null where id<=16384;
update B05_VERTEILT set other_xml=null where mod(id,4)=0;
update B05_VERTEILT set other_xml=null where mod(id,4)=1;
update B05_ENDE set other_xml=null where id>32768-16384;
update B10_ANFANG set other_xml=null where id<=8192;
update B10_VERTEILT set other_xml=null where mod(id,4)=0;
update B10_VERTEILT set other_xml=null where mod(id,4)=1;
update B10_ENDE set other_xml=null where id> 16384-8192;
update B20_ANFANG set other_xml=null where id<=4096;
update B20_VERTEILT set other_xml=null where mod(id,4)=0;
update B20_VERTEILT set other_xml=null where mod(id,4)=1;
update B20_ENDE set other_xml=null where id> 8192-4096;
3) 75% der Sätze wurden auf Null gesetzt
Beispiel für Basic Lobs, ähnlich wird es bei SecureFiles durchgeführt.
update B05_ANFANG set other_xml=null where id<=16384+8192;
update B05_VERTEILT set other_xml=null where mod(id,4)=0;
update B05_VERTEILT set other_xml=null where mod(id,4)=1;
update B05_VERTEILT set other_xml=null where mod(id,4)=2;
update B05_ENDE set other_xml=null where id>32768-16384-8192;
update B10_ANFANG set other_xml=null where id<=8192+4096;
update B10_VERTEILT set other_xml=null where mod(id,4)=0;
update B10_VERTEILT set other_xml=null where mod(id,4)=1;
update B10_VERTEILT set other_xml=null where mod(id,4)=2;
update B10_ENDE set other_xml=null where id> 16384-8192-4096;
update B20_ANFANG set other_xml=null where id<=4096+2048;
update B20_VERTEILT set other_xml=null where mod(id,4)=0;
update B20_VERTEILT set other_xml=null where mod(id,4)=1;
update B20_VERTEILT set other_xml=null where mod(id,4)=2;
update B20_ENDE set other_xml=null where id> 8192-4096-2048;
Es werden Standardbefehle verwendet, wie zum Beispiel:
Shrink: alter table B05_ANFANG modify lob(other_xml) (shrink space cascade);
Move: alter table S20_ENDE move lob(other_xml) store as (tablespace USERS);
LOB Größen nach dem Anlegen, nach dem Shrink und nach dem Move für alle 3 Szenarios im Überblick:
25% 50% 75%
Tabelle MB Shrink Move MB Shrink Move MB Shrink Move
-------------------- ---- ---- ---- ---- ---- ---- ---- ---- ----
B05_ANFANG 516 516 392 515 263 264 519 129 136
B05_ENDE 522 522 392 520 515 260 516 258 136
B05_VERTEILT 519 519 392 520 515 259 521 172 136
B10_ANFANG 389 389 291 392 199 200 391 97 104
B10_ENDE 390 390 291 388 386 200 392 194 104
B10_VERTEILT 390 390 296 393 386 200 388 129 104
B20_ANFANG 394 394 296 392 199 200 392 97 104
B20_ENDE 391 391 296 392 386 200 392 194 104
B20_VERTEILT 392 392 296 392 386 200 390 129 104
S05_ANFANG 568 449 392 568 313 264 568 161 136
S05_ENDE 576 529 392 576 401 264 568 177 136
S05_VERTEILT 568 521 392 568 377 264 568 177 136
S10_ANFANG 432 432 296 432 432 200 432 432 104
S10_ENDE 432 401 296 432 217 200 432 121 104
S10_VERTEILT 432 345 296 432 249 200 432 169 104
S20_ANFANG 432 432 296 432 432 200 432 432 104
S20_ENDE 432 432 296 432 432 200 432 121 104
S20_VERTEILT 432 297 296 432 432 200 432 193 104
Nach dem Ändern der 25% der Sätze hat Shrink bei Basic LOBs gar nichts gebracht, bei 50% war nur bei den B*ANFANG Tabellen wirksam.
Nach dem Ändern der 75% der Sätze wurden alle Basic Lobs verkleinert, Platzersparnis war aber von der Verteilung der Lücken abhängig - am besten haben die B*ANFANG Tabellen abgeschnitten.
Bei den SecureFiles hat schon bei 25% der Lücken der Shrink teilweise funktioniert, anderseits bei den Tabellen S10_ANFANG und S20_ANFANG hat es auch bei 75% der Lücken nicht funktioniert.
Unklar ist, warum Shrink der S20_VERTEILT Tabelle nur mit 50% nicht funktioniert hat.
Das Testergebnis war nicht eindeutig, man kann nicht sagen, welcher LOB Typ sich besser mit Shrink reorganisieren lässt. Eine generelle Tendenz konnte man im Test nicht feststellen.
Bei 25% der Lücken konnte man SecureFiles besser mit Shrink verkleinern, dagegen bei 75% der Lücken wurden 2 SecureFiles nicht verkleinert.
Die Lückenverteilung hatte bei beiden LOB Varianten großen Einfluss auf die Shrink Effektivität.
Wegen dem unsicheren Erfolg beim Shrink sollte man lieber (falls möglich) Alter Table Move Lob durchführen.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.