臨時表空間

2021-08-30 09:45:44 字數 2467 閱讀 2006

臨時表空間

1.什麼是臨時表空間

在oracle資料庫中進行排序、分組彙總、索引等到作時,會產生很多的臨時資料。如有一張員工資訊表,資料庫中是安裝記錄建立的時間來儲存的。 如果使用者查詢時,使用order by排序語句指定按員工編號來排序,那麼排序後產生的所有記錄就是臨時資料。對於這些臨時資料,oracle資料庫是如何處理的呢?通常情況下,oracle資料庫會先將這些臨時資料存放到記憶體的pga(程式全域性區)內。在這個程式全域性區中有乙個叫做排序區的地方,專門用來存放這些因為排序操作而產生的臨時資料。但是這個分割槽的容量是有限的。當這個分割槽的大小不足以容納排序後所產生的記錄時,資料庫系統就會將臨時資料存放到臨時表空間中。這就是臨時表空間的來歷。看起來好像這個臨時表空間是個臨時工,對於資料庫的影響不會有多大。 其實大家這是誤解這個臨時表空間了。在使用者進行資料庫操作時,排序、分組彙總、索引這些作業是少不了,其會產生大量的臨時資料。為此基本上每個資料庫都需要用到臨時表空間。而如果這個臨時表空間設定不當的話,則會給資料庫效能帶來很大的負面影響。

2.臨時表空間作用

索引create或rebuild

order by 或 group by

distinct 操作

union 或 intersect 或 minus

sort-merge joins

analyze

3.臨時表空間建立

以下命令是建立乙個臨時表空間.其命令和建立其它表空間不同的地方是增加temporay關建字.請注意.如果tablespace設定的是maxsize unlimited那麼,臨時表空間也會一直在需要的時候增長. 如果在建立資料庫時沒有指定預設臨時表空間.那麼會用system表空間作為預設臨時表空間當system表空間是本地管理時,你必須定義最少乙個預設表空間在建立資料庫的時候.本地管理的system表空間不能作為預設臨時表空間.

create temporary tablespace temp1 tempfile '/oradata/temp1_01.dbf' size 100m;

臨時表空間與正常的表空間還有以下區別

1.tempfiles總是被設定為nologging模式

2.不能把乙個tempfile設定成readonly模式

3.不能重新命名乙個tempfile

4.不能通過alter database來建立乙個tempfile

5.當你建立或者重寫tempfile大小的時候,資料通常不會自動分配tempfile指定的大小的

6.磁碟空間給它(即不會初始化),但是會在塊被訪問之前分配.(這也是為什麼建立臨時表空間會比平時表空間要快的多的原因)

7.tempfile的資訊儲存在dba_temp_files,動態檢視v$tempfile中.不在dba_data_files或者v$datafile中.

臨時表空間的資訊不會記錄在controlfile中,所以當啟動開啟資料庫時,不會做臨時表空間的校驗,即,即使臨時表空間不存在也可以開啟資料庫(預設情況下oracle會自動建立)

4.臨時表空間修改大小

alter database tempfile 'f:\oracle\product\10.2.0\oradata\obpm\temp01.dbf' resize 100m ;

5.臨時表空間刪除

drop tablespace temp01 including contents and datafiles;

注意以上語句並不會真正的刪除dbf檔案.所以下次新建的時候如果是已存在一的file最好在新建表空間語名中加上reuse

6.將當前臨時表空間指定為新的臨時表空間

alter database default temporary tablespace temp1;

檢視當前資料庫預設臨時表空間:

select * from database_properties where property_name='default_temp_tablespace'

7.監空臨時表空間使用大小

表空總大小

select tablespace_name,(blocks*8)/1024 from dba_temp_files;

表空間已使用大小

select (blocks*8)/1024 from v$sort_usage;

可以通過v$sort_usage檢視具體的詳細資訊.比如是什麼操作用到temp表空間.哪名sql,用了多少個段等等.

在dba_segment,dba_extents中沒有檢視臨時表空間段和臨時表空間的擴充套件.

據說臨時表空間用了就不會**段.想查證一下.但是沒有找到資料,我看v$sort_usage的空間,用了就放了,不知道是不是由於10g不太一樣.下次到群裡諮詢一下.

總的來說對於臨時表空間的分配和**空間還不太清楚

我在把pag=10m,做了乙個3w條記錄的砂笛卡爾連線.發現temp一直在往**.查詢v$session_wait它的最多的等待事件是'direct path write temp','direct path read temp',說明如果是資料庫出現大里的這兩個事件即表明temp表空間的設定問題了

Oracle臨時表空間

oracle臨時表空間主要是用來做查詢和存放一些快取的資料的,磁碟消耗的乙個主要原因是需要對查詢的結果進行排序,如果沒有猜錯的話,在磁碟空間的 記憶體 的分配上,oracle使用的是貪心演算法,如果上次磁碟空間消耗達到1gb,那麼臨時表空間就是1gb,如果還有增長,那麼依此類推,臨時表空間始終保持在...

informix 臨時表空間

informix臨時表空間 在 informix 資料庫中,我們經常會建立一些臨時表來處理應用中的臨時資訊。系統可以採用如下兩種方式建立臨時表 使用 select into temp 語句隱含地建立臨時表 使用 create temp table 語句顯示地建立臨時表 如果資料庫採用非日誌模式,db...

建立臨時表空間

語法 create table albums artist char 30 album name char 50 media type int go該錶也可以使用下邊的命令來手動刪除 drop table albums go當使用者退出sql server 時該表也可以被自動地刪除如果你是在自態sq...