程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> 對Oracle數據庫性能優化一點總結

對Oracle數據庫性能優化一點總結

編輯:關於Oracle數據庫

  要提高應用系統的性能,在維持現有硬件平台不變的情況下,主要采用的方法由以下幾種:

  l 調整操作系統參數,提高操作系統的管理性能;

  l 調整數據庫管理系統的參數,提高數據庫管理系統的性能;

  l 修改應用程序,提高應用程序的運行效率。

  一、ORACLE數據庫的內存結構

  本文將著重對SGA的結構進行介紹:

  SGA 通常又被稱作 Shared Global Area,包括以下幾個共享區域:

  l 數據緩存(the Database buffer cache)

  數據緩存存放從數據庫文件中讀取的數據,可分為剩余緩存(Free buffer)、正在使用的緩存(Pinned buffer)、已使用緩存(Dirty buffer)。

  l 日志緩存(redo log buffer)

  存放數據庫已改變的信息。

  l 共享存儲池(shared pool)

  共享存儲池主要由三個方面構成:

Library cache

  Library cache 包括共享SQL區、用戶自有SQL區、PL/SQL過程和程序包及控制結構;

Dictionary Cache

  存放數據庫字典信息,如:表及視圖名、列名及數據類型、各用戶的存取權限;

Control structures   

  l 請求及響應隊列(request and response queues)(僅用於多線索模式)

  l 其他(other miscellaneous information)

  二、ORACLE 內存的工作機制

  當用戶請求被接受後,ORACLE 的內存分配將分以下幾個步驟進行:

  1.首先檢查共享SQL區有無該SQL語句,如有在使用該SQL區執行用戶的SQL語句(稱作一次library cache hit),否則為該SQL語句分配共享SQL 區(稱作一次library cache miss),同時為該語句分配自有SQL 區。

  2.檢查Dictionary cache 中有無要訪問的表/視圖信息,若無則將其讀入Dictionary cache 中(稱作一次rowcache miss)。

  3.檢查數據緩存(Database buffer cache),有無要操作的數據,如有則使用當前的緩存(稱作一次 data buffer hit),否則,將按下列步驟為該數據請求新的緩存(稱作一次 data buffer miss):

  1) 搜索least-recently-used(LRU) list,若發現dirty buffer 則寫入dirty list 並繼續搜索,如發現free buffer則將其分配給該用戶,同時將該buffer移至most-recently-used(MRU) list,若未能搜索到free buffer,則觸發DBWR進程將一些dirty buffer 寫入磁盤,並將這部分dirty buffer 釋放為free buffer。

  2) 從數據文件中將要操作的數據讀入buffer cache 中;

  4.如果用戶執行的是INSERT、DELETE、UPDATE等操作,系統將為其分配redo log buffer,用於記錄數據的變更情況,當redo log buffer中無free buffer時觸發LGWR進程,將redo log buffer中的一些信息寫如數據庫的LOG FILE 中。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved