轉:Oracle 臨時表空間過大問題解決

mengzhaoliang發表於2008-09-18

 

轉自:http://blog.chinaunix.net/u/15472/showart.php?id=306359

Oracle 臨時表空間過大問題解決

今天過來查詢資料庫伺服器時,發現資料庫伺服器磁碟使用空間達到了98%,分析總共的資料檔案也不可能達到如此大,經過查詢發現原來臨時表空間的使用情況達到了32G,導致磁碟空間使用緊張。搜尋了相應的文件與資料後,查出

臨時表空間主要使用在:

-          索引建立或重建立.
- ORDER BY or GROUP BY
(這個是‘罪魁禍首’)

- DISTINCT
操作.
- UNION & INTERSECT & MINUS
- Sort-Merge joins.
- Analyze
操作

-
有些異常將會引起temp暴漲 (這個也很有可能)

下面是重新建立一個臨時表空間,把原來的預設臨時表空間drop掉(包括裡面的臨時資料檔案)再重新建立

SQL> create temporary tablespace temp2

  2  tempfile '/home/oracle/oracle/product/10.2.0/oradata/hatest/temp02.pdf' size 512M reuse

  3  autoextend on next 640k maxsize unlimited;

 

Tablespace created.

 

SQL> alter database default temporary tablespace temp2;

 

Database altered.

 

SQL> drop tablespace temp including contents and datafiles;

 

Tablespace dropped.

(注意:由於臨時表空間的資料檔案比較大,所以這步可能會花費比較長的時間)

SQL> create temporary tablespace temp

  2  tempfile '/home/oracle/oracle/product/10.2.0/oradata/hatest/temp01.pdf' size 512M reuse

  3  autoextend on next 640K maxsize unlimited;

 

Tablespace created.

 

SQL> alter database default temporary tablespace temp;

 

Database altered.

 

SQL> drop tablespace temp2 including contents and datafiles;

 

Tablespace dropped.

 

SQL> exit

以上的方法只是暫時釋放了臨時表空間的磁碟佔用空間,是治標但不是治本的方法,真正的治本的方法是找出資料庫中消耗資源比較大的sql語句,然後對其進行最佳化處理。下面是查詢在sort排序區使用的執行耗時的SQL

Select se.username,se.sid,su.extents,su.blocks*to_number(rtrim(p.value))as Space,tablespace,segtype,sql_text

 from v$sort_usage su,v$parameter p,v$session se,v$sql s

  where p.name='db_block_size' and su.session_addr=se.saddr and s.hash_value=su.sqlhash and s.address=su.sqladdr

  order by se.username,se.sid

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-448808/,如需轉載,請註明出處,否則將追究法律責任。

相關文章