monitorizarea utilizării Temp Oracle

se pare că spațiul de masă temporar Oracle este încă un mister pentru unii, probabil pentru că nu este gestionat în același mod ca un spațiu de masă convențional. Extensiile sunt alocate și reutilizate, astfel încât gestionarea spațiului nu arată așa pentru un spațiu de masă tradițional. Din acest motiv, erorile de spațiu sunt gestionate diferit. Să ne uităm la modul de gestionare a unei mese temporarespațiu și ce instrumente sunt la dispoziția DBA.

începând cu versiunea 8.1.5 Oracle a oferit un spațiu de tabelă temporar ‘adevărat’ în care extensiile sunt alocate și alocate sesiunilor în funcție de necesități. Extensiile nu sunt niciodată abandonate în timp ce baza de date rulează, astfel încât un spațiu de masă temporar utilizat în mod corespunzător va avea întotdeauna 0 spațiu liber. În acest sens, ‘gratuit’ înseamnă nealocat și totul din spațiul de masă temporar va fi alocat, dar asta nu înseamnă că este utilizat. Acesta este motivul pentru care gestionarea spațiului convențional nu are loc în spațiul de masă temporar.

Deci, cum este gestionat spațiul de masă temporar? Se face prin mai multe vizualizări v$ :

V $ TEMPFILE V $ TEMPSTAT V$TEMP_EXTENT_MAP V$TEMP_EXTENT_POOL V$TEMP_SPACE_HEADER V$TEMPSEG_USAGE (Oracle 9i și versiuni ulterioare) V$SORT_USAGE (Oracle 8.1.7, 8.1.6 și 8.1.5)

v $ TEMP_EXTENT_MAP raportează Toate extensiile alocate în spațiul de masă temporar:

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

cele mai utile vizualizări pentru gestionarea spațiilor de masă temporare sunt v$TEMP_EXTENT_POOL și v$TEMPSEG_USAGE/V$SORT_USAGE. V $ TEMP_EXTENT_POOL listează nu numai extensiile alocate, ci și rapoartele privind Toate extensiile utilizate într-un spațiu de masă temporar de 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 (sau, dacă preferați, V$SORT_USAGE) arată utilizarea temporară a segmentului, de către utilizator, pentru toate spațiile de masă:

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 

monitorizarea temporară utilizare tablespace este o sarcină simplă de interogare V $ TEMPSEG_USAGE (V$SORT_USAGE, în cazul în care este de preferat) în timp:

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

amintiți-vă că o astfel de monitorizare nu va produce date acționabile; cu excepția cazului în care baza de date raportează erori care alocă spațiu temp, DBA nu are nimic de făcut.

dacă doriți să știți câte extensii sunt alocate și utilizate efectiv pe fișier de date, următoarea interogare va produce un raport destul de util:

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/

din nou, nu trebuie luate măsuri pe baza unui astfel de raport; este doar în scop informativ.

cine folosește spațiul dvs. temp, ce interogări execută și cât din acel spațiu consumă fiecare? Aceasta este, de asemenea, o sarcină destul de ușor de finalizat:

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;

vizualizarea V$TEMP_SPACE_HEADER oferă o vizualizare mai puțin granulară a spațiului consumat și disponibil; acesta listează spațiul alocat și nealocat în tempfiles, de fișier. Rețineți că alocat nu înseamnă folosit; vor exista probabil diferențe mari între ceea ce v$TEMP_SPACE_HEADER rapoarte și ceea ce V$TEMPSEG_USAGE oferă.

mă voi cita (din altă parte de pe web) cu privire la dimensionarea corectă a spațiilor de masă temporare: „deci, de cât spațiu aveți nevoie în spațiul de masă temporar? Acest lucru ar depinde de cât de activ este sistemul dvs., de câte sesiuni active concurente există, de dimensiunea tranzacțiilor și de cât spațiu pe disc aveți. Nu este o rușine să vă măriți dimensiunea spațiului de masă TEMP în timp, deoarece modelele de utilizare, Numărul de utilizatori și volumele de date se schimbă. Oracle vă va informa, de asemenea, că spațiul tablespace temporar trebuie mărit prin emiterea de erori ORA-01652 (de exemplu, nu se poate extinde segmentul temp cu 128 în Temp tablespace). Numărul raportat într-o eroare ORA-01652 este în blocuri, nu în octeți, deci va trebui să convertiți acest lucru folosind valoarea db_block_size pentru a ști câți octeți este necesar spațiul de masă temporar pentru a finaliza tranzacția generând eroarea. Nu există nici o regulă de degetul mare pentru dimensiunea unui spațiu de masă temporar, deoarece astfel de reguli creează, de obicei, situații în care singurul instrument devine un ciocan și fiecare sarcină se termină ca un cui și, de cele mai multe ori, lovești degetul mare cu singurul instrument care ți-a fost dat.”

DBA_TEMP_FILES vă va spune cât de mare este spațiul de masă temporar:

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>

se poate raporta, de asemenea, care fișierele sunt asociate cu tablespace temporar:

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>

dacă doriți, sau nevoie, pentru a reduce dimensiunea tablespace TEMP aveți nevoie pentru a închide baza de date în jos, Deschideți-l în modul restricționat, redimensiona tempfile (sau tempfiles) mai mici, apoi oprirea și pornirea bazei de date. Adăugarea de spațiu nu este aproape la fel de implicat, ca un simplu ‘alter database tempfile resize ;’ crește spațiul.

ce se întâmplă dacă spațiul de masă temporar nu există sau nu este disponibil? Oracle va afișa acest lucru:

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>

dacă vedeți acest mesaj de eroare, verificați dacă spațiul de masă temporar există și este online. Corectați orice probleme pe care le găsiți (creați spațiul de masă lipsă sau puneți fișierele tempfiles înapoi online).

dacă spațiul de masă există, dar nu i se atribuie tempfiles (care poate apărea după o restaurare/recuperare a bazei de date dintr-o copie de rezervă), atunci Oracle raportează:

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

deci, sarcina este pur și simplu de a emite ‘modifica temporar tablespace … adăugați tempfile …’comenzi pentru a face spațiul de masă să nu mai fie gol.

gestionarea spațiului de masă temporar nu este o știință a rachetelor, dar diferă (uneori considerabil) de procedurile normale de gestionare a spațiului de masă utilizate pentru fișierele de date obișnuite. Știind că un spațiu de tabelă temporar’ complet ‘ nu este o problemă (amintiți-vă că segmentele sunt alocate apoi reutilizate) poate face sarcina un pic mai ușoară, așa cum vă va spune Oracle (cu erori ORA-01652) dacă ați rămas fără spațiu. Ceea ce înseamnă că DBA poate petrece timp pe sarcini utile, cum ar fi resetările parolei.

Vezi toate articolele de David Fitzjarrell

Leave a Reply

Adresa ta de email nu va fi publicată.