create tablespace語法樹
>>-CREATE
--+-----------------------+---------------------------->
+-LARGE-----------------+
+-REGULAR---------------+
| .-SYSTEM-. |
'-+--------+--TEMPORARY-'
'-USER---'
>--TABLESPACE--tablespace-name---------------------------------->
>--+-----------------------------------------------------------+-->
| .-DATABASE PARTITION GROUP-. |
'-IN--+--------------------------+--db-partition-group-name-'
>--+--------------------------+--------------------------------->
'-PAGESIZE--integer--+---+-'
'-K-'
.-MANAGED BY--AUTOMATIC STORAGE--| size-attributes |---------------------.
>--+------------------------------------------------------------------------+-->
'-MANAGED BY--+-SYSTEM--| system-containers |--------------------------+-'
'-DATABASE--| database-containers |--| size-attributes |-'
>--+---------------------------------+-------------------------->
'-EXTENTSIZE--+-number-of-pages-+-'
'-integer--+-K-+--'
'-M-'
>--+-----------------------------------+------------------------>
'-PREFETCHSIZE--+-AUTOMATIC-------+-'
+-number-of-pages-+
'-integer--+-K-+--'
+-M-+
'-G-'
>--+-----------------------------+------------------------------>
'-BUFFERPOOL--bufferpool-name-'
>--+----------------------------------+------------------------->
'-OVERHEAD--number-of-milliseconds-'
>--+------------------------+----------------------------------->
+-NO FILE SYSTEM CACHING-+
'-FILE SYSTEM CACHING----'
>--+--------------------------------------+--------------------->
'-TRANSFERRATE--number-of-milliseconds-'
>--+---------------------------------+-------------------------><
'-DROPPED TABLE RECOVERY--+-ON--+-'
'-OFF-'
size-attributes
|--+---------------------+--+-----------------------------+----->
'-AUTORESIZE--+-NO--+-' '-INITIALSIZE--integer--+-K-+-'
'-YES-' +-M-+
'-G-'
>--+------------------------------------+----------------------->
'-INCREASESIZE--integer--+-PERCENT-+-'
'-+-K-+---'
+-M-+
'-G-'
>--+-----------------------------+------------------------------|
'-MAXSIZE--+-integer--+-K-+-+-'
| +-M-+ |
| '-G-' |
'-NONE-----------'
system-containers
.----------------------------------------------------------------------.
| .-,------------------. |
V V | |
|----USING--(----'container-string'-+--)--+-----------------------------+-+--|
'-| on-db-partitions-clause |-'
database-containers
.--------------------------------------------------------------.
V |
|----USING--| container-clause |--+-----------------------------+-+--|
'-| on-db-partitions-clause |-'
container-clause
.-,---------------------------------------------------.
V |
|--(----+-FILE---+--'container-string'--+-number-of-pages-+-+--)--|
'-DEVICE-' '-integer--+-K-+--'
+-M-+
'-G-'
on-db-partitions-clause
|--ON--+-DBPARTITIONNUM--+-------------------------------------->
'-DBPARTITIONNUMS-'
.-,--------------------------------------------------.
V |
>--(----db-partition-number1--+--------------------------+-+--)--|
'-TO--db-partition-number2-'
參數詳解
1.LARGE, REGULAR, SYSTEM TEMPORARY, or USER TEMPORARY
指定要創建的表空間的類型,如果不指定,默認類型是由”MANAGED BY”字句決定的。
LARGE:
只存儲永久性數據。這個類型只允許用在DMS表空間上。它也是創建DMS表空間的默認類型。當一個表放置在一個large類型的表空間中:
這個表可以比放置在regular類型的表空間中更大。
這個表可以支持每個data page有超過255行記錄,這樣可以增加空間利用效用。
這個表上的索引需要每行多出額外的2字節,和regular表空間上的索引對比。
REGULAR:
只存儲永久性數據。這個類型可以用在DMS和SMS表空間。這個類型也是唯一可以用在SMS表空間的類型,同時也是SMS的默認類型。
SYSTEM TEMPORARY
存儲臨時表,和完成一些排序和連接等操作的工作區。一個數據庫至少有一個系統臨時表空間,因為臨時表只能放置在這種表空間中。在數據庫創建時,自動創建一個臨時表空間。由於臨時表空間涉及到空間回收,故常采用SMS表空間
USER TEMPORARY
存儲創建的臨時表和聲明的臨時表。當數據庫被創建時,沒有用戶臨時表空間存在。為了允許定義臨時表和聲明臨時表,至少有一個用戶臨時表空間被創建,通過使用USE privileges. 由於臨時表空間涉及到空間回收,故常采用SMS表空間
注:當存在多個臨時表空間時,采取循環方式,平衡他們的使用。
2.tablespace-name
表空間的名稱,這是一個整體名字,是一個SQL標示符。不能使用在catalog中存在的表空間名稱,也不能以’SYS’開頭命名表空間。表空間所有者創建表空間,針對於這個表空間,被授予了USE privilege with the WITH GRANT OPTION。
3.IN DATABASE PARTITION GROUP db-partition-group-name
為表空間指定數據庫分區組。數據庫分區組必須已存在。當創建系統臨時表空間時,唯一允許的分區組是IBMTEMPGROUP。
‘DATABASE PARTITION GROUP’關鍵詞是不強制的,可有可無,並不影響參數。
如果創建表空間時,沒有指定分區組,Regular, Large和User Temporary類型使用IBMDEFAULTGROUP分組區;SYSTEM TEMPORARY類型,使用IBMTEMPGROUP類型。
4.PAGESIZE integer [K]
為表空間定義頁大小page size。沒有指定後綴K的情況下,有效值是4096,8192,16384,32768;有後綴K的情況下,有效值是4,8,16,32。如果不是這些有效值,會報錯。當表空間的page size和所指定的buffer pool的page size大小不一樣,也會報錯。pagesize的默認值在db cfg中可以找到,這個參數是在創建數據庫時設置的。
5.MANAGED BY AUTOMATIC STORAGE
指定表空間為自動存儲的表空間。如果數據庫沒有定義automatic storage,會報錯。可以為SMS或DMS指定為自動存儲。
| size-attributes |語句塊
AUTORESIZE:指定DMS表空間是否開啟auto-resize功能,當表空間要滿時,自動增加大小。其他參數見上面語法圖。
6.MANAGED BY SYSTEM
指定表空間為SMS,系統管理表空間。當type沒有指定,默認行為是創建regular表空間。
| system-containers |語法塊,指定SMS表空間的容器。
USING (‘container-string’,…)
對於SMS表空間,指定一個或多個容器存儲數據。container-string的長度超過240字節。每一個container-string可以是絕對或相對路徑。
注:如果用相對路徑,是相對於數據庫目錄,而且可以是軟連接。如果指定的文件夾不存在,數據庫管理器會自動創建這個文件夾。如果表空間被刪除,所有被數據庫管理器創建的組件也會被刪除。如果指定的文件夾已經存在,這個文件夾不能包含任何文件和子目錄。
container-string的格式依賴於操作系統。windows下,絕對路徑以盤符和:開始;Unix中,絕對路徑以/開始。相對路徑形式一樣。
也可以支持遠程資源,如LAN-redirected drives或NFS-mounted文件系統。
| on-db-partitions-clause | 指定容器在一個分區數據庫中。如果沒有指定,在分區組中找一個分區創建。如果是系統臨時表,則在每個分區中創建。
7.MANAGED BY DATABASE
指定表空間是DMS,數據庫管理表空間。當type沒有指定,默認是large。
| database-containers | 語法塊,為DBS表空間指定容器。
USING |container-clause|
(FILE|DEVICE ‘container-string’ number-of-pages,…)
對於DMS表空間,指定一個或多個container存儲數據。容器類型(FILE或DEVICE)和大小(沒有單位,默認是page的數量)需要指定。大小也可以指定單位,K,M,G,如果指定單位,用字節數除pagesize然後下取整,來決定page個數。container-stiring不能超過254個字節。
對於FILE的容器,必須是絕對或相對路徑。如果目錄中沒有任何組件,它會被數據庫管理器創建。如果文件不存在,它會被創建和初始化到指定大小。當表空間被刪除,所有組件也被刪除。如果文件存在,會被覆蓋,如果文件小於指定大小,會被擴展,如果大於指定大小,並不會被截斷。
對於DEVICE容器,container-string必須是設備名,設備必須已存在。
所有容器必須在所有數據庫中是唯一的。一個容器只能屬於一個表空間。一個表空間中不同容器的大小可以不同;但是,一個表空間中的容器大小一樣,可以獲得更好的性能。container-string的精確的形式和操作系統有關。
遠程資源也是支持的,同SMS。
|on-db-partitions-clause|,同SMS。
8.EXTENTSIZE number-of-pages
指定一個EXTENTSIZE,在跳轉到下一個容器前,需要在當前容器中的寫入的頁數。
也可以指定單位,K,M,最後的extent size為字節數除pagesize下取整。數據庫管理器會根據extent size,循環使用容器存儲數據。 根據DB2對容器進行循環寫入的原則,如果您選擇實現磁盤條帶分割以及DB2條帶分割,那麼表空間的擴展數據塊大小和磁盤的分割大小應該相同,這樣會使性能更加優化。
EXTENTSIZE的默認值在db cfg中可以找到,DFT_EXTENT_SZ,創建DB時候設置的,這個值有效值是2-256。
9.PREFETCHSIZE
在查詢之前,取出查詢所需要的數據,這樣不需要等待I/O。
默認值由db cfg中的dft_prefetch_sz決定。
默認為AUTOMATIC指定prefetch size為自動更新,由數據庫管理器控制。當容器增加等,會自動調整。
number-of-pages指定prefetch的頁數,也可以用單位,也是通過字節自動計算頁數。
10.BUFFERPOOL bufferpool-name
指定這個表空間使用的緩沖池,這個緩沖池必須已存在。如果沒有指定,默認的緩沖池(IBMDEFAULTBP)將被使用。緩沖池的的頁大小必須和表空間的頁大小一樣。
11.OVERHEAD number-of-milliseconds
指定I/O控制器開銷和磁盤尋道和延遲時間。這個值用於在查詢優化時決定I/O開銷,可以是任何數字,包括浮點。如果表空的容器OVERHEAD值不同,則取平均值。db2 v9以上,這個值默認是7.5,從v9之前升級過來的,默認是12.67.
12.FILE SYSTEM CACHING or NO FILE SYSTEM CACHING
指定I/O操作是否在操作系統級別進行緩存。如果不指定這個參數,默認值如下:
在JFS on AIX, Linux System z®, all non-VxFS file systems on Solaris, HP-UX,SMS臨時表空間,所有LOB和large data,都默認使用FILE SYSTEM CACHING。在所有其他平台和文件系統中,默認使用NO FILE SYSTEM
FILE SYSTEM CACHING在目標表空間上的I/O操作,會在操作系統級別上進行緩存。
NO FILE SYSTEM CACHING指定I/O操作繞過操作系統級別緩存。
13.TRANSFERRATE number-of-milliseconds
指定讀一個page到內存的時間。這個值用來決定在查詢優化時,I/O的成本。可以是浮點數,如果每個容器的值不同,取平均。V9以前版本,創建的DB,默認值是0.06毫秒,從V9以前版本升級到V9之後,默認值是0.18毫秒。
14.DROPPED TABLE RECOVERY
指明被刪除的表是否可以被恢復,通過使用”ROLLFORWARD DATABASE …RECOVER DROPPED TABLE”。
ON,指定被刪除的表,可以恢復。這是V8之後是默認值。
OFF,被刪除的表不能恢復。V7的默認值。
表空間日常管理命令
本例創建的表空間pagesize大部分為32kb,故
1、創建pagesize為32kb的bufferpool
create bufferpool bp32k size 2000 pagesize 32k
2、查看bufferpool屬性
select * from syscat.bufferpools
3、更改緩沖池大小
alter bufferpool bp32k size 2000
4、創建數據頁為32kb數據塊為1024kb預取值為默認,且不使用文件系統緩存的大型DMS表空間
create large tablespace tbs_data pagesize 32k managed by database using (file '/database/tbs_data/cont0' 100M,file '/database/tbs_data/cont1' 100M) extentsize 32 prefetchsize automatic bufferpool bp32k no file system caching
5、創建 數據頁為32kb的SMS系統臨時表空間
create temporary tablespace tbs_temp pagesize 32k managed by system using ('/database/tbs_temp') bufferpool bp32k
6、創建 數據頁為32kb的SMS用戶臨時表空間
create user temporary tablespace tbs_user_temp pagesize 32k managed by system using('/database/tbs_usertemp') bufferpool bp32k
7、創建 數據頁為32kb的自動存儲管理表空間
create tablespace tbs_index pagesize 32k bufferpool bp32k
8、創建初始大小為100MB,增量為100MB,最大大小為100GB的 自動存儲管理表空間
create tablespace tbs_data2 initialsize 100M increasesize 100M maxsize 100G
9、查看表空間信息
list tablespaces
list tablespaces show detail
db2pd -d testdb -tablespaces
get snapshot for tablespaces on testdb
也可以查看sysibmadm.snaptbsp和sysibmadm.snapcontainer這兩個視圖
10、查看表空相關的容器信息
list tablespace containers for 7 #tablespace id
list tablespace containers for 7 show detail
11、如果DMS表空間對應的存儲中還有未分配空間,可通過alter tablespace的extend、reduce或resize選項擴展已有表空間容器的大小。其中extend用來擴展容器大小,reduce用來縮減已有容器大小,resize重新設定容器大小。對於reduce和resize,需確保更改後的表空間有足夠空間,否則DB2拒絕操作。
alter tablespace tbs_data extend (file '/database/tbs_data/cont0' 10M)
12、如果表空間容器已經沒有剩余空間,可通過add選項增加容器,當然必要的情況下也可以通過drop選項刪除容器。對於add和drop操作會在容器間發生數據重新平衡(rebalance)。如果數據量很大,rebalance時間有可能很久,對系統可能造成很大影響。
alter tablespace tbs_data add(file '/database/tbs_data/cont2' 100m)
13、如果使用begin new strip set選項則會在現有容器空間用完時使用新增容器,該選項使數據不會在容器間做rebalance,但會造成數據偏移。
alter tablespace tbs_data begin new stripe set (file '/database/tbs_data/cont3' 100m)
14、查看自動存儲管理表空間路徑
db2pd -d testdb -storagepaths
15、對於自動存儲管理表空間,無法在表空間級進行容器更改,只能在數據級別,因為自動存儲路徑是在建庫時指定的。可以使用add storage on選項為數據庫添加新的存儲路徑。在v9.7版本之前,自動存儲路徑只能增加,不能刪除。新增加的存儲路徑不會備表空間立即使用,只有在已有存儲路徑文件系統空間滿了,才會使用新增路徑,增加路徑只是為了解決容量問題。v9.7版本之後,只要對使用自動存儲管理的表空間執行rebalance,則該表空間可以立即使用新增存儲路徑。
alter database testdb add storage on '/database/czm'
alter tablespace 7 rebalance
16、將DMS表空間轉換成自動存儲管理表空間
alter tablespace tbs_data managed by automatic storage
alter tablespace tbs_data rebalance
參考至:《DB2數據庫最佳管理實踐》徐明偉著
http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html
http://www.BkJia.com/database/201201/116270.html
本文原創,轉載請注明出處、作者
如有錯誤,歡迎指正
郵箱:[email protected]