使用DB2look重新創建優化器訪問計劃(9)
2024-07-21 02:41:45
供稿:網友
該表具有一百萬行記錄,一個整型列上定義了主鍵。您運行帶有分布和索引所有選項的 RUNSTATS,從而答應對表進行寫訪問。在獲得表統計數據的時候,有 100,000 條附加記錄插入了該表。因此對于表統計數據,CARD 將顯示為 1,100,000。但是,在我們開始收集索引統計數據時,例如,對于整型列上所定義的主鍵,就插入了 10,000 條附加記錄,因此,該表中的行數是 1,110,000,而主索引 FIRSTKEYCARD 將是 1,110,000。因此,您可以看到不一致性。表統計數據的 CARD 顯示表中應該是 1,100,000 條記錄,而主索引統計數據的 FIRSTKEYCARD 顯示表中應該是 1,110,000 條記錄。對于索引統計數據的更新將失敗,并發出 SQL1227N rc=8 錯誤消息(本例中),因為索引的 FIRSTKEYCARD 大于表的 CARD。您必須手工修復這種不一致性,對于本例,就是使 FIRSTKEYCARD 等于 CARD,均等于 1,100,000,或者反過來 —— 即增加 CARD 到等于 FIRSTKEYCARD,均等于 1,110,000?! ∧€可能碰到許多其他的不一致性。請確保在將輸出保存為文件的測試中運行帶有 -m 選項的 db2look 時,檢查所有的不一致性,并進行修復。這里僅僅給出了一個不一致性的例子;您可能會碰到很多其他的不一致性,這將留給用戶去修復所有這些不一致性,然后重新運行 db2look,將輸出重定向到文件中以確保所有更新的統計數據都運行得很好,沒有任何問題。 示例 6: 在該示例中,您在生產中獲得 SQL0437W rc=1 警告消息,但在測試中沒有看到它。本例中,按照上面的示例重新創建該問題。請確保 STMTHEAP 是相同的。假如它是不同的(例如出于某種原因,測試中高于生產中),那么您可能就不會看到相同的警告。同樣,我們所討論的其他參數也很重要?! QL0437W rc=2 和其他返回代碼也可以按照相同的方法重新進行創建。 其他錯誤消息,例如 SQL0101N 和 SQL0901N 也可以使用相同的方法重新進行創建。甚至可以重新創建編譯器/優化器領域中的中斷。當您處于更老的補丁包級別,并需要嘗試最新補丁包級別以查看是否可以避免該問題時,或者當您需要嘗試不同的優化級別以查看是否將暫時克服該問題時,這就極其有用?! 〗Y束語 db2look 是一個功能極其強大的實用程序,可以用于重新創建訪問計劃問題以及編譯器問題,如本文中所討論的那些。一旦重新創建了該問題,您就可以測試許多可以影響性能的變量,如修改優化級別,嘗試注冊表變量和更新不影響生產的統計數據,以及測試新的補丁包級別。您將發現這個方便的實用程序可用于調試問題和提高查詢性能。