2. 將Table放入DB Buffer Cache & Extent相關操作

手動將表格放置快取區
之前提過可以將表格儲存在Database Buffer Cache裡面的Default Pool、Keep Pool或是Recycle Pool任一區塊已減少磁碟的讀取,並提高庫緩衝快取區(Database Buffer Cache)的使用效率, 將表格儲存在Database Buffer Cache裡面除了在建置表格時設定也可以事後設定。語法如下:

ALTER TABLE TEST.TEST_TABLE STORAGE ( BUFFER_POOL KEEP);

注意事項如下:

被儲存在Database Buffer Cache裡面的表格需要是小且常用的表格。當手動將表格儲存在Database Buffer Cache裡面,必須是當表格的Data Block從Data File裡面重心讀取新到Database Buffer Cache裡面才會生效,也就是說當執行了語法之後才讀取的Database Buffer Cache才會生效,所以說如果原本就有一些表格的資料區塊(Data Block)是在Database Buffer Cache裡面的話,還是會保留在原來的pool裡面,在還沒有被page out出來前,都還是會放在原來的區塊(Pool)。

手動擴增與解除Extent

手動擴增Extent,語法範例如下:
ALTER TABLE TEST.TEST_TABLE ALLOCATE EXTENT(SZIE 500K DATAFILE ‘/u01/oracle/data/test/users_data_01.dbf’);
  • 手動擴增Extent是可以執行列兩件事:
    • 可以指定Extent的大小。
    • 可以指定位置,如果後面的儲存參數都不設定就給原來的參數設定。
  • 手動擴增Extent可以自訂Extent的大小,但在手動擴增Extent之後,下次Oracle自動擴增Extent都是按照原來的參數給。
  • 為什麼要手動做擴增Extent呢?主要有兩的目的:
    • 利用手動擴增Extent以分散資料檔(Data File)負載平衡。因為通常在新增資料檔(Data File)時有先後順序,所以資料檔(Data File)的使用狀況也不同
    • 已知道需要做很大量的新增資料的動作,所以事先手動擴增Extent,以減少在新增資料時Oracle需要同時作自動擴增Extent的動作。
要注意是使用本地管理(Locally Managed)的Tablespace是無法更改除參數的,只有是資料庫字典管理(Dictionary Managed)的Tablespace才可以,但如果系統表格空間(System Tablespace)是使用本地管理(Locally Managed)的話是無法建資料庫字典管理表格空間(Dictionary Managed Tablespace )。

手動解除已擴增與尚未使用的Extent。
如果已擴增Extent給某個表格使用但尚未使用完,可用Deallocate的指令將那個空間沒使用過的Extent還給Oracle,留給其他Table或是儲存物件使用,也就是說將High-Water Mark以上的空間空出來。如圖所示
語法範例如下:
ALTER TABLE TEST.TEST_TABLE DEALLOCATE UNUSED ;
可加上KEEP指令,保留一定的空間給原來的Table或是儲存物件使用,也就是說保留High-Water Mark以上多少空間,而不要Deallocate回去,也就是說加上KEEP參數代表High-Water Mark以上要保留多少,如果不加KEEP參數代表High-Water Mark以上的空間都不要,如果將空間還回去時小於MINEXTENT的個數時Oracle不會Deallocate回去,但可以強制將KEEP設為0。語法範例如下:
ALTER TABLE TEST.TEST_TABLE DEALLOCATE UNUSED KEEP 0K;



沒有留言:

張貼留言