當數據庫裡某張表上有大量插入操作時,需要在表上做 RUNSTATS 命令保證數據庫掌握準確的統計信息。
當數據庫裡某張表中的記錄變化很大時(大量插入、刪除、更新操作),需要在表上做 REORG 和 RUNSTATS 一組維護操作來優化查詢的性能。有的表,可能初始化後從來都不會有數據量變化,就只需要做一次維護;有的表,一天之內的變化就很大,每天需要做多次維護。
注意,針對數據庫對象的大量操作,如反覆地刪除表,存儲過程,會引起系統表中數據的頻繁改變,在這種情況下,也要考慮對系統表進行REORG操作。
當數據庫裡某張表中的記錄變化很大時(大量插入、刪除、更新操作),需要在表上做 REORG 和 RUNSTATS 一組維護操作來優化查詢的性能。有的表,可能初始化後從來都不會有數據量變化,就只需要做一次維護;有的表,一天之內的變化就很大,每天需要做多次維護。
注意,針對數據庫對象的大量操作,如反覆地刪除表,存儲過程,會引起系統表中數據的頻繁改變,在這種情況下,也要考慮對系統表進行REORG操作。
一個完整的 REORG 表的過程應該是由下面的步驟組成的:
RUNSTATS -> REORGCHK -> REORG -> RUNSTATS -> BIND 或 REBIND
0 執行下面命令前要先連接數據庫
1 RUNSTATS
由於在第二步中 REORGCHK 時可以對指定的表進行 RUNSTATS 操作(在 REORGCHK 時指定 UPDATE STATISTICS),所以第一步是可以省略的。如果知道哪些特點的表有數據變化,又可以只執行第一步而省略第二步。
如果表名為 DB2INST1.STAFF,表上有索引,可以執行下面的 RUNSTATS 操作:
db2 runstats on table db2inst1.staff with distribution and detailed indexes all
2 REORGCHK
REORGCHK是根據統計公式計算表是否需要重整。
對於每個表有3個統計公式,對索引有5個統計公式(版本8),如果公式計算結果該表需重整,在輸出的 REORG 字段中相應值為*,否則為-。
如果數據庫中數據量比較大,在生產系統上要考慮 REORGCHK 的執行時間可能較長,需安排在非交易時間執行。
可以分為對系統表和用戶表兩部分分別進行 REORGCHK:
1) 針對系統表進行REORGCHK
db2 reorgchk update statistics on table system
使用 UPDATE STATISTICS 參數指定數據庫首先執行 RUNSTATS 命令。
2) 針對用戶表進行 REORGCHK
db2 reorgchk update statistics on table user
根據統計公式的計算結果(是否有 *),考慮是否必要對表進行 REORG。注意,某些小表的結果可能由於統計信息過少而不準確。
3 REORG TABLE
執行 REORG 可以考慮分為表上有索引和沒有索引兩種情況:
1) 如果表上有索引
如表名為 DB2INST1.STAFF,索引名為 DB2INST1.STAFF,
REORG 表:
db2 reorg table db2inst1.staff index db2inst1.istaff use tempspace1
建議 REORG 時可以使用USE參數指定數據重排時使用的臨時表空間。如果不指定, REORG 工作將會在表所在表空間中原地執行。
如果表上有多個索引,INDEX 參數值請使用最為重要的索引名。
REORG 索引:
db2 reorg indexes all for table db2inst1.staff
2) 如果表上沒有索引
如表名為DB2INST1.STAFF, SYSIBM.SYSTABLES
db2 reorg table db2inst1.staff use tempspace1
db2 reorg table sysibm.systables use tempspace1
4 RUNSTATS
參見步驟 1。
5 (可選) 上面命令完成後可以重複第二步,檢查 REORG 的結果,如果需要,可以再次執行 REORG 和 RUNSTATS 命令。
6 BIND 或 REBIND
RUNSTATS 命令運行後,應對數據庫中的 PACKAGE 進行重新聯編,簡單地,可以使用 db2rbind 命令來完成。
例如,如果數據庫名為 SAMPLE,執行:
db2rbind sample -l db2rbind.out
上述 DB2 命令詳細語法解釋需參考: 《Command Reference》
沒有留言:
張貼留言