Db2
如何在數據庫中創建專用於一張大表的緩衝池?
我在數據庫 (DB2) 中有 400K 記錄的表 TICKET。
我希望創建一個巨大的緩衝池,它只專用於這個大表,以便更快地響應。有哪些步驟來做到這一點?
目前我還有一個緩衝池,它用數據庫中的所有表(大約 200 個)覆蓋整個表空間!那麼我在那個舊的第一個創建的緩衝池中的特定表會發生什麼?該表應該留在第一個緩衝池中還是如何從該緩衝池中刪除?這個動作也有風險???
謝謝
- 創建新的緩衝池。
- 創建一個與該緩衝池關聯的新表空間。
- 創建所需表的副本並將其放置在新表空間中。
- 將原始表中的數據複製到新表中。
- 放下舊桌子。
雖然您可以使用該語句將表空間與不同的緩衝池相關聯
ALTER TABLESPACE
,但表只能與一個表空間相關聯。您不能發出ALTER TABLE
和切換錶空間。因此,不幸的是,您必須創建一個新表並將數據從一個表移動到另一個表。**編輯:**另請注意,您與舊表關聯的任何索引也將被刪除並且必須重新創建。
**編輯:**程式碼範例,請注意我假設一個 4K 表空間。如果需要,請替換您的正確尺寸(即 4、8、16 或 32 K)。
db2 create bufferpool TICKET_BP immediate size 250 automatic pagesize 4k; --note I list automatic storage here. We prefer to use that. Plus, IBM is pushing to move -- in that direction. This TS is for the table. db2 create large tablespace TICKETTS pagesize 4k managed by automatic storage bufferpool TICKET_BP; --this TS is for indexes. db2 create large tablespace TICKET_IND_TS pagesize 4k managed by automatic storage bufferpool TICKET_BP; db2 create large tablespace TICKET_LOB_TS pagesize 4k managed by automatic storage bufferpool TICKET_BP; -- now you can run the stored proc to move the data. It essentially does the same thing as what I specified above, except that it can move the data during normal work loads, so it should have less impact on locking and such, but it may take longer I'm guessing. db2 "call syscproc.admin_move_table('MAX','TICKET','TICKETTS','TICKET_IND_TS','TICKET_LOB_TS','','','','','','MOVE');
是的,肯定會在之前和之後進行備份。另請注意,如果您在數據移動期間允許任何事務,如果您必須回滾,則可能會失去這些事務。