Vietas taupīšana, mainot tablespaces

45 views
Skip to first unread message

Maris Punenovs

unread,
Jun 27, 2023, 8:33:29 AM6/27/23
to Latvian Oracle User Group
Sveiciens!

Iespējams, daudziem šāda "knapināšanās" nebūs aktuāla.
Tomēr es vienmēr Oracle esmu uzskatījis par "vietas rijīgu" sistēmu, kas pati nekad nesamazinās.
It kā kopš kādas versijas pastāv "reuse" ķeksis, taču varbūt es šos "ķekšus" nemāku pareizi lietot.
Īpaši aktuāli taupīt vietu, ja lieto XE...
Metode, kas reāli strādā, ir pārvietot tabulu(as) no vienas tablespaces uz citu.
Zemāk redzamo skriptu es laižu ik nedēļas, pēc procedūras, kas datus apkopo nedēļas tabulā, iztukšojot, piemēram, 15 minūšu tabulas.
Skripta universalitātei laikam pietrūkst LOB pārneses, taču man tādu nebija.

Pagaidām neesmu uzrakstījis ko līdzīgu TEMP un UNDO tablespaču svičošanai, bet derētu...


PROCEDURE A_SWITCH_TABLESPACES AS
TYPE refcurtype IS REF CURSOR;
tablespacename1 constant varchar2(6) := 'TBS1';
tablespacename2 constant varchar2(6) := 'TBS2';
datafiles_path varchar2(30) := '/opt/oracle/oradata/XE';
tablespacename1count number;
tablespacename2count number;
currenttablespacename varchar2(6) := '';
newtablespacename varchar2(6) := '';
selectresult refcurtype;
objectsselectqry varchar2(254);
movedataqry varchar2(254);
moveindexqry varchar2(254);
begin
select count(tablespace_name) into tablespacename1count from dba_tablespaces where tablespace_name = tablespacename1;
select count(tablespace_name) into tablespacename2count from dba_tablespaces where tablespace_name = tablespacename2;
if tablespacename1count > 0 then
   if tablespacename2count = 0 then
                currenttablespacename := tablespacename1;
                newtablespacename := tablespacename2;
        end if;
else
        if tablespacename2count > 0 then
                currenttablespacename := tablespacename2;
                newtablespacename := tablespacename1;
        end if;
end if;
dbms_output.put_line('newtablespacename='||newtablespacename);
if length(currenttablespacename)>0 and length(newtablespacename)>0 then
        execute immediate 'create tablespace '||newtablespacename||' datafile '||chr(39)||datafiles_path||'/'||lower(newtablespacename)||'.dbf'||chr(39)||' size 512M reuse autoextend ON next 256M maxsize 3G';
    dbms_output.put_line('create tablespace '||newtablespacename||' datafile '||chr(39)||datafiles_path||'/'||lower(newtablespacename)||'.dbf'||chr(39)||' size 512M reuse autoextend ON next 256M maxsize 3G');
    objectsselectqry := 'select '||chr(39)||'alter table '||chr(39)||'|| owner ||'||chr(39)||'.'||chr(39)||'|| table_name ||'||chr(39)||' move tablespace '||newtablespacename||chr(39)||' cmnd from dba_tables where tablespace_name = '||chr(39)||currenttablespacename||chr(39);
    dbms_output.put_line(objectsselectqry);
    OPEN selectresult FOR objectsselectqry;
    loop
        FETCH selectresult INTO moveindexqry;
        EXIT WHEN selectresult%NOTFOUND;
        dbms_output.put_line(moveindexqry);
        execute immediate moveindexqry;
                end loop;
    objectsselectqry := 'select '||chr(39)||'alter index '||chr(39)||'|| owner ||'||chr(39)||'.'||chr(39)||'|| index_name ||'||chr(39)||' rebuild tablespace '||newtablespacename||chr(39)||' cmnd from dba_indexes where tablespace_name = '||chr(39)||currenttablespacename||chr(39);
    dbms_output.put_line(objectsselectqry);
    OPEN selectresult FOR objectsselectqry;
    loop
        FETCH selectresult INTO movedataqry;
        EXIT WHEN selectresult%NOTFOUND;
        dbms_output.put_line(movedataqry);
                execute immediate movedataqry;
                end loop;
    dbms_output.put_line('drop tablespace '||currenttablespacename||' including contents and datafiles');
    execute immediate 'drop tablespace '||currenttablespacename||' including contents and datafiles';
end if;
end;

Roberts Volkovics

unread,
Jun 27, 2023, 4:07:25 PM6/27/23
to lv...@googlegroups.com
Sveiki,

Nezinot visas detaļas ienāca prātā, ka
var jau arī ievietot 15 min tabulas vienā tablespace, nedēļas tabulas citā. Pēc datu pārnešanas veikt truncate 15 min tabulām, pēc nedēļas 15 min tabulas un tablespace ieņemtu apmēram to pašu vietu.

Roberts






--
--
Jūs saņēmāt šo ziņojumu, jo abonējāt Google grupu "Latvian Oracle User
Group" grupa.
Lai nosūtītu ziņojumu šai grupai, sūtiet e-pastu uz
lv...@googlegroups.com
Lai redzētu papildiespējas, apmeklējiet šo grupu
http://lvoug.lv

---
Jūs saņēmāt šo ziņojumu, jo pakalpojumā Google grupas esat abonējis grupu Latvian Oracle User Group.
Lai anulētu šīs grupas abonementu un vairs nesaņemtu tās e-pasta ziņojumus, nosūtiet e-pasta ziņojumu uz adresi lvoug+un...@googlegroups.com.
Lai šo diskusiju skatītu tīmeklī, apmeklējiet lapu https://groups.google.com/d/msgid/lvoug/9aa5b8e2-f450-4157-805a-313306323de5n%40googlegroups.com.

Andrey Chervonets

unread,
Jun 28, 2023, 3:55:34 AM6/28/23
to Latvian Oracle User Group
Vai meģināja "spelēties" ar SHRINK SPACE iespējam?
Dažreiz ar to pietiek.
DB vietas izmantošanā ir daudz nianses, sakot no sliktas projektēšanas, datu apjoma plānošanas vai segmentu specifikas (īpaši LOB).
Par indeksiem - jāsaprot kāpēc viņi aug kad nevajadzētu (vai nopietni atrāk nekā ierakstu skaits tabulā).
Bieži tas notiek izmantojot sequence pakapeniskas (nevis random) vertības PK laukām.
Attiecīgi B-tree indekss dalas un aug tikai uz vienu pusi. Risinājums šī gadījumā būtu reverse-key indeks (vai reverse vērtība no sequence).
Tas ir tikai 1 piemērs.

Par Jūsu gadījumu - ja tas liela tabula (un indeksi) aizpildas katru nedēļu (nevis vienreizējais pasakums) - vai ir vērts atbrīvot vietu uz 1 nedēļu?
Varbūt pietiks tas summary tabulas truncate pirms jaunas iterācijas?

Vairāk hintu par DB space izmantošanu/ietaupīšanu var atrast manā vecā prezentācijā: "Shrinking the database - all you need to know to keep your database size smaller"(pdf)   https://cominder.eu/index.php?action=technotes

Ar cieņu,
Andrejs

вторник, 27 июня 2023 г. в 23:07:25 UTC+3, Roberts Volkovics:

Grinalds Geks

unread,
Jun 29, 2023, 5:20:07 AM6/29/23
to Latvian Oracle User Group
Lai arhivētu vecos tabulas datus var pievienot PCTFREE 0 (pēc noklusējuma 10) un COMPRESS (standarta licenzē ir iekļauts). Tas kopā dod apmēram līdz pat 50% datu samazinājumu.
Tātad pilna komanda izskatītos:
ALTER TABLE tbl1 PCTFREE 0 COMPRESS MOVE ts1 ;

protams ideālā gadījumā ja šīs manipulācijas notiek ar tabulu partīcijām (Enterprise versija)
nerunājot nemaz par advanced compression kas maksā papildus bet esmu dzirdējis ka jaunā datubāze Developeriem esot pieejama ar visām pēdējam Enterprise fīčām:

Sandijs

unread,
Jun 29, 2023, 5:27:13 AM6/29/23
to lv...@googlegroups.com
Oracle XE 18c jau iekļauj Partitioning, Advanced Compression un Online Index rebuild - pietiekami daudz, lai pārskatītu esošo sistēmu un vietas taupīšanas stratēģiju 😉


Sandijs

--
--
Jūs saņēmāt šo ziņojumu, jo abonējāt Google grupu "Latvian Oracle User
Group" grupa.
Lai nosūtītu ziņojumu šai grupai, sūtiet e-pastu uz
lv...@googlegroups.com
Lai redzētu papildiespējas, apmeklējiet šo grupu
http://lvoug.lv

---
Jūs saņēmāt šo ziņojumu, jo pakalpojumā Google grupas esat abonējis grupu Latvian Oracle User Group.
Lai anulētu šīs grupas abonementu un vairs nesaņemtu tās e-pasta ziņojumus, nosūtiet e-pasta ziņojumu uz adresi lvoug+un...@googlegroups.com.

Maris Punenovs

unread,
Jun 29, 2023, 2:07:37 PM6/29/23
to Latvian Oracle User Group
Paldies!

Pārāk daudz tablespaces XE versijā diez vai ir labi taisīt - katrā taču ir arī neaizņemtā (līdz ar to arī nelietderīgi izmantotā) vieta.
Compression reiz biju ieslēdzis - vismaz uz ne tik jauna datora pamatīgi bremzēja (neatceros vairs - insertus, selektus, vai abus).
Par Partitioning un Online Index rebuild pagaidām neko nezinu.
Patiesībā manas zināšanas par Oracle ir gana vecas - kopš 9i laikiem neesmu gluži visam sekojis līdzi ;)
Iespējams arī, ka šis mans (iepriekšējā darbavietā lietotais) skripts nav pats drošākais veids - nez kas notiek, ja tā laikā, piemēram, dators uzkaras...
Tomēr manā skatījumā tas nokalpoja labi.

par Oracle Database 23c Free – Developer Release - paldies!
nez to, tāpat kā XE, arī var lietot "ražošanā"?

Pašlaik gan nav aktuāli, tomēr kādā nākamajā darbā, visticamāk, atkal lietošu kādu Oracle free versiju un APEX.
Īpaši tāpēc, ka nesen iepazītie SAP BI, Tibco Spotfire un MS Power BI šķebina dūšu...


Māris.

Grinalds Geks

unread,
Jun 30, 2023, 4:25:51 AM6/30/23
to lv...@googlegroups.com
ideja ir ka Compress un PCTFREE 0 liek uz vecajiem datiem, bet tekošie dati glabājas citā partition 


Jūs saņēmāt šo ziņojumu, jo pakalpojumā Google grupas esat abonējis grupas Latvian Oracle User Group tēmu.
Lai anulētu šīs tēmas abonementu, apmeklējiet lapu https://groups.google.com/d/topic/lvoug/rCfi7Jr39lc/unsubscribe.
Lai anulētu šīs grupas un visu tās tēmu abonementus, nosūtiet e-pasta ziņojumu uz adresi lvoug+un...@googlegroups.com.
Lai šo diskusiju skatītu tīmeklī, apmeklējiet lapu https://groups.google.com/d/msgid/lvoug/ea5658ec-318e-470e-b33d-e9018314b9b9n%40googlegroups.com.

Raivis Saldābols

unread,
Jun 30, 2023, 6:56:20 AM6/30/23
to Latvian Oracle User Group
Šobrīd principā visas Oracle DB (arī XE) nāk ar built in EM (enterprise manger) un ir samērā viegi nokonfigurēt.
Tur storage sadaļā var ļoti labi pārskatīt, kas un kā.
Ja storage ir problēma, IMO vajag lietot auto extendable datafiles (izņemot TEMP/UNDO) - pricipā Oracle izmantos disku tikai priekš datiem ar nelielu rezervācijas soli un pastāv iespējam nodefinēt limitus.
Par undo/temp runājot - tie ir pilnībā Oracle managed - tur pat pēc būtības neko nevajag aiztikt - tikai rezervēt vietu (šeit nevajag izmantot autoextendable - tieši otrādi, lai optimizeri un citas fīčas nesāk ko stumdīt).
Piemērs no EM pielikumā
Screenshot 2023-06-30 at 13.51.01.png

Grinalds Geks

unread,
Jun 30, 2023, 9:13:05 AM6/30/23
to Latvian Oracle User Group
> Compression reiz biju ieslēdzis - vismaz uz ne tik jauna datora pamatīgi bremzēja (neatceros vairs - insertus, selektus, vai abus).

Ideja ir ka tekošos datus glabā normālā veidā bez kompresijas, bet tos kas vecāki (aktīvi neizmanto) - arhivē un kompresē, jo izmantos pēc tam reti. Piemēram OLTP datu bāzi arhivē uz data warehouse un pa ceļam vēl transformē citās struktūrās kas ir ātrākas priekš konkrētiem reportiem!..
Viss ir atkarīgs no konkrēta biznesa pielietojuma nav tādu universālu baušļu - vai visu kompresēt vai nē!..
Reply all
Reply to author
Forward
0 new messages