2008/6/16

db2 reorg

當數據庫裡某張表上有大量插入操作時,需要在表上做 RUNSTATS 命令保證數據庫掌握準確的統計信息。

當數據庫裡某張表中的記錄變化很大時(大量插入、刪除、更新操作),需要在表上做 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》

沒有留言:

JPA+complex key+custom Query

  來源: https://www.cnblogs.com/520playboy/p/6512592.html   整個來說,就是有複合主鍵 然後要使用  public interface XxXXxx DAO extends CrudRepository<Tc...