每一個Oracle版本,都會有很多新特性和技術推出。這些技術特性,在很大程度上都能改進Oracle運行效率和應用效果,或者提高我們日
每一個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的定義值。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com