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