DB2數據庫運行維護
DB2提供了RUNSTATS命令來手工更新數據庫統計信息。在成功執行RUNSTATS命令之後,靜態SQL查詢並不會使用最近的數據庫統計信息,這是因為靜態SQL的訪問策略在之前執行BIND時就已確定,而當時使用的統計信息有可能與現在的並不一致。這時候就需要重新綁定使用靜態sql的應用程序,這樣查詢優化器就可以根據數據庫最新統計信息來選擇獲取數據庫的最佳訪問策略。但是,對於使用動態sql的應用程序而言,則沒有必要進行重新綁定,因為動態sql語句的訪問策略是根據統計信息在運行時動態生成的。
如何更新統計信息
隻有當進行顯示請求時,對象的統計信息才會在係統目錄表中被更新。有以下幾種方法可以更新部分或全部統計信息:
- 使用RUNSTATS(運行統計信息,Run Statistics)命令
- 使用帶有指定的統計信息收集選項的LOAD
- 對針對一組預先定義的係統目錄視圖進行操作的SQL UPDATE 語句進行編碼
- 使用"reorgchk update statistics"命令
記住:批量加載數據之後要運行RUNSTATS命令
一次對一張表進行RUNSTATS命令:
db2 -v runstats on table tabschema.tabname and indexes all
這個命令將收集該表及其所有索引(基本級別)的統計信息。
查看是否執行了RUNSTATS命令
db2 -v "select tbname,nleaf,nlevels,stats_time from sysibm.sysindexes"
[db2inst1@db22 adm]$ db2 get db cfg for sample | grep -i "heap"
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC(5000)
Sort list heap (4KB) (SORTHEAP) = AUTOMATIC(256)
Database heap (4KB) (DBHEAP) = AUTOMATIC(2002)
Utilities heap size (4KB) (UTIL_HEAP_SZ) = AUTOMATIC(5000)
SQL statement heap (4KB) (STMTHEAP) = AUTOMATIC(8192)
Default application heap (4KB) (APPLHEAPSZ) = AUTOMATIC(256)
Statistics heap size (4KB) (STAT_HEAP_SZ) = AUTOMATIC(4384)
[db2inst1@db22 adm]$ db2 get dbm cfg | grep -i "heap"
Database monitor heap size (4KB) (MON_HEAP_SZ) = AUTOMATIC(90)
Java Virtual Machine heap size (4KB) (JAVA_HEAP_SZ) = 2048
Sort heap threshold (4KB) (SHEAPTHRES) = 0
Application support layer heap size (4KB) (ASLHEAPSZ) = 15
最後更新:2017-04-12 23:25:18