Ich möchte den tatsächlichen Speicherplatz ermitteln, der von Indizes für eine Tabelle in Oracle 10g belegt wird. Ich beabsichtige nicht, den von oracle für die zukünftige Verwendung reservierten Speicherplatz einzuschließen. (Der Overhead durch Orakel sollte nicht berücksichtigt werden.) Ich möchte, dass die verwendeten Bytes nicht die zugewiesenen Bytes sind.
Können Sie mir dabei helfen?
Gibt es auch eine Möglichkeit, die tatsächliche Größe eines langen Felds in einer Tabelle zu ermitteln?
PS: vsize () und dbms_lob.getlength () funktionieren nicht.
oracle
oracle-10g
Egalitär
quelle
quelle
Antworten:
zeigt Ihnen den tatsächlich von jedem Index belegten Speicherplatz an. Mir ist nicht klar, ob genau diese Art von Overhead Sie berücksichtigen möchten und wie Sie im Kontext eines Index zwischen "verwendet" und "zugewiesen" unterscheiden. Wenn Sie freien Speicherplatz im Index berücksichtigen möchten, können Sie mithilfe der Prozedur DBMS_SPACE.SPACE_USAGE bestimmen, wie viele teilweise leere Blöcke sich im Index befinden.
quelle
delete <<name of table>>
), im Gegensatz zu der verwendeten Größe, die mit der Anzahl der Einträge im Index variieren würde.SELECT idx.index_name, SUM(bytes) FROM user_segments seg, user_indexes idx WHERE idx.table_name = 'EMERGE_REPORTING_DETAIL' AND idx.index_name = seg.segment_name GROUP BY idx.index_name
Um die zugewiesene und verwendete Größe des Index zu messen (was ich glaube, ist Ihr Verständnis der), würde ich wahrscheinlich verwenden
dbms_space
Diese Prozedur misst die zugewiesene und verwendete Größe eines Index mit dem Namen * TQ84_SIZE_IX *. Der Vollständigkeit halber habe ich auch die Anzahl der Bytes hinzugefügt, die von gemeldet wurden
user_segments
.Jetzt kann dieser Vorgang in Aktion gesehen werden:
Mit einem Eintrag im Index werden folgende Zahlen zurückgegeben:
Index füllen ...
... und die Zahlen wieder bekommen ...
... berichtet:
Wenn der Index dann "geleert" wird:
es zeigt:
Dies zeigt, dass die zugewiesene Größe nicht kleiner wird als die verwendete Größe.
quelle
Falls jemand hierher kommt und nach einer Möglichkeit sucht, die Größe eines langen Feldes zu ermitteln, finden Sie unten eine Möglichkeit, dies zu tun. Ich werde diese Antwort entfernen, wenn die Frage getrennt ist.
Beispieldaten...
Funktion, um die Arbeit zu erledigen ... (Für die Produktion sollte dies in einem Paket sein)
Testen Sie die Funktion ...
quelle
Ich musste die Antwort von René Nyffenegger ändern, um die Speicherplatznutzung für alle Indizes in einem Schema allgemeiner und einfacher zu gestalten.
Ich dachte, ich würde den geänderten Code hier teilen, falls jemand anderes ihn nützlich findet:
quelle