解析Oracle 8i/9i的計劃穩定性(3)

jss001發表於2009-02-10
Oracle 9的加強

在使用儲存概要時,還有許多其它的細節需要考慮,在Oracle8中,對於它們能夠做什麼以及如何工作是有一些不便的限制的,不過其中許多的問題已經在Oracle 9中消除了。

存 儲概要在Oracle8中使用的最大不足是它只可以在儲存的文字和將要執行的文字要完全一樣才可以使用。在Oracle 9中,有一個"標準化"的處理可以消除這個匹配的限制;在對比前,文字將會被轉換為大寫並且被除去空格。這樣就提升了不同的SQL可以使用同一個儲存概要 的機會。

呼叫多個儲存塊的複雜執行計劃中還有一些問題。Oracle公司透過在Oracle 9中推出了一個在outln模式中的ol$nodes表來解決。這樣就可以幫助Oracle減少ol$hints中的hints列表,並且可以在即將執行 SQL的子區中正確地交叉應用它們。不過,由儲存概要之間交換hints的策略有一個副作用,因為ol$hints表還需要不同細節的文字長度和偏移。升 級到Oracle9時,將需要選用一些方法來管理儲存概要,例如帶有特別資料集合或者丟失索引的第二個模式,或者是帶有內建的hints的儲存檢視來替換 文字中命名的表格。

Oracle9的另一個特色是在管理儲存概要時有更多的支援,包括初次推出了一個包來讓你直接編輯儲存概要。更重要的 是,還有一個選項可讓你更安全地管理生產系統上的計劃。雖然沒人喜歡在生產環境上做實驗,不過在有些時候,只有生產系統才有正確的資料分佈和卷,以讓你決 定某個SQL的最優執行路徑。在Oracle9中,你可以建立一個outln表的私人複製,並且將"public"的概要釋放進去以作"私人的"實驗,這 樣你就不用冒你的私人儲存概要被終端使用者的程式碼看到的危險。我個人認為這是一個最後的手段,不過我可以想象到有時它是必須的。更安全的是,如果你有一個 full-scale UAT或者開發系統,可以使用這個特性自由地測試。

告誡

這篇文章給你足夠的資訊作儲存概要的實驗;不過在應用該技術到一個生產系統上時,還有一些地方是你必須意識到的。

首先,在Oracle8i中,outln(這是擁有儲存概要的那些表格所在的模式)有一個預設的密碼,該帳號有一個非常危險的許可權。你必須修改這個帳號的密碼。在Oracle9i中,你將會發現這個帳號已經被鎖定。

第 二,保持儲存概要的表格在system表空間中建立。在一個生產系統中,當你開始建立儲存概要時,你將會發現會使用system表空間中的很多空間。因此 最好將這些表格移走,最好是放到它們自己的表空間中。不幸的是,其中的一個表格含有long列,因此你將可能需要使用exp/imp將這些表格移動到一個 新的表空間中。

第三,雖然儲存概要對於解決嚴重的效能問題是很有用的,不過它也有一個開銷。如果啟用了儲存概要,那麼Oracle在分析 每個新的語句時都會檢查是否存在一個相關的儲存概要。如果大量的語句都沒有儲存概要,那麼你就需要平衡一下這個開銷與你在很少擁有儲存概要語句上得到的性 能提升,看是否值得這樣處理。不過,這個問題只會在一個有著更嚴重效能問題的系統上出現。

結論

儲存概要有著巨大的好處。當你不能修改原始碼或者索引策略時,儲存概要是令第三方的應用執行得更有效率的唯一方法。

更進一步,如果你還需要面對將一個系統由基於規則切換到開銷優先的問題,那麼儲存概要將是你最有效率和無風險的選擇。

如果你需要發揮儲存概要的最大好處,那麼Oracle9有一些加強可讓它覆蓋更多類的SQL,減少開銷,並可讓你更靈活地測試、管理和安裝儲存概要。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章