Frage

Oracle FAQ definiert Raum temporäre Tabelle wie folgt:

  

Temporäre Tablespaces werden verwendet, um   verwalten Platz für Datenbank-Sortier   Operationen und zum Speichern von globalen   temporäre Tabellen. Zum Beispiel, wenn Sie   kommen zwei große Tische und Oracle   kann die Art im Speicher nicht tun, Raum   wird in einem temporären zugeordnet werden   Tabellen für das Erledigen der Art   Betrieb.

Das ist toll, aber ich brauche mehr Details darüber, was genau den Raum verwendet. Aufgrund Macken des Anwendungsdesigns meisten Abfragen machen eine Art von Sortierung, so muß ich es Client ausführbar, Zieltabelle, oder SQL-Anweisung verengen.

Im Wesentlichen, ich suche nach Hinweisen mir zu sagen, genauer gesagt, was mit dieser (ziemlich großen Anwendung) falsch sein könnte. Jede Art von Ahnung, könnte nützlich sein, so lange es präziser ist als „Sortierung“.

War es hilfreich?

Lösung

Ich bin nicht sicher genau das, was Informationen, die Sie bereits übergeben müssen, aber die folgende Abfrage verwendet, wird darauf hinweisen, welches Programm / user / Sitzungen usw. sind zur Zeit Ihre temporären Raum verwendet wird.

SELECT   b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , ROUND (  (  ( b.blocks * p.VALUE ) / 1024 / 1024 ), 2 ) size_mb
       , a.SID
       , a.serial#
       , a.username
       , a.osuser
       , a.program
       , a.status
    FROM v$session a
       , v$sort_usage b
       , v$process c
       , v$parameter p
   WHERE p.NAME = 'db_block_size'
     AND a.saddr = b.session_addr
     AND a.paddr = c.addr
ORDER BY b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , b.blocks;

Wenn Sie herausfinden, welche Sitzung den Schaden zu tun, dann haben Sie einen Blick auf die SQL ausgeführt wird, und Sie sollten auf dem richtigen Weg sein.

Andere Tipps

Eine Daumenregel ist, dass fast jede Abfrage, die mehr als eine Sekunde dauert wahrscheinlich einigen TEMP Raum verwendet, und dies sind nicht die Gerechte ORDER BYs beteiligt, sondern auch:

  1. GROUP BYs (SORT GROUPBY vor 10.2 und HASH GROUPBY von 10,2 an)
  2. Hashverknüpfungen oder MERGE JOIN
  3. Globale temporäre Tabellen (natürlich)
  4. Index neu erstellt

Gelegentlich, belegter Speicherplatz in temporärer Tablespaces nicht von Oracle freigegeben bekommt (Bug / Marotte), so müssen Sie manuell eine Datei aus dem Tabellenbereich fallen, ist es aus dem Dateisystem löschen und eine anderen erstellen.

Dank geht für Michael OShea für seine Antwort,

aber falls Sie haben Oracle RAC mehrere Instanzen, dann müssen Sie diese ...

SELECT   b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , ROUND (  (  ( b.blocks * p.VALUE ) / 1024 / 1024 ), 2 ) size_mb
       , a.inst_ID
       , a.SID
       , a.serial#
       , a.username
       , a.osuser
       , a.program
       , a.status
    FROM gv$session a
       , gv$sort_usage b
       , gv$process c
       , gv$parameter p
   WHERE p.NAME = 'db_block_size'
     AND a.saddr = b.session_addr
     AND a.paddr = c.addr
     -- AND b.TABLESPACE='TEMP2'
ORDER BY a.inst_ID , b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , b.blocks;

und dies das Skript der Kill-Anweisungen zu generieren: Bitte überprüfen Sie, welche Sitzungen werden Sie zu töten sein ...

SELECT  b.TABLESPACE, a.username , a.osuser , a.program , a.status ,
       'ALTER SYSTEM KILL SESSION '''||a.SID||','||a.SERIAL#||',@'||a.inst_ID||''' IMMEDIATE;'
    FROM gv$session a
       , gv$sort_usage b
       , gv$process c
       , gv$parameter p
   WHERE p.NAME = 'db_block_size'
     AND a.saddr = b.session_addr
     AND a.paddr = c.addr
     -- AND b.TABLESPACE='TEMP'
ORDER BY a.inst_ID , b.TABLESPACE
       , b.segfile#
       , b.segblk#
       , b.blocks;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top