In Ergänzung zu meinem ersten Blog-Posting heute, möchte ich noch kurz eine einfache Funktion zum Berechnen des allokierten Speichers hinzufügen. Diese berücksichtigt ausschließlich Tabellen-, Lob- und Index-Segmente (ist also nicht für partitionierte Tabellen anwendbar).
create or replace function alloc_space_in_mbytes(tablename in varchar2) return number is tablesize number; begin select sum(bytes) into tablesize from ( select segment_name, bytes from user_segments -- Tabellensegmente where segment_name = tablename union all select s.segment_name segment_name, s.bytes bytes from user_lobs l, -- Lobsegmente user_segments s where l.table_name = tablename and s.segment_name = l.segment_name union all select s.segment_name segment_name, s.bytes bytes from user_indexes i, -- Indexsegmente user_segments s where i.table_name = tablename and s.segment_name = i.index_name); tablesize := tablesize/1024/1024; -- Umrechnung in MB return tablesize; end; /
Der Aufruf der Funktion kann dann wie folgt aussehen:
select alloc_space_in_mbytes('GEOM_TABLE_UNTRIMMED') untrimmed, alloc_space_in_mbytes('GEOM_TABLE_TRIMMED') trimmed from dual /
Für eine Testtabelle mit 218237 Polygonen, insgesamt 60754462 Stützpunkten und vorhandenem Spatial Index ergaben sich damit folgende Werte:
- SDO_ORDINATE_ARRAY-Werte mit überwiegend 12 bis 13 Nachkommastellen: 1643.5 MB
- SDO_ORDINATE_ARRAY-Werte gekürzt auf 5 Nachkommastellen: 1033.5 MB
Keine Kommentare:
Kommentar veröffentlichen