在 Control Center 中,展開 HELLOWLD 並點擊 Table Spaces。應該會在 Control Center 右邊的窗口中看到三個表空間,如圖 7 所示:
圖 7. Control Center Table Spaces 視圖
這些表空間是 DB2 在創建數據庫 HWLD 時創建的。SYSCATSPACE 和 TEMPSPACE1 都是系統表空間,不能刪除或重新創建它們。SYSCATSPACE 是系統編目表空間,用來存儲關於數據庫的元信息。TEMPSPACE1 在某些數據庫操作期間用來存儲臨時結果。USERSPACE1 是默認的用戶表空間,用來存儲表、視圖和索引等用戶數據。任何具有足夠權力的 DB2 用戶都可以刪除和重新創建 USERSPACE1 或者創建其他用戶表空間。
SMS 或 DMS 表空間
在創建表空間時,可以選擇表空間是 SMS 表空間還是 DMS 表空間。SMS 代表 System Managed Space,DMS 代表 Database Managed Space。在 SMS 表空間中,空間由操作系統的文件系統管理,會根據需要分配空間。SMS 表空間需要的初始設置比較少,管理方面需要考慮的因素少,而且一般更容易創建和使用,因為空間會在需要時自動地分配。在 DMS 表空間中,空間由 DB2 管理。DMS 表空間需要在創建時預先分配空間,所以需要進行比較多的初始設置工作,管理方面也有更多需要考慮的因素。但是,它為用戶提供了更大的靈活性,可以更好地控制數據的布局並改進數據訪問的性能。在一般情況下,經過良好設計和調優的 DMS 表空間可以提供比相似的 SMS 表空間更好的性能。
在 Table Spaces 視圖中,點擊每個表空間。查看在右下方的窗口中顯示的詳細信息。SYSCATSPACE 和 USERSPACE1 都是 DMS 表空間,TEMPSPACE1 是 SMS 表空間。您還可以創建自己的表空間。
緩沖池
緩沖池(bufferpool) 是一個內存塊的集合,這些內存塊采用頁面的形式。在首次創建數據庫時,同時創建了一個默認的緩沖池 IBMDEFAULTBP。可以在創建表空間時,或者在 Buffer Pools 視圖中使用 Create New Bufferpool 向導,創建新的緩沖池。
緩沖池最重要的作用是,在數據庫讀寫硬盤上的數據時幫助減少 I/O 開銷。這是通過 I/O 預獲取和頁面清理器實現的。預獲取能夠減少讀取頁面的 I/O 開銷,其原理是:預先判斷特定查詢可能需要的頁面,然後將這些頁面讀入緩沖池,因此當查詢需要它們時,它們已經准備好了。頁面清理器確保將事務不再需要的已經更新的頁面首先寫到硬盤上,然後從緩沖池中清除它們。這確保緩沖池中有足夠的干淨空間可以讀取頁面。
DB2 支持不同的頁面大小:2K、4K、8K、16K 和 32K。IBMDEFAULTBP 使用 4K 的頁面大小。如果希望創建采用其他頁面大小的表空間,那麼首先要確保數據庫中有采用這種頁面大小的緩沖池。多個表空間可以使用同一個緩沖池。在創建或更改表空間時,可以指定要使用哪個緩沖池。選擇和創建適當的緩沖池對於數據庫性能很重要。可以根據需要創建新的緩沖池或更改現有的緩沖池。
在 Control Center 中,點擊 Buffer Pools。可以看到數據庫中的所有緩沖池。選擇創建新的緩沖池或更改現有的緩沖池。
圖 8. Control Center Bufferpool 視圖
DB2 系統目錄表和視圖
在創建新數據庫時,DB2 會在編目表空間中創建多個系統編目表和視圖。這些系統編目表和視圖用來跟蹤數據庫管理程序需要知道的關於數據庫對象、訪問控制信息和工具的重要信息。系統編目視圖基於基本系統編目表。用戶在一般情況下通過查詢系統編目視圖來查看感興趣的系統編目表數據。
在 Control Center 中,在 All Database 視圖下面,展開 HELLOWLD,然後選擇 Table Spaces。選擇右上窗口中顯示的 SYSCATSPACE。可以在右下窗口中看到這個表空間的概況:
圖 9. Control Center —— Tablespaces 視圖
點擊 Show Related Objects。會出現一個新頁面,其中顯示表空間 SYSCATSPACE 中的所有表和索引,以及它們的模式 SYSIBM。點擊 Indexes,列出 SYSCATSPACE 中的所有索引。Show SQL 顯示用來獲得這個表空間中的表或索引列表的 select 命令。
表、索引、模式和視圖都是重要的 DB2 對象,本教程後面都會詳細討論。但是,首先試試手工創建表空間:
圖 10. 創建新的表空間 —— 指定緩沖池
4. 這個面板允許指定表空間是由數據庫管理(DMS),還是由系統管理(SMS)。選擇 Database-managed space (high performance)。點擊 Next。Containers 頁面出現。
5. 在 Containers 頁面上,可以指定容器的數量。容器(Container) 可以是存儲表空間數據的目錄、文件或設備。可以為每個表空間創建多個容器,而且在創建表空間之後,可以刪除現有的容器或添加更多的容器。點擊 Add,Define Container 頁面出現,可以在這裡為新的表空間定義容器。
6. 可以為新的表空間定義多個容器。不同的容器可以位於不同的物理節點或路徑。按照圖 11 所示添加容器,然後點擊 OK。
圖 11. 創建新的表空間 —— 添加容器
7. 用相同的操作添加相同路徑上的另一個容器 tbsp_data1_c02。
8. 應該會看到添加的兩個容器,見圖 12。每個容器的大小是 5MB,總共 10MB。如果對已經定義的容器不滿意,那麼點擊 Change 或 Remove。點擊 Next 繼續。
圖 12. 創建新的表空間 —— 容器頁面
9. 下一個頁面幫助您定義這個表空間使用的區間和預獲取大小。一個區間(extent)包含一系列連續的頁面。頁面的數量稱為區間的大小。一般來說,希望一次分配多個頁面,從而減少空間分配的開銷。預獲取大小是指在啟用預獲取時預獲取器讀取的頁面數量。預獲取的概念在前面討論過。選擇 Less than 25MB 來改變表的平均大小,建議的區間大小會自動地改為適當的設置。
10. 點擊 Summary 顯示 Summary 頁面。點擊 Show SQL 並將 SQL 保存在 C:DB2hellowldcrt_tbsp.clp 中。點擊 Finish 讓 Create Tablespace 向導完成操作。
11. 在 Control Center Table Spaces 視圖中,應該能夠找到新的表空間 TBSP_DATA1。如果對新創建的表空間 TBSP_DATA1 不完全滿意,那麼點擊 Alter Tablespace 來修改這個表空間。如果希望創建 SMS 表空間,那麼點擊 Create New Tablespace。
圖 13. Control Center —— Tablespace 視圖
12. 將索引、大對象(Large Object,LOB)和大字段(Long FIEld,LF)或 XML 數據與表數據分開存儲是有好處的。但是,在本教程中沒有 LOB/LF 數據,所以不需要為它們創建表空間。XML 數據存儲在與其他數據相同的表空間 TBSP_DATA1 中,所以也不需要為它創建表空間。後面幾節將討論索引。
13. 在 DB2 命令行上,輸入 cd C:DB2HELLOWLD 來創建表空間。如果目錄 HELLOWLD 還不存在,需要首先創建它。然後,運行以下命令 notepad crt_tbsp.clp。在 notepad 中,編輯 Create Tablespace 語句,將它改為以下代碼: CREATE LARGE TABLESPACE TBSP_INDEX1 PAGESIZE 4 K MANAGED BY DATABASE USING
(FILE 'C:DB2NODE0000hellowlddbdirtbsp_index1_c01' 5120,
FILE 'C:DB2NODE0000hellowlddbdirtbsp_index1_c02' 5120)
EXTENTSIZE 8 OVERHEAD 10.5 PREFETCHSIZE 8 TRANSFERRATE 0.14 BUFFERPOOL IBMDEFAULTBP;
14. 將 COMMENT 語句改為: COMMENT ON TABLESPACE TBSP_INDEX1 IS 'tablespace to hold index data';
現在 crt_tbsp.clp 中的命令應該是下面這樣:
CONNECT TO HELLOWLD;
CREATE LARGE TABLESPACE TBSP_INDEX1 PAGESIZE 4 K MANAGED BY DATABASE USING
(FILE 'C:DB2NODE0000hellowlddbdirtbsp_index1_c01' 5120,
FILE 'C:DB2NODE0000hellowlddbdirtbsp_index1_c02' 5120 )
EXTENTSIZE 8 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.14 BUFFERPOOL IBMDEFAULTBP ;
COMMENT ON TABLESPACE TBSP_INDEX1 IS 'tablespace to hold index data';
CONNECT RESET;
15. 保存並退出 notepad。
16. 在 DB2 命令行窗口中運行 db2 -tvf crt_tbsp.clp 命令,應該會看到成功地創建了這個表空間。DB2 命令行選項 -tvf 允許運行來自文件的 DB2 命令。
17. 進入 Control Center,點擊 Control Center 主菜單中的 Selected,然後點擊下拉菜單中的 Refresh,查看到目前為止創建的所有表空間。