我在做什麼......AS/400查詢響應時間
我在C#/ .Net應用程序中通過ODBC連接到AS400(目前我必須使用ODBC)。 查詢是狗慢。我運行DBmonitor &查詢它返回的文件,其中QQIDXA ='Y',並且我被告知創建已存在的索引。原因碼是I1 & I3。
我已經重建索引,按照where子句的順序,沒有運氣。
我該怎麼做才能改善我的AS400查詢?
AHIA, LarryR ...
我在做什麼......AS/400查詢響應時間
我在C#/ .Net應用程序中通過ODBC連接到AS400(目前我必須使用ODBC)。 查詢是狗慢。我運行DBmonitor &查詢它返回的文件,其中QQIDXA ='Y',並且我被告知創建已存在的索引。原因碼是I1 & I3。
我已經重建索引,按照where子句的順序,沒有運氣。
我該怎麼做才能改善我的AS400查詢?
AHIA, LarryR ...
我在DB2/400查詢和索引中遇到的一個常見問題與字段屬性有關。例如,如果您使用不具有相同屬性的字段連接兩個表,那麼數據庫可能必須在派生臨時字段後創建一個特殊的即時索引。例如,數字(8,0)與小數(11,3)不同。即使您可以將它們結合在一起,通常也會創建一個臨時索引。當然,這是一個煩惱。我經常使用的修復方法是在連接語句中投射我的字段,以便我始終使用正確的屬性一起加入字段。以下是一個示例:
LEFT JOIN DBRQRQH ON DBRQH_COMPANY = DBWHS_COMPANY AND DBRQH_REQ_NUMBER = CAST(DBWHS_DOC_NBR AS NUMERIC(7,0))
對於您的WHERE子句,有時 - 雖然不是那麼經常 - 同樣有效。如果投射連接不起作用,請嘗試按照您的選擇標準使用CAST。
這是查詢性能優化的另一個提示。在通過ODBC連接並執行查詢之前,在具有斷點的調試會話中啓動C#程序。然後使用WRKACTJOB JOB(QZDASOINIT)在AS/400(iSeries)上找到您的ODBC作業。尋找有你的用戶資料的工作。或者至少連接時使用的用戶配置文件。當你發現工作,把它在調試模式下與這兩個命令(從綠屏):
STRSRVJOB JOB(258094/QUSER/QZDASOINIT)
(注:作業數量將根據你找到ODBC工作變動)。
STRDBG UPDPROD(*YES)
然後再從C#程序查詢並檢查在AS/400上的選擇QZDASOINIT作業的作業日誌。當SQL運行在處於調試模式的作業中時,可以在作業日誌中獲得各種有用的東西。完成後,請記住運行ENDDBG,然後運行ENDSRVJOB。
首先,一些術語。 AS/400是一臺非常非常非常舊的機器。現在一些人堅持要求後繼型號的AS/400出於習慣。搜索網頁時,這可能會對您有用。 IBM在AS/400之後製造了幾代中型機器。試試iSeries,System i和IBM i。
這些中端機器上的數據庫是DB2的一個變體,因此與其他數據庫相似。正確的索引通常是數據庫性能問題的第一個解決方案。不要只看WHERE子句;考慮任何JOIN ON和ORDER BY。
IBM有一個叫做客戶端訪問(iSeries Access,IBM i Access)的軟件,它有一個名爲Navigator的免費組件。 Navigator有一個很好的叫做Visual Explain的DB工具。讓中端管理員在PC上安裝Navigator。
IBM公佈了數據庫調優幾個紅皮書,這可能有助於:
您可能還需要考慮MIDRANGE-L郵件列表上發佈您的問題。
那裏有很多DB2專家。
這通常是有人推薦升級到更新的DBMS的地步;-) – NickHeidke