您好,登錄后才能下訂單哦!
DB2支持的三種表空間SMS、DMS、DMS的自動存儲
DB2中,表空間是數據庫與這個數據庫中存儲的表之間的邏輯層。表空間在數據庫中創建,表在表空間中創建。容器是一個物理存儲設備。它可以由目錄名、設備名或文件名標識。容器被分配給表空間。表空間可以跨許多容器(類似于Oracle中datafile的概念),這意味著可以突破操作系統對于一個容器可以包含的數據量的限制。DB2 支持三種表空間:
· 系統管理的空間(System-Managed Space,SMS):在這里,由操作系統的文件系統管理器分配和管理空間。在DB2 9 之前,如果不帶任何參數創建數據庫或表空間,就會導致所有表空間作為 SMS 對象創建。
· 數據庫管理的空間(Database-Managed Space,DMS):在這里,由數據庫管理程序控制存儲空間。這種表空間本質上是一種特殊用途的文件系統實現,可以最好地滿足數據庫管理程序的需要。
· DMS 的自動存儲(Automatic Storage With DMS):自動存儲實際上不是一種單獨的表空間類型,而是一種處理DMS 存儲的不同方式。DMS 容器需要比較多的維護,在 DB2 V8.2.2 中引入了自動存儲,作為簡化空間管理的方式。
SMS 表空間需要的維護非常少。但是,與 DMS 表空間相比,SMS 表空間提供的優化選項少而且性能不好。
SMS、DMS與自動存儲
特性 | SMS | DMS | 自動存儲 |
是否分段(Striping)? | 是 | 是 | 是 |
默認類型 | Version 8 | 無 | Version 9 |
對象管理 | 操作系統 | DB2 | DB2 |
空間分配 | 按需增長/收縮 | 預先分配;大小可以收縮和增長,但是需要 DBA 干預。 | 預先分配;可以自動增長。 |
管理的簡便性 | 最好;很少需要調優,甚至不需要 | 好,但是需要一些調優(例如, EXTENTSIZE PREFETCHSIZE | 最好;很少需要調優,甚至不需要 |
性能 | 非常好 | 最好;可通過利用原始容器多獲得 5% 到 10% 的收益 | 最好;但是,可以不使用原始容器 |
表空間最大大小 | 64GB(4K 頁面) | 2TB(4K 頁面) | 2TB(4K 頁面) |
除了使用 SMS 表空間可以簡化管理之外,這兩種存儲模型之間最顯著的差異是表空間的最大大小。在使用 SMS 時,DBA最多只能在表空間中放 64GB 的數據。將頁面大小改為 32K,可以將這個限制擴大到 512GB,但代價是每個頁面上的可用空間可能會更少。改為 DMS 模型會將表空間限制擴大到 2TB(4K 頁面大小的情況下)。如果將頁面大小改為 32K,可用空間可以增長到 16TB。盡管還有讓表大小突破 64GB 限制的其他方法,但是最簡單的方法可能是一開始就使用 DMS 表空間。
DMS與自動存儲
DB2 8.2.2 引入了自動存儲的概念。自動存儲允許 DBA 為數據庫設置在創建所有表空間容器時可以使用的存儲路徑。DBA不必顯式地定義表空間的位置和大小,系統將自動地分配表空間。在 DB2 9 中,數據庫在創建時將啟用自動存儲,除非 DBA顯式地覆蓋這個設置。
啟用自動存儲的數據庫有一個或多個相關聯的存儲路徑。表空間可以定義為 “由自動存儲進行管理”,它的容器由 DB2根據這些存儲路徑進行分配。數據庫只能在創建時啟用自動存儲。對于在最初沒有啟用自動存儲的數據庫,不能在以后啟用這個特性。同樣,對于在最初啟用了自動存儲的數據庫,也不能在以后禁用這個特性。
特性 | 非自動存儲 | 自動存儲 |
容器的創建 | 必須在創建表空間時顯式地提供容器。 | 不能在創建表空間時提供容器;它們將由 DB2 自動地分配。 |
容器大小的調整 | 在默認情況下,表空間大小的自動調整是關閉的(AUTORESIZE NO)。 | 在默認情況下,表空間大小的自動調整是打開的(AUTORESIZE YES)。 |
初始大小 | 不能使用 INITIALSIZE 子句指定表空間的初始大小。 | 使用 INITIALSIZE 子句指定表空間的初始大小。 |
容器的修改 | 可以使用 ALTER TABLESPACE 語句(ADD、DROP、BEGIN NEW STRIPE SET 等等)執行容器操作。 | 不能執行容器操作,因為由 DB2 控制空間管理。 |
管理的簡便性 | 可以使用重定向的恢復操作重新定義與表空間相關聯的容器。 | 不能使用重定向的恢復操作重新定義與表空間相關聯的容器,因為由DB2 控制空間管理。 |
在DB2中表空間的存儲方式有兩種,SMS(System Managed Space)和DMS(Database Managed Space)。
SMS直接利用操作系統的文件系統來管理數據。表空間中的數據按照系統中所有容器上進行數據塊劃分。表空間中的所有的表都被賦予了它自己的文件名,此文件名在所有的容器中使用。文件擴展名指示出該文件中存儲的數據類型。
DMS是由數據庫進行表空間的存儲空間控制。當定義DMS表空間時,需要選擇設備或者文件列表,使其屬于該表空間。
DMS表空間和SMS表空間之間的主要差別在于,對于DMS的表空間,存儲空間是在創建表空間時分配的,而不是在需要時在向操作系統申請的。并且,在這兩種類型的表空間上,數據的放置也是有一些不同之處。例如:考慮進行高效率的表掃描時,數據塊在物理上連續存放是很重要的。對于SMS來說,操作系統的文件系統將決定每個邏輯文件頁面的物理存儲位置。根據文件系統上其他活動的級別以及用來確定存放位置的算法不同,這些邏輯連續的頁面可能會連續存放,也可能不連續分配。對于DMS,由于是數據庫管理程序直接與磁盤打交道,所以它在理論上可能保證頁面在物理上連續存放。
但是,應該注意的是,當使用DMS表空間時,有兩個容器選項:原始設備(raw)和文件(file)。當使用文件選項時,數據庫管理程序在創建表空間時向文件系統申請分配整個容器。由于是從文件系統分配得來,導致物理分配通常(但也不保證)是連續的。當使用原始設備容器時,數據庫管理程序直接控制整個設備,并總能確保數據塊中的頁連續分配。
SMS和DMS表空間相比,SMS表空間特別適合一般用途。SMS表空間能夠提供一定的性能,且管理成本很低。如果需要達到最佳的性能,則應該選用DMS表空間。因為使用文件容器或者SMS表空間移動數據時會發生雙重緩沖(在數據庫管理程序級首先緩沖一次數據,然后在文件系統再緩沖一次數據,這就是雙重緩沖),所以使用設備容器可能提供更好的性能。
SMS是系統管理的表空間,DMS是數據庫管理的表空間。
SMS在老的DB2版本使用,在新DB2版本中推薦使用DMS。
DMS可以使用裸設備,SMS不可以使用。
DMS可以將數據對象分開存放,例如常規數據、索引、大字段等,都可以分開存放,SMS做不到這點。
這是SMS和DMS的主要區別,除此之外,還有一些細節上的區別,可參考DB2的相關文檔
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。