第8章 tablespace與bufferpool
8.1 表空間類型
DB2 的表空間按管理方式
系統管理空間(System Management Space,SMS)和數據庫管理空間(Database Management Space,DMS)。
按類型分為:規則表空間、大對象表空間、系統臨時表空間、用戶臨時表空間
規則表空間中包含用戶數據的表。默認用戶表空間名為USERSPACE1,索引也存儲在規則表空間中,另外系統目錄表也放在規則表空間中。默認的系統目錄表空間名為SYSCATSPACE。
臨時表空間分為系統臨時表空間和用戶臨時表空間。
系統臨時表空間用來存儲各種數據操作(排序、重組表、創建索引、連接表)中所需的內部臨時數據,雖然可以創建任意多個系統臨時表空間,默認系統臨時表空間名為TEMPSPACE1。
用戶臨時表空間用來存儲已說明全局臨時表(已說明全局臨時表存儲的是應用程序臨時數據)。用戶臨時表空間不是在數據庫創建時默認創建的。
•
容器:每個表空間都有一個或多個容器。每個容器只能屬於一個表空間,但是一個表空間可以擁有許多容器。可以將容器添加到 DMS 表空間,或者從 DMS 表空間中刪除容器,而且可以更改容器的大小。添加新的容器時,將啟動一個自動的重新均衡操作以便將數據分布到所有容器上。重新均衡操作不會妨礙對數據庫的並發訪問。
8.2 緩衝池
一個緩衝池是與單個數據庫相關聯的,可以被多個表空間使用。當考慮將緩衝池用於一個或多個表空間時,必須保證表空間頁大小和緩衝池頁大小對於緩衝池所“服務“的所有表空間而言都是一樣的。一個表空間只能使用一個緩衝池。
創建數據庫時,會創建一個名為 IBMDEFAULTBP 的缺省緩衝池,所有的表空間都共享該緩衝池。可以使用 CREATE BUFFERPOOL 語句添加更多的緩衝池。緩衝池的缺省大小是 BUFFPAGE 數據庫配置參數所指定的大小,但是可以通過在 CREATE BUFFERPOOL 命令中指定 SIZE 關鍵字來覆蓋該缺省值。足夠的緩衝池大小是數據庫擁有良好性能的關鍵所在,因為它可以減少磁盤 I/O 這一最耗時的操作。大型緩衝池還會對查詢優化產生影響,因為更多的工作可在內存中完成。
8.3 相關命令
例一:在Windows上創建一個SMS表空間:
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM USING (‘d:\acc_tbsp’,’e:\acc_tbsp’,’f:\acc_tbsp’)
完成的結果為在D、E、F三個磁盤上創建了三個名稱為acc_tbsp的文件夾,每個文件夾下面都有一個名為SQLTAG.NAM的文件。
例二:刪除例一所創建的SMS表空間。
DROP TABLESPACE RESOURCE
運行完這條命令,相應的表空間會從DB2註冊表中刪除,但是磁盤上的三個文件夾仍然存在,需要手工刪除。
用命令行方式創建DMS表空間的簡單語法:
CREATE TABLESPACE <NAME> MANAGED BY DATABASE USING (FILE ‘<path>’ <size>)
或者
CREATE TABLESPACE <NAME> MANAGED BY DATABASE USING (DEVICE ‘<path>’ <size>)
例三:在Windows上創建一個DMS表空間,使用各自有5000頁的兩個文件容器:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (FILE ‘d:\db2data\acc_tbsp’ 5000, FILE ‘e:\db2data\acc_tbsp’ 5000)
運行結果為:在D、E磁盤的db2data文件夾下面各創建了一個名為acc_tbsp的文件,大小都為20000K(默認情況下每頁大小為4K)。
例四:在例三所創建的表空間中添加一個容器。
ALTER TABLESPACE RESOURCE ADD(FILE ‘f:\db2data\acc_tbsp’ 5000)
運行的結果為在RESOURCE表空間中包含了三個容器(文件):d:\db2data\acc_tbsp、 e:\db2data\acc_tbsp、 f:\db2data\acc_tbsp。
例五:用RESIZE子句更改例三所創建的表空間的容器的大小。
ALTER TABLESPACE RESOURCE RESIZE (file ‘d:\db2data\acc_tbsp’ 8000, file ‘e:\db2data\acc_tbsp’ 8000, file ‘f:\db2data\acc_tbsp’ 8000)
每個容器(文件)的大小變為8000頁。把容器的容量變大不會出錯,但是如果容器中的數據已經充滿,再把容器的容量縮小,則會引起錯誤。
例六:用EXTEND子句更改例三所創建的表空間的容器的大小。
ALTER TABLESPACE RESOURCE EXTEND (file ‘d:\db2data\acc_tbsp’ 1000, file ‘e:\db2data\acc_tbsp’ 1000, file ‘f:\db2data\acc_tbsp’ 1000)
該命令的運行結果為在原有容量的基礎之上,每個容器再增加1000頁。
例七:刪除例三中創建的DMS表空間。
DROP TABLESPACE RESOURCE
運行的結果為在DB2的註冊表中把RESOURCE表空間刪除,同時在磁盤上把相對應的文件夾和文件都一起自動刪除。
例八:在UNIX上創建一個DMS表空間,使用各有10000頁的3個邏輯卷:
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (DEVICE ‘/dev/rdblv6’ 10000, DEVICE ‘/dev/rdblv7’ 10000, DEVICE ‘/dev/rdblv8’ 10000)
例九:CREATE BUFFERPOOL 語句的示例
CREATE BUFFERPOOL BP3 SIZE 2000 PAGESIZE 8K
該緩衝池被分配給上面的 CREATE TABLESPACE 示例上的 USERSPACE3,並且在創建表空間之前創建該緩衝池。請注意,緩衝池和表空間的頁大小都是 8K,兩者是相同的
更改表空間的BUFFERPOOL:
ALTER TABLESPACE USERSPACE3 BUFFERPOOL BP3
如何查看緩衝池屬性
通過查詢 SYSCAT.BUFFERPOOLS 系統視圖可以列出緩衝池信息:
SELECT * FROM SYSCAT.BUFFERPOOLS
BPNAME BUFFERPOOLID NGNAME NPAGES PAGESIZE ES
—————— ———— —————— ———– ———– —
IBMDEFAULTBP 1 – 250 4096 N
1 record(s) selected.
查找緩衝池被分配給了表空間情況
SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES
TBSPACE BUFFERPOOLID
—————— ————
SYSCATSPACE 1
TEMPSPACE1 1
USERSPACE1 1
3 record(s) selected.
查看錶空間的屬性和容器
# LlST TABLESPACES SHOW DETAIL
Tablespaces for Current Database
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 336
Useable pages = 336
Used pages = 336
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 16
Number of containers = 1
要列出容器,根據 Tablespace ID:
#LIST TABLESPACE CONTAINERS FOR 2
Tablespace Containers for Tablespace 2
Container ID = 0
Name = C:\\DB2\\NODE0000\\SQL00004\\SQLT0002.0
Type = Path
8.4 表空間與緩衝池關係
第9章 分區數據庫介紹
9.1 分區數據庫架構
將一個數據庫分區時,我們把它分成一些獨立的部分,每一部分都包含各自的數據、配置文件、索引和事務日誌。每一部分就是一個數據庫分區。可以將多個分區分派到一台物理機器上。有時候,這些分區也叫做邏輯分區(logical partition),這些邏輯分區共享機器上的資源。
單分區數據庫是一種只有一個分區的數據庫。
多分區數據庫(也稱分區數據庫),分區也可稱為節點,是具有兩個或多個分區的數據庫,浙江移動經營分析系統均兩台SMP主機組成的分區數據庫。
9.2 分區鍵選擇
分區鍵(partitioning key)是一個列(或者一組列),用於確定某一行特定數據所在的那個分區。分區鍵是在一個表上使用 CREATE TABLE 語句來定義的。 DB2 使用分區圖再加上分區鍵以及散列算法(hashing algorithm)來確定數據庫分區組中哪一個數據庫分區將存儲給定的一行數據
以下文章點擊率最高
Loading…