系統管理的空間(SMS)和數據庫管理的空間(DMS)是DB2數據庫中,兩種類型的基本表空間。本文將為您介紹調整表空間大小的方法,供您參考,希望對您有所幫助。
與 SMS 表空間相關聯的容器是文件系統目錄,而這些目錄中的文件會隨著表空間中對象的增長而增長。文件會增加至達到其中一個容器上的文件系統限制或達到數據庫的表空間大小限制。
DMS 表空間由文件容器或原始設備容器組成,它們的大小是在將容器指定給表空間時設置的。當容器中的所有空間都已被使用時,則認為表空間已滿。但是,與 SMS 不同,您可以使用 ALTER TABLESPACE 語句來添加或擴展容器,從而允許將更多的存儲器空間提供給表空間。DMS 表空間還具有稱為“自動調整大小”的功能。當可以自動調整大小的 DMS 表空間中的空間被消耗時,DB2 數據庫系統可能回擴展一個或多個文件容器。SMS 表空間具有類似於自動增長的功能但術語“自動調整大小”專門用於 DMS。
啟用和禁用自動調整大小(AUTORESIZE)
缺省情況下,不會對 DMS 表空間啟用自動調整大小功能。下列語句創建不啟用自動調整大小功能的 DMS 表空間:
CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M)要啟用自動調整大小功能,將 AUTORESIZE YES 子句指定為 CREATE TABLESPACE 語句的一部分:
CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M) AUTORESIZE YES在已創建 DMS 表空間之後,還可以通過在 ALTER TABLESPACE 語句上使用 AUTORESIZE 子句來啟用或禁用自動調整大小功能:
ALTER TABLESPACE DMS1 AUTORESIZE YES
ALTER TABLESPACE DMS1 AUTORESIZE NO有兩個其他屬性(MAXSIZE 和 INCREASESIZE)與自動調整大小的表空間相關聯。
最大大小(MAXSIZE)
CREATE TABLESPACE 語句上的 MAXSIZE 子句定義表空間的最大大小。例如,以下語句創建可增長至 100 兆字節(如果數據庫有多個數據庫分區,則是每個數據庫分區的大小)的表空間:
CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M)
AUTORESIZE YES MAXSIZE 100 MMAXSIZE NONE 子句指定表空間沒有最大限制。表空間可以一直增長,直到達到文件系統限制或 DB2 表空間限制(請參閱 SQL Reference 中的 SQL Limits 部分)。如果在啟用自動調整大小功能時不指定 MAXSIZE 子句,則使用缺省值無最大大小限制。
ALTER TABLESPACE 語句更改已經啟用了自動調整大小的表空間的 MAXSIZE 的值。例如:
ALTER TABLESPACE DMS1 MAXSIZE 1 G
ALTER TABLESPACE DMS1 MAXSIZE NONE如果指定了最大大小,則 DB2 強制使用的實際值可能會比提供的值略小,原因是 DB2 會嘗試使容器增長保持一致。不可能通過使兩個數量並准確達到最大值來擴展容器。
增大大小(INCREASESIZE)
當表空間中已沒有空閒擴展數據塊但請求了一個或多個擴展數據塊時,CREATE TABLESPACE 語句上的 INCREASESIZE 子句定義用來增大表空間的空間量。可以顯式大小或百分比的形式指定該值。例如:
CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M)
AUTORESIZE YES INCREASESIZE 5 M
CREATE TABLESPACE DMS1 MANAGED BY DATABASE
USING (FILE '/db2files/DMS1' 10 M)
AUTORESIZE YES INCREASESIZE 50 PERCENT百分比值意味著每次需要增大表空間時都要計算增大大小,並且增大量基於增大時表空間大小的百分比。例如,如果表空間大小是 20 兆字節而增大大小是百分之 50,則第一次表空間增大 10 兆字節(增大到大小為 30 兆字節),下一次增大 15 兆字節。
如果在啟用了自動調整大小功能時未指定 INCREASESIZE 子句,則 DB2 確定要使用的適當值,該值在表空間的存在期間可能會有變化。與 AUTORESIZE 和 MAXSIZE 一樣,可以使用 ALTER TABLESPACE 語句更改 INCREASESIZE 的值。
如果指定了增長大小,則 DB2 使用的實際值可能會與提供的值稍有不同。對所用值進行這種調整是為了使表空間中各容器的增大保持一致。
如何擴展表空間
對於可以自動調整大小的表空間,當所有現有空間都已被使用並請求了更多空間時,DB2 會嘗試增大該表空間的大小。DB2 確定可以擴展表空間中的哪些容器以便不需要進行重新平衡。DB2 只擴展位於表空間圖(該圖描述表空間的存儲器布局)的最後范圍內的那些容器,並且對它們擴展相同的數量。
例如,考慮下列語句:
CREATE TABLESPACE TS1 MANAGED BY DATABASE
USING (FILE 'C:\TS1CONT' 1000, FILE 'D:\TS1CONT' 1000,
FILE 'E:\TS1CONT' 2000, FILE 'F:\TS1CONT' 2000)
EXTENTSIZE 4
AUTORESIZE YES請記住,DB2 將每個容器的一小部分(一個擴展數據塊)用於元數據,以下是根據 CREATE TABLESPACE 語句為表空間創建的表空間圖。(表空間圖是表空間快照的輸出的一部分。)
表空間圖:
范圍 分割集 分割區 最大 最大 起始 結束 調節 容器
編號 偏移 擴展數據塊 頁 分割區 分割區
[ 0] [ 0] 0 995 3983 0 248 0 4 (0,1,2,3)
[ 1] [ 0] 0 1495 5983 249 498 0 2 (2,3)表空間圖表明標識為 2 和 3 的容器(E:\TS1CONT 和 F:\TS1CONT)是僅有的在圖最後面范圍內的容器。因此,當 DB2 自動擴展此表空間中的容器時,它將只擴展這兩個容器。
注:
如果創建表空間時所有容器的大小都一樣,則圖中只有一個范圍。在這種情況下,DB2 擴展每一個容器。要防止限制為只擴展一小部分容器,創建表空間時使各容器大小相等。
如在 MAXSIZE 部分中所討論的那樣,可以指定對表空間大小的最大限制,也可以提供 NONE 值以便可無限增大表空間。(當使用 NONE 或無限制時,上限實際上是由文件系統或 DB2 表空間限制定義的。)DB2 不會嘗試增大表空間至超過上限。但是,在達到上限之前,嘗試增大容器可能會因為文件系統已滿而失敗。在這種情況下,DB2 不會在增大表空間並將會向應用程序返回“空間不足”條件。
解決此情況有兩種方法:
增大已滿文件系統上可用的空間量。
對表空間執行一些容器操作,使得這些容器不再位於表空間圖的最後。使正被討論的容器不再處於表空間圖的最後的最簡易方法是將新的分割集添加至具有一組新容器的表空間。最佳示例確保所有容器大小相等。可以使用 ALTER TABLESPACE 語句的 STRIPE SET 子句來添加新的分割集。通過添加新的分割集,就會將新的范圍添加至表空間圖。借助於新的范圍, DB2 自動嘗試擴展的容器就會處於此新的分割集中,而舊的容器保持不變。
注:
當暫掛用戶啟動的容器操作或者正在執行後續生新平衡時,會禁用自動調整大小功能,直到落實了操作或重新平衡完成為止。
例如,表空間具有三個大小一樣的容器,每個容器都位於它自己的文件系統上。當對表空間執行一些操作時,DB2 會自動擴展這三個容器。最後,其中一個文件系統變滿了,對應的容器就不能再增大了。如果該文件系統上不能再提供更多的可用空間,則必須對表空間執行容器操作,使得存在問題的容器不再處於表空間圖的最後范圍內。在這種情況下,您可以添加新的分割集並指定兩個兩個容器(仍然具有空間的每個文件系統上一個),也可以指定多一些或少一些容器(再次確保要添加的每個窗口大小一樣並且要使用的每個文件系統上有足夠的空間)。當 DB2 嘗試增大表空間的大小時,現在它將嘗試擴展這些新分割集中的容器而不是舊容器。
上面描述的情況僅適用於未啟用自動調整大小的自動存儲器表空間。如果自動存儲器表空間啟用了自動調整大小,則 DB2 會通過添加容器的新分割集來自動處理文件系統變滿的情況。
監視
對 DMS 表空間自動調整大小是作為表空間監視器快照輸出的一部分顯示的。還會顯示增大大小值和最大大小值:
啟用自動調整大小 = Yes 或 No
當前表空間大小(字節) = ###
最大表空間大小(字節) = ### 或 NONE
增加大小(字節) = ###
增加大小(百分比) = ###
上一次成功調整大小的時間 = YYYY/MM/DD HH:MM:SS.SSSSSS
上一次調整大小嘗試失敗 = Yes 或 No使用說明
自動調整表空間大小具有下列含義:
啟用了自動調整大小的表空間具有 DB2 通用數據庫™ 版本 8.2.1 或更早版本不能識別的相關元數據。在這些版本上嘗試使用啟用了自動調整大小的表空間的數據庫會產生故障(極有可能會返回 SQL0980C 或 SQL0902C 錯誤)。可能會對嘗試連接至數據庫或嘗試復原數據庫發送錯誤。如果表空間啟用了自動調整大小,則對這些表空間禁用“自動調整大小”功能會除去元數據,從而允許在 DB2 版本 8.2.1 或更早版本上使用該數據庫。
當禁用“自動調整大小”功能時,如果後來再啟用此功能,則與 INCREASESIZE 和 MAXSIZE 相關聯的值會丟失。
不能對使用原始設備容器的表空間啟用此功能。同樣,不能將原始設備容器添加至可以自動調整大小的表空間。這些操作會產生錯誤(SQL0109N)。如果需要添加原始設備容器,則必須首先禁用此功能。
重定向復原操作不能更改容器定義以包括原始設備容器(SQL0109N)。
由於最大大小限制了 DB2 自動增大表空間的方式,所以最大大小也限制了用戶可增大表空間的方式。換言之,當執行向表空間添加空間的操作時,生成的大小必須小於或等於最大大小。可以使用 ALTER TABLESPACE 語句的 ADD、EXTEND、RESIZE 或 BEGIN NEW STRIPE SET 子句來添加空間。