該表具有一百萬行記錄,一個整型列上定義了主鍵。您運行帶有分布和索引所有選項的 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 是相同的。如果它是不同的(例如出於某種原因,測試中高於生產中),那麼您可能就不會看到相同的警告。同樣,我們所討論的其他參數也很重要。
SQL0437W rc=2 和其他返回代碼也可以按照相同的方法重新進行創建。
其他錯誤消息,例如 SQL0101N 和 SQL0901N 也可以使用相同的方法重新進行創建。甚至可以重新創建編譯器/優化器領域中的中斷。當您處於更老的補丁包級別,並需要嘗試最新補丁包級別以查看是否可以避免該問題時,或者當您需要嘗試不同的優化級別以查看是否將暫時克服該問題時,這就極其有用。
結束語
db2look 是一個功能極其強大的實用程序,可以用於重新創建訪問計劃問題以及編譯器問題,如本文中所討論的那些。一旦重新創建了該問題,您就可以測試許多可以影響性能的變量,如修改優化級別,嘗試注冊表變量和更新不影響生產的統計數據,以及測試新的補丁包級別。您將發現這個方便的實用程序可用於調試問題和提高查詢性能。
技術交流 永無止境