Monitorowanie wykorzystania Temp Oracle

wydaje się, że tymczasowa przestrzeń stołowa Oracle jest nadal tajemnicą dla niektórych, być może dlatego, że nie jest zarządzana w taki sam sposób, jak konwencjonalna przestrzeń stołowa. Zakresy są przydzielane i ponownie wykorzystywane, więc zarządzanie przestrzenią nie wygląda tak jak w przypadku tradycyjnej przestrzeni stołowej. Z tego powodu błędy przestrzeni są zarządzane inaczej. Przyjrzyjmy się, jak zarządzać tymczasową przestrzenią stołową i jakie narzędzia są do dyspozycji DBA.

począwszy od wersji 8.1.5 firma Oracle udostępniła „prawdziwą” tymczasową przestrzeń tabel, w której zakresy są przydzielane i przypisywane do sesji, gdy są potrzebne. Zakresy nigdy nie są upuszczane, gdy baza danych jest uruchomiona, więc odpowiednio wykorzystana tymczasowa przestrzeń stołowa zawsze będzie miała 0 „wolnej” przestrzeni. W tym sensie „wolny” oznacza nieprzydzielony, a wszystko w tymczasowej przestrzeni stołowej zostanie przydzielone, ale to nie znaczy, że jest używane. Dlatego konwencjonalne zarządzanie przestrzenią nie ma miejsca w tymczasowej przestrzeni stołowej.

więc jak zarządza się tymczasową przestrzenią stołową? Odbywa się to poprzez kilka V $ views:

V$TEMPFILE V$TEMPSTAT V$TEMP_EXTENT_MAP V$TEMP_EXTENT_POOL V$TEMP_SPACE_HEADER V$TEMPSEG_USAGE (Oracle 9i i nowsze wersje) V$SORT_USAGE (Oracle 8.1.7, 8.1.6 i 8.1.5)

V$TEMP_EXTENT_MAP zgłasza wszystkie przydzielone zakresy w tymczasowym pliku łyżka stołowa:

SQL> desc v$temp_extent_map Name Null? Type ----------------------------------------- -------- ---------------------------- TABLESPACE_NAME NOT NULL VARCHAR2(30) FILE_ID NUMBER BLOCK_ID NUMBER BYTES NUMBER BLOCKS NUMBER OWNER NUMBER RELATIVE_FNO NUMBER

najbardziej pomocne widoki do zarządzania tymczasowymi przestrzeniami tabel są V$TEMP_EXTENT_POOL i V$TEMPSEG_USAGE / V$SORT_USAGE. V$TEMP_EXTENT_POOL wyświetla nie tylko przydzielone zakresy, ale także raportuje wszystkie używane zakresy w tymczasowej przestrzeni tabeli przez tempfile:

SQL> desc v$temp_extent_pool Name Null? Type ----------------------------------------- -------- ---------------------------- TABLESPACE_NAME NOT NULL VARCHAR2(30) FILE_ID NUMBER EXTENTS_CACHED NUMBER EXTENTS_USED NUMBER BLOCKS_CACHED NUMBER BLOCKS_USED NUMBER BYTES_CACHED NUMBER BYTES_USED NUMBER RELATIVE_FNO NUMBER

V$TEMPSEG_USAGE (lub, jeśli wolisz, V$SORT_USAGE) pokazuje tymczasowe użycie segmentu, przez użytkownika, dla wszystkich obszarów TABLESPACE:

SQL> desc v$tempseg_usage Name Null? Type ----------------------------------------- -------- ---------------------------- USERNAME VARCHAR2(30) USER VARCHAR2(30) SESSION_ADDR RAW(8) SESSION_NUM NUMBER SQLADDR RAW(8) SQLHASH NUMBER SQL_ID VARCHAR2(13) TABLESPACE VARCHAR2(31) CONTENTS VARCHAR2(9) SEGTYPE VARCHAR2(9) SEGFILE# NUMBER SEGBLK# NUMBER EXTENTS NUMBER BLOCKS NUMBER SEGRFNO# NUMBER 

tymczasowe monitorowanie użycia tablespace jest prostym zadaniem zapytania V$TEMPSEG_USAGE (V$SORT_USAGE, jeśli jest to preferowane) w czasie:

select segtype, extents, blocksfrom v$tempseg_usagewhere tablespace = 'TEMP';

pamiętaj, że takie monitorowanie nie da żadnych danych do wykonania; o ile baza danych nie zgłasza błędów przydzielających przestrzeń tymczasową, DBA naprawdę nie ma nic do roboty.

jeśli chcesz wiedzieć, ile zakresów jest przydzielonych i faktycznie używanych na plik danych, poniższe zapytanie stworzy dość przydatny raport:

select tablespace_name, file_id, extents_cached extents_allocated, extents_used, bytes_cached/1024/1024 mb_allocated, bytes_used/1024/1024 mb_usedfrom v$temp_extent_pool/

ponownie, żadne działanie nie musi być podejmowane w oparciu o taki raport; jest to tylko w celach informacyjnych.

kto korzysta z twojej przestrzeni tymczasowej, jakie zapytania wykonują i ile tej przestrzeni zużywa każde z nich? Jest to również dość łatwe zadanie do wykonania:

select u.username, s.sql_fulltext, u.segtype, u.extents, u.blocksfrom v$tempseg_usage u, v$sql swhere s.sql_id = u.sql_id;

widok V$TEMP_SPACE_HEADER zapewnia mniej szczegółowy widok zużytego i dostępnego miejsca; lista przydzielonych i niezalokowanych przestrzeni w plikach tempfiles, według Pliku. Należy pamiętać, że alokacja nie oznacza użycia; prawdopodobnie będą duże różnice między raportami V$TEMP_SPACE_HEADER a tym, co zapewnia V$TEMPSEG_USAGE.

zacytuję siebie (z innego miejsca w sieci) w odniesieniu do właściwego rozmiaru tymczasowych przestrzeni stołowych: „więc ile miejsca potrzebujesz w swojej tymczasowej przestrzeni stołowej? Zależy to od tego, jak aktywny jest Twój system, ile jednoczesnych aktywnych sesji, rozmiar transakcji i ilość miejsca na dysku. To nie jest hańba, aby zwiększyć rozmiar TEMP TABLESPACE w czasie, jak wzorce użytkowania, liczba użytkowników i wielkości danych zmienić. Oracle poinformuje również, że tymczasowa przestrzeń tablespace musi zostać zwiększona przez wystawienie błędów ORA-01652 (na przykład nie można rozszerzyć segmentu temp o 128 w TEMP tablespace). Liczba zgłoszona w błędzie ORA – 01652 jest w blokach, a nie bajtach, więc musisz przekonwertować ją za pomocą wartości db_block_size, aby wiedzieć, ile bajtów potrzebna jest tymczasowa przestrzeń stołu, aby zakończyć transakcję generującą błąd. Nie ma „reguły kciuka”, aby Rozmiar tymczasowej powierzchni stołu, ponieważ takie zasady zwykle tworzą sytuacje, w których jedynym narzędziem staje się młotek, a każde zadanie kończy się jako gwóźdź, a częściej niż nie, uderzasz kciukiem jedynym „narzędziem”, które otrzymałeś.”

DBA_TEMP_FILES powie Ci, jak duża jest tymczasowa powierzchnia stołu:

SQL> select tablespace_name, sum(bytes)/1024/1024 MB 2 from dba_temp_files 3 group by tablespace_name 4 /TABLESPACE_NAME MB------------------------------ ----------TEMP 1024SQL>

może również zgłaszać, które pliki są powiązane z tymczasową przestrzenią stołu:

SQL> select tablespace_name, file_name, bytes 2 from dba_temp_files 3 order by tablespace_name, file_name 4 /TABLESPACE_NAME FILE_NAME BYTES--------------- ------------------------------------------------------- ----------TEMP /u2/orawiz/parlopnett/temp01.dbf 1073741824SQL>

jeśli chcesz lub potrzebujesz zmniejszyć rozmiar swojej przestrzeni TEMP, musisz zamknąć bazę danych, otworzyć ją w trybie ograniczonym, zmienić rozmiar pliku tempfile (lub plików tempfile) na mniejszy, a następnie zamknąć i uruchomić bazę danych. Dodawanie spacji nie jest tak zaangażowane, jak proste „Zmień rozmiar pliku tempfile bazy danych;” zwiększa przestrzeń.

co się stanie, jeśli tymczasowa przestrzeń stołu nie istnieje lub nie jest dostępna? Oracle wyświetli to:

SQL> select * from mybigtable order by mycoolkey;select * from mybigtable order by mycoolkey*ERROR at line 1:ORA-01129: user's default or temporary tablespace does not exist SQL>

jeśli widzisz ten Komunikat o błędzie, sprawdź, czy tymczasowa przestrzeń tablespace istnieje i jest online. Popraw wszelkie znalezione problemy (Utwórz brakującą powierzchnię stołu lub umieść pliki tempfiles z powrotem online).

jeśli przestrzeń tabel istnieje, ale nie są do niej przypisane żadne pliki tempfiles (co może wystąpić po przywróceniu bazy danych / odzyskaniu z kopii zapasowej), to Oracle zgłasza:

SQL> select * from mybigtable order by mycoolkey;select * from mybigtable order by mycoolkey*ERROR at line 1:ORA-25153: Temporary Tablespace is Empty SQL>

tak, zadaniem jest po prostu wydać 'zmienić tymczasową powierzchnię stołu … Dodaj plik tempfile …’polecenia, aby powierzchnia stołu nie była już pusta.

Zarządzanie tymczasową przestrzenią stołową nie jest nauką rakietową, ale różni się (czasami znacznie) od „normalnych” procedur zarządzania przestrzenią stołową stosowanych w zwykłych plikach danych. Wiedząc, że „pełna” tymczasowa przestrzeń stołowa nie stanowi problemu (pamiętaj, że segmenty są przydzielane, a następnie ponownie wykorzystywane), może sprawić, że zadanie będzie nieco łatwiejsze, ponieważ Oracle powie Ci (z błędami ORA-01652), jeśli zabraknie miejsca. Co oznacza, że DBA może spędzać czas na przydatnych zadaniach, takich jak resetowanie hasła.

Zobacz wszystkie artykuły autora: David Fitzjarrell

Leave a Reply

Twój adres e-mail nie zostanie opublikowany.