通過分析SQL語句的執行計劃優化SQL (一)
作者: 不詳 來源: ChinaITlab http://www.csai.cn 2006年03月07日
第1章 性能調整綜述
Oracle數據庫是高度可調的數據庫產品。本章描述調整的過程和那些人員應與Oracle服務器的調整有關,以及與調整相關聯的操作系統硬件和軟件。本章包括以下方面:
*誰來調整系統?
*什麼時候調整?
*建立有效調整的目標
*在設計和開發時的調整
*調整產品系統
*監控產品系統
誰來調整系統:
為了有效地調整系統,若干類人員必須交換信息並牽涉到系統調整中,例如:
* 應用設計人員必須傳達應用系統的設計,使得每個人都清楚應用中的數據流動.
* 應用開發人員必須傳達他們選擇的實現策略,使得語句調整的過程中能快速、容易地識別有問題的應用模塊和可疑的SQl語句.
* 數據庫管理人員必須仔細地監控系統活動並提供它們的資料,使得異常的系統性能可被快速得識別和糾正.
* 硬件/軟件管理人員必須傳達系統的硬件、軟件配置並提供它們的資料,使得相關人員能有效地設計和管理系統。
簡而言之,與系統涉及的每個人都在調整過程中起某些作用,當上面提及的那些人員傳達了系統的特性並提供了它們的資料,調整就能相
對的容易和更快一些。
不幸的是,事實上的結果是:數據庫管理員對調整負有全部或主要的責任。但是,數據庫管理員很少有合適的系統方面的資料,而且,在
很多情況下,數據庫管理員往往是在實施階段才介入數據庫,這就給調整工作帶來許多負面的影響,因為在設計階段的缺陷是不能通過DBA的調
整而得以解決,而設計階段的缺陷往往對數據庫性能造成極大的影響。
其實,在真正成熟的開發環境下,開發人員作為純代碼編寫人員時,對性能的影響最小,此時大部分的工作應由應用設計人員完成,而且
數據庫管理員往往在前期的需求管理階段就介入,為設計人員提供必要的技術支持。調整並不是數據庫管理員的專利,相反大部分應該是設計
人員和開發人員的工作,這就需要設計人員和開發人員具體必要的數據庫知識,這樣才能組成一個高效的團隊,然而事實上往往並非如此。
什麼時候作調整?
多數人認為當用戶感覺性能差時才進行調整,這對調整過程中使用某些最有效的調整策略來說往往是太遲了。此時,如果你不願意重新設
計應用的話,你只能通過重新分配內存(調整SGA)和調整I/O的辦法或多或少地提高性能。Oracle提供了許多特性,這些特性只有應用到正確地
設計的系統中時才能夠很大地提高性能。
應用設計人員需要在設計階段設置應用的性能期望值。然後在設計和開發期間,應用設計人員應考慮哪些Oracle 特性可以對系統有好處,
並使用這些特性。通過良好的系統設計,你就可以在應用的生命周期中消除性能調整的代價和挫折。當然,即使在設計很好的系統中,也可能
有性能降低。但這些性能降低應該是可控的和可以預見的。
調整目標
不管你正在設計或維護系統,你應該建立專門的性能目標,它使你知道何時要作調整。如果你試圖胡亂地改動初始化參數或SQl語句,你可
能會浪費調整系統的時間,而且無什麼大的收益。調整你的系統的最有效方法如下:
* 當設計系統時考慮性能
* 調整操作系統的硬件和軟件
* 識別性能瓶頸
* 確定問題的原因
* 采取糾正的動作
當你設計系統時,制定專門的目標;例如,響應時間小於3秒。當應用不能滿足此目標時,識別造成變慢的瓶頸(例如,I/O競爭),確定
原因,采取糾正動作。在開發期間,你應測試應用研究,確定在采取應用之前是否滿足設計的性能目標。
當你正在維護生產庫系統時,有多種快速有效的方法來識別性能瓶頸。不管怎樣,調整通常是一系列開銷。一旦你已確定了瓶頸,你可能
要犧牲一些其它方面的指標來達到所要的結果。例如,如果I/O有問題,你可能需要更多內存或磁盤。如果不可能買,你可能要限制系統的並發
性,來獲取所需的性能。然而,如果你已經明確地定義了性能的目標,那用什麼來交換高性能的決策就變的很容易的,因為你已經確定了哪些
方面是最重要的,如過我的目標為高性能,可能犧牲一些空間資源。