runstats、reorgchk、reorg
1、runstats
runsats可以搜集表的信息,也可以搜集索引信息。作為runstats本身沒有優化的功能,但是它更新了統計信息以后,可以讓DB2優化器使用最新的統計信息來進行優化,這樣優化的效果更好。
runstats on table <tbschema>.<tbname> 收集表 <tbname> 的統計信息。表名必須是用 <dbschema> 全限定的。
2、reorg
A、 reorg table <tbschema>.<tablename> 通過重構行來消除“碎片”數據並壓縮信息,對表進行重組。表名必須是用 <dbschema> 全限定的。
B、
reorg還有一個功能就是可以將表中的數據按照某個索引關鍵字的順序排列,從而可以減少某些查詢I/O的數量。
執行REORG可以考慮分為表上有索引和沒有索引兩種情況:
a.如表名為DB2INST1.STAFF,索引名為DB2INST1.ISTAFF
reorg table db2inst1.staff index db2inst1.istaff use tempspace1
b.建議REORG時使用USE參數指定數據重排時使用的臨時表空間,否則,REORG工作將會
在表所在表空間中原地執行.如果表上有多個索引,INDEX參數值請使用最為重要的索
引名.
c.表上沒有索引:
reorg table db2inst1.staff use tempspace1
reorg table sysibm.systables use tempspace1
http://weiruan85.javaeye.com/blog/317520
3、
讓db2系統定時runstats、reorg
Q:定期runstats、reorg
A:在db2 v8.2以上可以使用 CALL SYSPROC.ADMIN_CMD來實現,
這里主要講在v8.2以前的版本中利用shell或者批處理來實現同樣的功能
因為在以前的版本中存儲過程中是不能使用DDL操作語句的!(這點對於oracle剛轉過來的人來說很是郁悶的)
然后可以利用db2自帶的配置自動維護來做,但是java做的東西比較讓人感覺頭痛!尤其是速度和莫名的錯誤!
本代碼使用操作系統的腳本來實現這部分功能!
1.windows下
如下:
下一個cmd文件s.cmd
內容如下:
db2 connect to ccp_dm
db2 -x "select 'runstats on table '||rtrim(tabschema)||'.'||tabname||' on all columns' from sysstat.tables where card=-1">tab.sql
db2 -f tab.sql
--其中where后的條件可以修改
然后就是定制任務:用windos的定制任務!每周或者每月運行,這個就不講了哈!
這部分經測試,通過!
不過能,這里只提到了runstats,對於reorg同理也可以實現!
http://myfriend2010.itpub.net/post/29012/386779
4、reorgchk
C:\Documents and Settings\Administrator>db2 reorgchk update statistics on table all
正在執行 RUNSTATS ....
reorgchk on table all 確定是否需要對表進行重組。這對於對所有表自動執行 runstats很有用。
1) 針對系統表進行REORGCHK
db2 reorgchk update statistics on table system
使用UPDATE STATISTICS參數指定數據庫首先執行RUNSTATS命令。
2) 針對用戶表進行REORGCHK
db2 reorgchk update statistics on table user
下面是執行的部分結果
db2 reorgchk update statistics on table user
執行 RUNSTATS ....
db2 reorgchk 命令是最重要的、也是經常被忽略的 DB2 調整命令之一。 db2 reorgchk 命令被忽略是因為它不是一個一次性調整項。由於更新是在 DB2 數據庫上執行的,因此關於表的統計信息將不會是最新的。db2 reorgchk 命令更新 DB2 優化器所使用的重要統計信息。建議在大約每 10,000 次更新后重復 db2 reorgchk 命令。
在運行 db2 reorgchk 命令之前,您應該停止 IBM Directory Server 以防止在命令執行的同時發生任何 DB2 查詢或更新。雖然這是可選的,但數據庫查詢和更新可能會非常緩慢並有可能超時。
請注意,運行 db2 reorgchk 命令所帶來的性能益處是即時的。不必在 db2 reorgchk 命令之后重新啟動 DB2。
除了提高性能之外,db2 reorgchk 命令還報告關於數據庫中所有表和索引的統計信息。db2 reorgchk 命令還報告關於 DB2 表的組織的統計信息。
http://publib.boulder.ibm.com/tividd/td/ITAME/SC32-1351-00/zh_CN/HTML/am51_perftune66.htm