Chcę znaleźć rzeczywiste miejsce zajmowane przez indeksy na stole w wyroczni 10g. Nie zamierzam uwzględniać miejsca zarezerwowanego przez wyrocznię do wykorzystania w przyszłości. (Nie należy brać pod uwagę narzutu przez wyrocznię.) Chcę, aby używane bajty nie były przydzielonymi bajtami.
Pomożesz mi iść naprzód?
Jest też sposób na znalezienie rzeczywistej wielkości długiego pola w tabeli.
PS: vsize () i dbms_lob.getlength () nie działają.
oracle
oracle-10g
Egalitarny
źródło
źródło
Odpowiedzi:
pokaże Ci ilość miejsca faktycznie zużytego przez każdy indeks. Nie jestem pewien, czy dokładnie tego rodzaju koszty ogólne próbujesz uwzględnić i jak rozróżniasz „używane” i „alokowane” w kontekście indeksu. Jeśli chcesz uwzględnić wolne miejsce w indeksie, możesz użyć procedury DBMS_SPACE.SPACE_USAGE w celu ustalenia liczby częściowo pustych bloków w indeksie.
źródło
delete <<name of table>>
), w przeciwieństwie do używanego rozmiaru, który zmieniałby się w zależności od liczby wpisów w indeksie.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
Aby zmierzyć (przypuszczam, że rozumiesz) przydzielony i używany rozmiar indeksu, prawdopodobnie użyłbym
dbms_space
Ta procedura mierzy przydzielony i używany rozmiar indeksu o nazwie * TQ84_SIZE_IX *. Dla kompletności dodałem również liczbę bajtów zgłoszoną przez
user_segments
.Teraz tę procedurę można zobaczyć w akcji:
Po wprowadzeniu jednego indeksu zwracane są następujące liczby:
Wypełnianie indeksu ...
... i znów zdobywam liczby ...
... raporty:
Następnie, jeśli indeks zostanie „opróżniony”:
to pokazuje:
co pokazuje, że przydzielony rozmiar nie zmniejsza się, gdy używany jest rozmiar.
źródło
W przypadku, gdy ktoś tu przyjdzie i szuka sposobu na znalezienie wielkości długiego pola, poniżej można to zrobić. Usunę tę odpowiedź, jeśli pytanie zostanie rozdzielone.
Przykładowe dane...
Funkcja do wykonania pracy ... (Do produkcji powinna być w pakiecie)
Przetestuj funkcję ...
źródło
Musiałem zmodyfikować odpowiedź René Nyffeneggera, aby uczynić ją bardziej ogólną i łatwiej zobaczyć wykorzystanie miejsca dla wszystkich indeksów w schemacie.
Pomyślałem, że podzielę się tutaj zmodyfikowanym kodem, na wypadek gdyby ktokolwiek uznał go za przydatny:
źródło