搜尋此網誌

星期四, 6月 09, 2011

資料庫調效經驗

今天的環境是:

Solaris 8 and Oracle 9.2.0.6 export / import to Linux 4 and Oracle 9.2.0.6

為一異質平台的轉換。

由於Oracle 9i 尚未支援Transportable Tablespace,因此只能依賴傳統的export / import。

問題反應:

1、某些資料查詢過於緩慢,較舊系統緩慢約3~4倍時間。

2、大量Procedure & Function 無法使用

分析過程:

1、利用Toad 的Monitor session的功能,在監控查詢時卡住的程序,並判斷是否有使到到Index

2、若有使用到Index的查詢時,系能仍緩慢,則開啟Trace來監控。

3、檢視procedure & Function 的Error messages

分析結果:

1、由於tables & indexes 沒有統計值,因此造成大量的Full Table Scan. 重新analyze 後,即完成。

2、有用到Index的查詢仍舊緩慢,經檢查後,發現使用到錯誤的indexes。 重新將table與index同時analyze後就恢復正常。

3、由於客戶有自行定義Function, 而這function又建立在其它的schema中,再加上原先有的public synonyms並未一併匯入進去(這點很怪),因此在重新建立 Synonyms後即完成任務。

另外的問題:

1、客戶某個table中,日期的存放格式為Month Varchar2(5), 以10005代表100年5月。在某支查詢中,會出現1722的錯誤 invalid number。

查看sql語法為to_number(month)>= :argument_1。因此去查詢table中的資料,發現有一筆的資料內容並非是數字,

因此造成字元轉換的錯誤。但…怪異的事,相同的語法在舊系統上仍可以查詢出來,真是怪哉呀。

最後把資料刪除後,程式即運作正常。

2、exp / imp 一般而言會有統計值,除非你在import 或 export 過程中,指定不匯出/ 匯入統計值,才會發生今天的問題。

3、Trace 檔沒用到,就解決了上述問題,下次再試試吧。

沒有留言: