Oracle TableSpace介紹


  • 簡介

  TableSpace 是Oracle空間管理上的邏輯單位,實體上存放資料的是Tablespace裡面的檔案(Data File);而我們所熟悉的Table就放在這 一個一個的檔案裡面。所以TableSpace可以看成是Data File的群組。通常在管理上會把使用者的資料與Oracle系統的物件以不同的Tablespace做切分 。如果一個Oracle上有多個不同的AP系統,以不同的TableSpace做切割,則可以達到管理與備份的目的。但是TableSpace的功用也不僅僅只是簡單的群組分類而已,Oracle 提供了許多功能上的參數來設定TableSpace來達到空間管理與效能增進的目的。

  有必要提的是,TableSpace沒辦法跨資料庫,TableSpace中的Data File沒辦法跨TableSpace,Data File中的Table (Segement)可以跨 Data File,但不能跨TableSpace。簡單的來說,一個Table裡面的資料是有可能因為Oracle的空間分配而分布在同一個TableSpace的 不同的Data File中的;因此一個Data File創出來後,是不能隨便刪除的,這將會造成嚴重的資料損毀的問題。


SYSTEM與Non-SYSTEM TableSpace

  當資料庫剛建立起來,系統會建立一個叫做SYSTEM的系統TableSpace,存放SYS、SYSTEM等User重要的系統資料(ex:資料字典與預儲程序等) 如果我們建立Oracle User時,不指定預設的TableSpace,則此User則會以SYSTEM TableSpace作為預設的TableSpace。 這將造成管理上的混亂與嚴重的效能問題,這是必須特別注意的。


TableSpace的類型:Permanent、Undo、Temporary
  • Permanent Tablespace

  一般我們創建給AP使用的都是Permanent Tablespace。裡面物件的生命週期不會隨著交易或者 使用者的session結束而消失。


Undo Tablespace

  Undo Tablespace是系統用的特殊的Tablespace,用來取代過去的rollback segement的機制, 主要的功用是提供使用者修改資料未commit之前的read consistency的功能以及rollback交易的功能。 也因為undo tablespace主要是取代過去的rollback segement的機制,所以不能存放其他種類的segement。 undo tablespace只能是local managed。


Temporary Tablespace

  Temporary Tablespace也是系統用的特殊的Tablespace。當使用者需要做排序時, 有時就會使用Temporary Tablespace,因此裡面的Segement的生命週期都很短,可能交易結束或者 User的Session結束就會消失。每個系統都必須要有一個預設的Temporary Tablespace(Default Temporary Tablespace), 如果沒有的話,忘了指定使用哪個Temporary Tablespace的使用者會以SYSTEM tablespace來當作Temporary Tablespace,這樣就很糟糕。 以下列出幾個Temporary Tablespace的特性。

  1. Temporary Tablespace是NOLOGGING模式,因此若資料庫損毀,做Recovery不需要恢復Temporary Tablespace。
  2. Temporary最好是使用Local managed Tablespace
  3. 若使用local managed模式,UNIFORM SIZE參數最好是Sort_Area_Size的參數,這樣效能比較好。
  4. Uniform size預設1024K,而Sort_area_size預設是512K
  5. Temporary Tablespace不能使用local managed的AUTOALLOCATE參數。

TableSpace的Extent空間管理:Local Managed 與Dictionary Managed

  Local Managed 與Dictionary Managed最主要的分別,在於空間管理方式的不同。Local managed 的管理方式是讓 每個TableSpace自己利用bitmaps去管理他自己的空間,而Dictionary Managed則是利用SYSTEM TableSpace的資料字典來做空間管理。 這兩者最大的不同在於Local managed大大的改善了Oracle做空間管理(例如:產生新的Exten或釋放Extent...等)時,搶奪 SYSTEM TableSpace資源的問題。所以Oracle從8i以後已經朝Local managed的方向去走了,所以我們應該盡量使用Local managed的方式才對,所以Dictionary managed的方式不多做介紹了。

  • Local managed tablespace
  1. Local managed使用bitmaps做空間管理。
  2. bitmaps中每個bit代表一個data block或者一堆相鄰的data block(extent)
  3. 從10g開始,SYSTEM Tablespace預設使用local managed -->Oracle建議使用local managed的證據。
  4. 假如SYSTEM TableSpace是local managed,那麼其他TableSpace必須是local managed。
  5. 若沒指定使用local managed或者dictionary managed,則預設使用local managed。
  6. 使用local managed可以增進效能,因為減少了SYSTEM TableSpace的效能競爭。
  7. 使用local managed則不需要做空間縫合(loalescing),因為相鄰的不同大小的extent,辨識extent使用狀態的bits也在一起 ,Oracle可以直接使用這些相鄰的extent。不需要先進行縫合才可以使用。這也可以增進部份效能。

  • local managed的extent空間管理(Extent Management):AUTOALLOCATE與UNIFORM

  AUTOALLOCATEUNIFORM這兩個參數,是用來設定Local managed的extent大小的參數。 AUTOALLOCATE是讓Oracle自己來決定extent的大小;而UNIFORM則是強制規定TableSpace中extent的為固定的大小。 通常若你明確的知道extent必須多大,才會使用UNIFORM,使用UNIFORM的好處是每個extent的大小都相同,不會產生空間破碎的問題。 但是如果無法預知extent必須多大,使用AUTOALLOCATE會比較好,讓Oracle自己決定使用extent的大小,可以比較符合實際的需求 ,因此會比較節省空間,但是這可能會產生部分空間破碎的問題。使用AUTOEXTENT,Oracle會使用的extent大小為64k、1M、8M、64M。 根據我系統上使用的結果,99.95%的extent都是使用64k、只有少部分使用1M 的extent,所以其實破碎的情況不嚴重,使用AUTOALLOCATE 在我的系統上其實就夠用了。想知道你的TableSpace所使用的Extent有幾種,請用下列的語法:

Select bytes,count(*) from dba_extents where tablespace_name='your_tablespace_name' group by bytes


Local managed中的Segment的空間管理(Segment Space Management ):AUTO與MANUAL

  Tablespace中的Segment的空間管理上,可以設置的參數為AUTO與MANUAL。MANUAL是使用 我們熟悉的PCTUSED、FREELISTS、FREELIST GROUPS的方式來管理Segment中的data block;而AUTO則是 使用bitmaps來管理data block。使用AUTO來管理的話,以往create tablespace或create table時設定的 storage的參數設定都不需要再設定了,因為data block的管理已經是bitmaps了,不再是free list了。如果沒有特別的需求話 ,使用AUTO會比使用MANUAL有更好的空間利用率,與效能上的提升。


Local managed中的Create TableSpace範例

Create Tablespace MYDATA
Datafile '/u1/oradata/mydb/mydata1.dbf' size 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED ,
          '/u1/oradata/mydb/mydata2.dbf' size 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
Extent Management Local
Segment Space Management Auto;


dictionary managed中的Create TableSpace範例

Create Tablespace MYDATA
Datafile '/u1/oradata/mydb/mydata1.dbf' size 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
Extent Management Dictionary
Default Storage (
Initial 64k
next 64k
minextents 2
maxextents unlimited
pctincrease 0 );        

转载于:https://www.cnblogs.com/lavandachen/articles/2049591.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值