Oracle ——概述 Oracle 5 步调优方法论
http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/OPS3/Default.aspx
?
對 Oracle 調優應該采取積極的態度。如果等到用戶開始抱怨性能,才調優通常以為時已晚,即便是最有效的調優策略。性能問題確定和處理的時間越晚,那么解決問題的時間和資源成本就越多。當出現不可預見的性能問題時,DBA 的責任是盡早查明原因,并盡快糾正問題,越快越好。
在你開始任何調優前,需要建立一套與調優直接有關的量化目標。調優時,時刻記住你的目標。你的優化目標應該是具體的,可量化的,而不是泛泛的。
調優 Oracle 前,確保操作系統正執行在高峰期。用操作系統管理員身份,利用操作系統監控工具,檢查非 Oracle 應用程序對分頁和交換資源的競爭。操作系統可能需要把信息從一個存儲區域移動到另一個,以容納不適合在實際內存中的更大信息。這個過程稱為分頁(paging)和交換(swapping)。過度的分頁和交換會降低性能。
最好的調優方法是一個結構化的方法。確保操作系統處于高峰期,并有足夠的操作系統資源分配給Oracle 系統,接下來你可以按如下順序調優:
- 應用程序負載
- 調優競爭
- 最小化物理 IO
- 優化物理 IO
- 最佳實踐
?
優化應用程序負載
開發者在用有效的 SQL 語句編寫應用程序中扮演重要角色。他們應該利用指示、索引,以及必要時為獲得較好性能而綁定變量。不要低估應用程序調優的重要性。千萬不要低估應用程序調優的重要性。將近 80% 的性能獲得都是通過應用程序調優。
應用程序開發者應對 Oracle SQL 處理有一個深刻的理解。包括:
- DML(數據操縱語言)
- DDL(數據定義語言)
- 事務控制
- 共享 SQL 和 PL/SQL 區
- 優化器模式
- 并行查詢
對開發者來說,重要的是盡可能使用 PL/SQL,因為 PL/SQL包以已解析的格式存儲。如果需要,包可以被存儲在共享池以提高性能。
數據庫設計和應用程序設計可能不是 DBA 的工作。但是,你應該知道適當的最初設計的重要性,如果必要的話,能夠指導設計者和開發者來實現這個目標。強烈推薦,所有涉及開發和維護 Oracle 的人員要有適當培訓,讓他們了解應用系統使用的 Oracle 版本。要注意的是,你可以有一個現成的很好的調優實例。該實例可能是因為不好的數據庫設計,或應用程序內編寫的 SQL 性能很差,所造成的整體運行很差。
?
調優競爭
當兩個進程都需要某個資源時,一個進程需要另一個使用完后才能使用,就會發生競爭。這會導致進程等待 Oracle 系統的資源,影響性能。
閂鎖競爭發生在 SGA 中的庫高速緩存、緩沖區高速緩存和日志緩沖區。回滾段的競爭也會導致系統性能變差。回滾段用于存儲事務和回滾、讀取一致性以及恢復的撤銷信息。當事務經歷等待回滾段時,就會發生競爭。必須確保你有足夠的回滾段數量和正確的段大小。
?
最小化物理 IO
一旦你有了一個設計良好的模型和已正確調優的應用程序,DBA 主要的調優責任才真正開始。內存結構的正確大小可以讓足夠的信息存儲在內存。由于內存訪問比磁盤訪問更快,與從磁盤相比,它總是能更好地滿足在內存中的信息請求。調優內存分配包括把內存正確地分布給每個 Oracle 內存區域,同時,確保在操作系統級別不會發生分頁和交換。
系統全局區(system global area,SGA)是保存關于最常用的請求數據庫信息的內存區域。當數據庫啟動時,分配 SGA,并在后臺啟動。SGA 和后臺進程一起被稱為實例。SGA 分為三個存儲組件:
- 緩沖區高速緩存(Buffer cache)
- 共享池(Shared pool)
- 重做日志緩沖區(Redo log buffers)
緩沖區高速緩存是 SGA 的區域,其存儲從數據庫段讀取的數據塊的副本。這些數據塊包括表、聚簇、回滾段和索引。每個緩沖區擁有一個單獨的 Oracle 數據塊。緩沖區高速緩存的大小,以字節為單位,由數據庫初始化文件參數 DB_BLOCK_BUFFERS 乘以 DB_BLOCK_SIZE 來確定。一旦數據庫被創建,緩沖區高速緩存的大小只能通過 DB_BLOCK_BUFFERS 來改變;而 DB_BLOCK_SIZE 參數自創建數據庫后就不能被改變。當設置正確的數據庫緩沖區高速緩存的大小,通過從內存請求數據塊,而不是從磁盤,性能就可以被優化。
共享池也是SGA 的一個區域,它包含兩個主要的存儲區:庫高速緩存和字典高速緩存。庫高速緩存由共享和私有的 SQL 區域、PL/SQL 包和存儲過程,以及控制結構。當庫高速緩存沒有足夠的內存時,不會再有可用的空間來緩存新的語句,直到舊的語句被刪除,騰出空間。任何被刪除,不再需要的語句都將被重新解析。庫高速緩存報告中對于重新裝載和無效列值的大數值顯示了過多的重新解析。重新解析的存儲過程會要求 CPU 和 IO 資源。為了避免在庫高速緩存中卸載并重新加載大對象,應確保 SHARED_POOL_SIZE 值足夠大,并且保證,當函數、存儲過程和包加載到數據庫時,盡可能無需再解析。
字典高速緩存存儲數據庫的信息,它們結構和使用者。字典高速緩存中的信息包括段名、用戶、權限和擴展位置。在大多數操作放到 Oracle 數據庫之前,必須讀取數據字典表,并被存儲在數據字典緩存區。無論是緩沖區高速緩存,還是庫高速緩存,字典高速緩存的效率由命中率來決定。字典高速緩存的大小間接與數據庫初始化文件參數 SHARED_POOL_SIZE 有關。
如果你正運行在一個多線程服務器(multithreaded server,MTS)環境中,用戶會話信息,如私有 SQL 和排序區域,被存儲在共享池中,而不是用戶進程的內存。如果你使用一個 MTS,你可能需要讓你的共享池大點,以容納額外的由把排序信息移動到用戶全局區(user global area,UGA)引起的內存需求。共享池的大小由數據庫初始化文件參數 SHARED_POOL_SIZE 來確定。庫高速緩存和字典高速緩存的大小受共享池的大小限制。
重做日志緩沖區是 SGA 的一個區域,用來記錄對數據庫所做的所有更改。信息被定期從重做日志緩存寫道聯機重做日志文件,這樣,如果需要恢復,就可以應用。重做日志緩存區的大小,以字節計算,是由數據庫初始化文件參數 LOG_BUFFER 指定。
?
優化物理 IO
若在你的系統上獲得最大的性能,通過把 Oracle 數據庫文件分散到多個設備,均勻地把 IO 分布開。當多個進程試圖同時訪問同一個磁盤時,就會發生磁盤競爭。當達到訪問磁盤的最大數量時,其他進程就得等待。
在 SYSTEM 表空間上過多的 I/O 可能表明共享池太小,從而導致對數據字典過多的物理讀寫,而數據字典位于 SYSTEM 表空間。
在 SYSTEM 表空間上另一個嚴重的 I/O 可能原因是,沒有指定用戶默認的表空間。確保數據段不要寫到 SYSTEM 表空間。如果創建一個用戶,沒有默認分配默認表空間,那么用戶默認的表空間是 SYSTEM。總是分配一個非 SYSTEM 默認表空間給用戶。
如果排序段寫到了 SYSTEM 表空間,那么會導致過多的 I/O。如果創建一個用戶,而沒有分配臨時表空間,那么用戶將在 SYSTEM 表空間執行所有的排序。總是分配一個非 SYSTEM 表空間的臨時表空間給用戶。
?
最佳實踐
最佳實踐是一個被普遍接受的指南。它們經過了時間的考驗。最佳實踐并沒有具體的設置。
下面是一些最佳實踐,它們的好處包括:
- 整個企業的一致環境。提供不同技術組的技術共識,并消除完成方法的競爭。
- 使用已證明的,經過時間驗證的重現性好,成功的結果,嘗試過的最佳實踐。
- 容易診斷問題。如果一個給定的系統并不是以標準方式安裝,這通常將會很快顯現出來。
- 降低管理系統的整體成本。
轉載于:https://www.cnblogs.com/liuning8023/archive/2012/09/08/2676991.html
總結
以上是生活随笔為你收集整理的Oracle ——概述 Oracle 5 步调优方法论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF控件和布局
- 下一篇: NEXUS S安卓4.0/4.1 【完美