關於dba_temp_free_space的allocated_space和free_space

來源:互聯網
上載者:User

每一個Oracle版本,都會有很多新特性和技術推出。這些技術特性,在很大程度上都能改進Oracle運行效率和應用效果,或者提高我們日常工作能力。

Temp資料表空間是Oracle資料表空間體系中一種很特殊的資料表空間對象。暫存資料表空間主要用於支援暫存資料表空間使用、排序分組動作空間溢出暫存等作用。我們對Temp的使用,大都是局限在空間分配和大小設定上。在11g有,有一系列針對Temp資料表空間的新特性,可以很大程度上協助我們工作。
 
視圖dba_temp_free_space是11g引入的一個新視圖,用於描述暫存資料表空間使用方式。

--------------------------------------分割線 --------------------------------------

 

Oracle Undo 鏡像資料探究

Oracle 復原(ROLLBACK)和撤銷(Undo)

Undo 資料表空間損壞導致無法open

Undo資料表空間失敗的處理方法

Oracle Undo資料表空間重建與恢複

--------------------------------------分割線 --------------------------------------

 

SQL> select * from dba_temp_free_space;

 

TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE

--------------- --------------- --------------- ----------

TEMP                  481296384      481296384  479199232

 

最近和一個朋友聊起其中allocated_space和free_space的含義,覺得很有意思。筆者決定通過一些實驗來證明結論。

 

1、環境準備

 

筆者使用Oracle11gR2環境進行測試。

 

SQL> select * from v$version;

 

BANNER

------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

 

當前僅包括預設的Temp暫存資料表空間。

 

SQL> select file_name, file_id, tablespace_name from dba_temp_files;

 

FILE_NAME                        FILE_ID TABLESPACE_NAME

------------------------------ ---------- ------------------------------

/u01/app/oradata/ORA11G/datafi          1 TEMP

le/o1_mf_temp_92t73qm8_.tmp             

 

說明:為減少系統對實驗結果影響,筆者建立全新的暫存資料表空間,通過一系列的典型操作來,監控欄位變化形態來證明實驗結論。

 

2、資料表空間建立過程

 

首先我們建立暫存資料表空間temptest。之前,我們檢查磁碟空間空閑情況:

 

[oracle@SimpleLinux ~]$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              48G  24G  22G  52% /

tmpfs                6.0G  256M  5.8G  5% /dev/shm

/dev/mapper/VolGrp01-lv1

                      194M  5.6M  179M  4% /voltest01

 

當前/目錄對應大小48G,使用24G,有22G可用空間。下面建立資料表空間:

 

SQL> create temporary tablespace temptest tempfile size 5G

  2  extent management local uniform size 1m;

 

Tablespace created

 

和建立同樣大小資料資料表空間相比起來,執行建立暫存資料表空間語句速度很快。之後查看磁碟空間情況。

 

[oracle@SimpleLinux ~]$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              48G  24G  22G  52% /

tmpfs                6.0G  256M  5.8G  5% /dev/shm

/dev/mapper/VolGrp01-lv1

                      194M  5.6M  179M  4% /voltest01

 

容量上沒有任何變化,如果Oracle建立了5G空間,至少會顯示在磁碟大小上。但是,從Oracle內部註冊體系和檔案系統中,我們都是可以看到臨時檔案的產生。

 

SQL> select file_name, file_id, tablespace_name from dba_temp_files;

 

FILE_NAME                        FILE_ID TABLESPACE_NAME

------------------------------ ---------- ---------------

/u01/app/oradata/ORA11G/datafi          1 TEMP

le/o1_mf_temp_92t73qm8_.tmp             

 

/u01/app/oradata/ORA11G/datafi          2 TEMPTEST

le/o1_mf_temptest_9j80859z_.tm           

p                                       

 

[oracle@SimpleLinux datafile]$ ls -l | grep temptest

-rw-r----- 1 oracle oinstall 5368717312 Feb 19 08:55 o1_mf_temptest_9j80859z_.tmp
 
 

這個是Oracle臨時資料檔案的特性,Oracle臨時檔案和資料檔案不同,建立之後是不直接佔滿空間的。我們都有這樣的經曆,建立一個很大的資料資料表空間,create/add過程依據不同的系統IO情況,是很消耗時間的。但是臨時檔案不是,一個上十幾G的臨時檔案可以在很快的建立成功。
 
但是,這個過程其實是“障眼法”。Oracle雖然建立了臨時檔案,檔案系統中也分配顯示大小檔案,但是空間卻沒有真正的分配。這在一些文獻中稱為“疏鬆檔案”,檔案架構範圍都在,但是沒有實際寫入過程。TempFile中的allocated,也就與疏鬆檔案有關。
 
注意:這就告訴我們系統部署人員,要注意臨時檔案的這個特性,不要以為磁碟上有很多的空間。

此時,我們觀察視圖dba_temp_free_space,結果如下:

 

SQL> select * from dba_temp_free_space;

 

TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE

--------------- --------------- --------------- ----------

TEMP                  481296384      481296384  480247808

TEMPTEST            5368709120        1048576  5367660544

 

Tablespace_size為5368709120bytes大小,摺合5G。這就是我們對暫存資料表空間Temptest的定義值。

Allocated_space為1048576bytes,摺合1M。我們建立了臨時檔案,即使是稀疏結構,在檔案系統上也會有一些中繼資料資訊佔據空間。此時的allocated_space=1M也是合理的。
 
Free_Space為5367660544bytes,摺合5119M。如果加入1M(allocated_size),就是5120M,摺合5G,與Tablespace_size對應。
 
目前資料庫沒有使用temptest進行操作,所以對新的臨時檔案而言,我們可以得到如下結論:

 

ü  新建立的資料檔案是以“疏鬆檔案”的方式,雖然建立成功,但是在檔案系統中不是寫入完全,空間佔據是沒有分配的狀態;

ü  新建立檔案情況下:Allocated_space最開始表示中繼資料資訊;

ü  新建立檔案情況下:Free_Space表示沒有分配的空間;

 

下面我們使用暫存資料表進行空間使用。

 更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.