oracle資料庫調優描述

huaze發表於2022-03-23

資料庫調優方面主要包括了記憶體調優、I/O的調優、作業系統資源的管理和效能檢視相關調優幾個方面。


記憶體方面,主要關注的是cache。使系統執行塊,最通用的方法就是將用過的資料快取起來,包括sql、pl/sq、資料塊、編譯過的可直接執行的語句等。

oracle的記憶體主要是SGA和PGA兩部分,SGA的內容主要有:

shared pool包括了library cache和data dictionary cache
  library cache 主要快取的是sql和pl/sql的可執行形式
  data dictionary cache主要快取的是資料字典資訊
buffer cache主要快取的是查詢所需要的資料塊
large pool主要作用是處理大規模的資訊,比如做recovery manager、備份、並行語句執行、多伺服器共享等
java pool主要快取java相關類
log buffer 主要快取對資料塊的修改

以上記憶體結構都屬於SGA基本內容,即系統全域性區的元件。記憶體調優就是對這幾個部分進行大小和設定的調整。
11g中已經實現了自動記憶體管理,一般情況下,只需要告訴oracle有多少可用記憶體即可,其他的工作由oracle來完成。
手工記憶體管理模式下,才可以對各個記憶體池進行調整。

因此對於記憶體,主要是瞭解各個池的含義和作用,以及怎樣判斷其配置不合理。通常來說,進行效能診斷時ADDM報告也會給出比較合理的解決方案。但是其中給出的可能是將哪個引數增加或減少,減少到多少還是由dba的經驗判斷的。

buffer cache、shared pool分別是將以前用過的資料、語句(sql、pl/sql)存起來,當再次使用時避免物理讀增加響應時間。因此,對於一般的OLTP系統來說,池的命中率高證明快取得到了使用,硬解析少,系統效能可能更好。但也有例外。例項剛啟動等特殊情況下命中率低是正常的,會逐漸提高。

buffer cache儲存的是資料,由於記憶體優先,LRU演算法不能也無法將使用頻率很高的資料一直在記憶體中而不被aged out。透過細分,將希望保留時間長的資料放入keep池,將比希望保留在記憶體中的(太大或不經常用的)放入recycle池,(一般資料在default池),可以進一步地提高固定記憶體量的有效性。有效使用buffer cache,也就是使頻繁執行的語句避免不必要的資源消耗。

shared pool中除了library cache和data dictionary cache,選配server result cache。
由於共享伺服器、並行查詢、recover manager需要花費的記憶體量比較大,所以才建議分到large pool中。
reserve pool是預留區域,只有當記憶體不夠用時才啟用。
為保證共享池的高效,經常執行的語句可以考慮使用共享遊標,減少在多個使用者間同義詞的呼叫,用pl/sql進行日誌的查詢等工作(減少可能的硬解析、網路負擔等),快取序列值等。

伺服器程式會將buffer cache中資料塊的修改寫入到redo log buffer,再有redo log buffer透過LGWR寫入到線上重做日誌檔案中。


SGA是系統全域性區,對應地,每個使用者都有其獨有的PGA。儲存使用者獨有的資料和控制資訊。預設的大小是SGA的20%,可以透過pga_aggregate_target等引數調整。主要取決於系統功能以及使用者數量。oracle提供了很多動態檢視來監測PGA的記憶體使用,瞭解這些檢視,主要是方便發生問題時判斷是哪個使用者、會話的問題。

result caches即結果或結果對應原表的快取。server result cache是SGA的一部分,client result caches存在於client process上。兩者無依賴關係,用法比較簡單,需要注意其限制因素。通常來說,也不會有太多應用。

 

從i/o方面講,首要的任務就是合理、充分地利用磁碟資源,使i/o效率得到充分使用,並有一定的前瞻性。
出於安全性考慮,很多生產系統使用RAID技術;rac環境下還需要注意節點間的i/o。

oracle推薦使用oracle自動儲存管理(ASM)。優點在於條帶化、映象、線上儲存配置和動態平衡、檔案建立刪除的管理。

LVM邏輯卷管理工具及硬體條帶化有助於實現i/o平衡,如果沒有這些設定,就應該根據每個檔案的i/o要求來進行磁碟分配了。

“將表和其對應的索引分開存放可以減少i/o的說法”是沒有根據的;重做日誌檔案最好放在單獨的磁碟上,處於i/o考慮,還應避免在重做日誌檔案所在磁碟上使用RAID5技術;歸檔日誌應該放在不同的磁碟。


如果使用oracle檔案管理系統(OMF),建立檔案時不需要指定位置,提高了管理效率並自動實現i/o的最佳化。

在選擇資料塊的大小方面,應該根據系統的特點。主要是查詢資料的數量和是否有序兩個因素。通常決策支援系統使用大資料塊,而oltp系統使用預設或小資料塊。

儲存過程dbms_resorece_manager.calibrate_io可用於i/o校準。
而無需按照oracle,也可以使用orion工具評估磁碟的i/o效能。

 

作業系統的資源方面,問題分為程式管理、記憶體管理以及排程三方面。通常來說,作業系統的調優相對應用和資料庫調優作用不是很明顯。
由於併發事務間有優先順序別的問題,可以為不同的資源組分配資源。作業系統資源的最佳化,主要就是使優先順序高的會話得到更多資源,並較快完成,而優先順序低的可以佔用較少的並行甚至等待。
使用快取技術和允許非同步i/o,能提高i/o效率。

使用作業系統的資源管理方法可以解決很多問題,而oracle資源管理器可以作為一個補充。作業系統資源管理不同於域管理等方式,資源並不是分配給某個會話後,其他會話不能用,而是相對共享的。
影響資源分配的主要是分頁或交換分割槽、大量系統呼叫、大量程式。


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

相關文章