monitorování Temp využití Oracle

zdá se, že dočasný tablespace Oracle je pro některé stále záhadou, možná proto, že není spravován stejným způsobem jako konvenční tablespace. Rozsahy jsou přiděleny a znovu použity, takže Správa prostoru vypadá nic takového pro tradiční prostírání. Z tohoto důvodu jsou chyby v prostoru spravovány odlišně. Podívejme se, jak spravovat dočasné tabulkyprostor a jaké nástroje má DBA k dispozici.

počínaje verzí 8.1.5 Oracle poskytl „skutečný“ dočasný prostor tabulky, kde jsou rozsahy přiděleny a přiřazeny relacím podle potřeby. Tyto rozsahy jsou nikdy klesl, zatímco databáze je spuštěna, takže správně využit dočasný tablespace bude mít vždy 0 ‚volný‘ prostor. V tomto smyslu „Volný“ znamená nepřidělené a vše v dočasném prostoru tabulky bude přiděleno, ale to neznamená, že se používá. To je důvod, proč konvenční Správa prostoru nemá místo v dočasném prostoru stolu.

jak je tedy dočasný tabulkový prostor spravován? Děje se to prostřednictvím několika zobrazení V$ :

V$TEMPFILE v$TEMP_EXTENT_MAP v$TEMP_EXTENT_POOL v $ TEMP_SPACE_HEADER V $ TEMPSEG_USAGE(Oracle 9i a novější verze) V$SORT_USAGE (Oracle 8.1.7, 8.1.6 a 8.1.5)

V $ TEMP_EXTENT_MAP hlásí všechny přidělené rozsahy v dočasném prostoru tabulky:

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

nejužitečnější pohledy pro správu dočasných prostorů jsou V $ TEMP_EXTENT_POOL a V$TEMPSEG_USAGE/v $ SORT_USAGE. V$TEMP_EXTENT_POOL uvádí nejen přidělené rozsahy, ale také zprávy o všech použitých rozsahech v dočasném prostoru tabulky podle 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 (nebo, chcete-li, V$SORT_USAGE) zobrazuje dočasné použití segmentu uživatelem pro všechny plochy:

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 

dočasný tablespace usage monitoring je jednoduchý úkol dotazování V$TEMPSEG_USAGE (V$SORT_USAGE, pokud je to výhodné) v průběhu času:

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

nezapomeňte, že takové monitorování nebude produkovat žádná žalovatelná data; pokud databáze nehlásí chyby přidělující dočasný prostor, DBA opravdu nemá co dělat.

pokud chcete vědět, kolik rozsahů je přiděleno a skutečně použito na datový soubor, následující dotaz vytvoří poměrně užitečnou zprávu:

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/

znovu, na základě takové zprávy není třeba podnikat žádná opatření; je to pouze pro informační účely.

kdo používá váš dočasný prostor, jaké dotazy provádějí a kolik z tohoto prostoru každý spotřebovává? To je také poměrně snadný úkol:

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;

zobrazení v $ TEMP_SPACE_HEADER poskytuje méně zrnitý pohled na spotřebované a dostupné místo; uvádí přidělené a nepřidělené místo v tempfiles, podle souboru. Mějte na paměti, že přidělené neznamená použitý; tam bude pravděpodobně velké rozdíly mezi tím, co V$TEMP_SPACE_HEADER zprávy a co V$TEMPSEG_USAGE poskytuje.

cituji sám sebe (odněkud z webu) s ohledem na správné dimenzování dočasných stolů: „takže kolik místa potřebujete ve svém dočasném stolovém prostoru? To by záleželo na tom, jak aktivní je váš systém, kolik souběžných aktivních relací existuje, velikost transakcí a kolik místa na disku máte. Není ostudou zvyšovat velikost TEMP tablespace v průběhu času, jak se mění vzorce použití, počet uživatelů a objemy dat. Oracle vás také informuje, že dočasný prostor tabulky je třeba zvýšit vydáním chyb ORA-01652 (například nelze rozšířit segment temp o 128 v temp tabulky). Číslo hlášené v chybě ora-01652 je v blocích, nikoli bajtech, takže budete muset převést pomocí hodnoty db_block_size, abyste věděli, kolik bajtů potřebuje dočasný prostor tabulky k dokončení transakce generující chybu. Neexistuje žádné „pravidlo“ pro velikost dočasného stolu, protože taková pravidla obvykle vytvářejí situace, kdy se jediným nástrojem stane kladivo a každý úkol skončí jako hřebík, a častěji než ne, zasáhnete tento palec jediným „nástrojem“, který jste dostali.“

DBA_TEMP_FILES vám řekne, jak velký je dočasný stůl:

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>

může také hlásit, které soubory jsou spojeny s vaším dočasným prostorem pro tabulky:

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>

pokud chcete nebo potřebujete zmenšit velikost temp tablespace, musíte databázi vypnout, otevřít ji v omezeném režimu, změnit velikost tempfile (nebo tempfiles) menší než vypnutí a spuštění databáze. Přidání prostoru není zdaleka tak zapojen, jako jednoduchý ‚změnit databázi tempfile resize;‘ zvětšuje prostor.

co se stane, pokud dočasný stůl neexistuje nebo není k dispozici? Oracle To zobrazí:

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>

pokud se zobrazí tato chybová zpráva, zkontrolujte, zda dočasný prostor tabulky existuje a je online. Opravte všechny problémy, které najdete (vytvořte chybějící stůl nebo vložte tempfiles zpět online).

pokud tablespace existuje, ale nejsou k němu přiřazeny žádné tempfiles (což může nastat po obnovení/obnovení databáze ze zálohy), pak Oracle hlásí:

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

úkolem je tedy jednoduše vydat ‚ změnit dočasný prostor tabulky … přidat tempfile …’příkazy k tomu, aby plocha tabulky již nebyla prázdná.

Správa dočasného prostoru tabulky není raketová věda, ale liší se (někdy značně) od „normálních“ postupů správy prostoru tabulky používaných pro běžné datové soubory. Vědět, že „plný“ dočasný prostor pro tabulky není problém (nezapomeňte, že segmenty jsou přiděleny a znovu použity), může úkol trochu usnadnit, protože Oracle vám řekne (s chybami ORA-01652), pokud vám dojde místo. Což znamená, že DBA může trávit čas užitečnými úkoly, jako je resetování hesla.

Zobrazit všechny články od Davida Fitzjarrella

Leave a Reply

Vaše e-mailová adresa nebude zveřejněna.