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