Oraclen Temp-käytön seuraaminen

näyttää siltä, että Oraclen väliaikainen pöytätila on edelleen mysteeri joillekin, mahdollisesti siksi, ettei sitä hallinnoida samalla tavalla kuin tavanomaista pöytätilaa. Laajennukset jaetaan ja käytetään uudelleen, joten tilanhallinta ei näytä samalta kuin perinteisessä pöytätasossa. Sen takia tilavirheitä hallitaan eri tavalla. Katsotaanpa, miten hallita väliaikaista pöytätilaa ja mitä työkaluja on DBA: n käytettävissä.

alkaen versiosta 8.1.5 Oracle on tarjonnut ”true” väliaikainen taulukoita, jossa extents jaetaan ja osoitetaan istuntoja kuin ne ovat tarpeen. Laajennuksia ei koskaan pudoteta tietokannan ollessa käynnissä, joten oikein käytetty väliaikainen pöytätila on aina 0 ’vapaata’ tilaa. Tässä mielessä ’vapaa’ tarkoittaa jakamatonta, ja kaikki väliaikaisissa pöydissä jaetaan, mutta se ei tarkoita, että sitä käytetään. Tämän vuoksi tavanomaisella tilanhallinnalla ei ole sijaa väliaikaisissa pöytätasoissa.

miten väliaikaista pöytätilaa hoidetaan? Se on tehty kautta useita v$ näkymät:

V$TEMPFILE V$TEMPSTAT V$TEMP_EXTENT_MAP V$TEMP_EXTENT_POOL V$TEMP_SPACE_HEADER V$TEMPSEG_USAGE (Oracle 9i ja myöhemmät julkaisut) v$SORT_USAGE (Oracle 8.1.7, 8.1.6 ja 8.1.5)

V$TEMP_EXTENT_MAP raportoi kaikki väliaikaisten taulukoiden määrät:

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

hyödyllisimmät näkymät tilapäisten pöytätilojen hallintaan ovat V$TEMP_EXTENT_POOL ja V$TEMPSEG_USAGE / V$SORT_USAGE. V$TEMP_EXTENT_POOL ei listaa vain annettuja määriä, se raportoi myös kaikki käytetyt määrät väliaikaisissa taulukoissa 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 (tai, jos haluat, v$SORT_USAGE) näyttää tilapäisen segmentin käytön käyttäjän mukaan kaikissa pöytätiloissa:

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 

Temporary tablespace usage monitoring is a simple task of querying V$TEMPSEG_USAGE (V$SORT_USAGE, jos se on edullista) :

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

muista, että tällainen seuranta ei tuota toimivaa tietoa; ellei tietokanta raportoi virheitä, jotka jakavat temp-tilaa, DBA: lla ei todellakaan ole mitään tekemistä.

jos haluat tietää, kuinka monta sisältöä on jaettu ja käytetty datatiedostoa kohden, seuraava kysely tuottaa melko hyödyllisen raportin.:

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/

jälleen, mitään toimia ei tarvitse tehdä perustuu tällaiseen raporttiin; se on vain tiedoksi.

kuka käyttää temp-avaruuttasi, mitä kyselyitä he toteuttavat ja kuinka paljon siitä tilasta kukin kuluttaa? Sekin on melko helppo tehtävä suorittaa:

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;

V$TEMP_SPACE_HEADER-näkymä tarjoaa vähemmän rakeisen kuvan kulutetusta ja käytettävissä olevasta tilasta; se listaa tempfileissä jaetut ja jakamattomat tilat tiedostoittain. Muista, että allokoitu ei tarkoita käyttää; on todennäköisesti suuria eroja, mitä V$TEMP_SPACE_HEADER raportit ja mitä V$TEMPSEG_USAGE tarjoaa.

lainaan itseäni (jostain muualta netistä) tilapäisten pöytätilojen asianmukaisesta mitoituksesta: ”kuinka paljon tilaa tarvitset väliaikaisissa pöytätiloissasi? Tämä riippuu siitä, kuinka aktiivinen järjestelmäsi on, kuinka monta samanaikaista aktiivista istuntoa on, tapahtumien koko ja kuinka paljon levytilaa sinulla on. Ei ole häpeällistä kasvattaa TEMP tablespacen kokoa ajan myötä, kun käyttötavat, käyttäjämäärät ja tietomäärät muuttuvat. Oracle ilmoittaa myös, että väliaikaista taulukkotilaa on lisättävä antamalla ORA-01652-virheitä (esimerkiksi taulukkotason TEMP-segmenttiä ei voida pidentää 128: lla). Numero raportoitu ora-01652 virhe on lohkoina, ei tavua, joten sinun täytyy muuntaa, että käyttämällä db_block_size arvo tietää, kuinka monta tavua väliaikainen tablespace tarvitaan loppuun tapahtuman tuottaa virhe. Tilapäisen pöytätilan kokoamiseen ei ole nyrkkisääntöä, koska tällaiset säännöt luovat yleensä tilanteita, joissa ainoa työkalu muuttuu vasaraksi ja jokainen tehtävä päätyy naulaksi, ja useimmiten lyöt peukaloa ainoalla’ työkalulla’, joka sinulle on annettu.”

DBA_TEMP_FILES kertoo, kuinka suuri tilapäinen taulukkotila on:

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 voi myös ilmoittaa, mitkä tiedostot liittyvät väliaikaiseen tablespace-tilaasi:

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>

jos haluat tai haluat pienentää TEMP-pöytätilan kokoa, sinun täytyy sulkea tietokanta, avata se rajoitetussa tilassa, muuttaa temp-tiedoston (tai temp-tiedostojen) kokoa pienemmäksi ja sitten sammuttaa ja käynnistää tietokanta. Tilan lisääminen ei ole läheskään niin mukana, koska yksinkertainen ’alter database tempfile resize ;’ lisää tilaa.

mitä tapahtuu, jos väliaikaista taulukkopaikkaa ei ole tai sitä ei ole saatavilla? Oracle näyttää tämän:

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>

jos näet tämän virheilmoituksen, tarkista, onko tilapäinen pöytätila olemassa ja onko se verkossa. Korjaa kaikki ongelmat, jotka löydät (luo puuttuvat pöydätpace tai laita tempfiles takaisin verkkoon).

jos tablespace on olemassa, mutta sille ei anneta tempfileitä (mikä voi tapahtua tietokannan palauttamisen/varmuuskopion palauttamisen jälkeen), Oracle raportoi:

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

niin, tehtävänä on yksinkertaisesti antaa ’ muuttaa väliaikaisia taulukoita … lisää tempfile …”komennot, joilla pöytätila ei enää tyhjene.

tilapäisten taulukoiden hallinta ei ole rakettitiedettä, mutta se eroaa (joskus huomattavasti) tavallisista taulukoiden hallinnointimenettelyistä, joita käytetään tavallisissa tiedostoissa. Tietäen, että ’täysi’ väliaikainen pöytätila ei ole ongelma (muista, että segmentit jaetaan ja käytetään uudelleen) voi tehdä tehtävästä hieman helpompaa kuin Oracle kertoo (kanssa ORA-01652 virheitä) jos sinulla on loppunut tila. Mikä tarkoittaa, että DBA voi viettää aikaa hyödyllisiä tehtäviä, kuten salasanan Nollaa.

Katso kaikki David Fitzjarrellin artikkelit

Leave a Reply

Sähköpostiosoitettasi ei julkaista.