Oracle 11g 伺服器結構

来源:https://www.cnblogs.com/niujifei/archive/2019/06/20/10954008.html
-Advertisement-
Play Games

Oracle 伺服器主要又實例、資料庫、程式全局區和前臺進程組成。 實例可以進一步劃分為系統全局區(SGA)和後臺進程(PMON、SMON等)兩部分,其中,SGA 使用操作系統的記憶體資源,而後臺進程需要使用 CPU 與記憶體資源。資料庫(Database)中包含數據文件(Data files)、控制文 ...


  Oracle 伺服器主要又實例、資料庫、程式全局區和前臺進程組成。

  實例可以進一步劃分為系統全局區(SGA)和後臺進程(PMON、SMON等)兩部分,其中,SGA 使用操作系統的記憶體資源,而後臺進程需要使用 CPU 與記憶體資源。資料庫(Database)中包含數據文件(Data files)、控制文件(Control files)和重做日誌文件(Redo log file),資料庫文件存放在硬碟中。程式全局區(PGA)是一個非共用的記憶體區域,用於管理用戶進程的私有資源。前臺進程可以再劃分為用戶進程和伺服器進程,它們需要使用 cpu 與記憶體資源。

一、系統全局區(SGA)

  系統全局區(System Global Area)是所有用戶進程共用的一塊記憶體區域,也就是說,SGA 中的數據資源可以被多個用戶進程共同使用。SGA 主要由高速數據緩衝區、共用池、重做日誌緩衝區、Java池和大型池等記憶體結構組成。SGA 隨著資料庫實例的啟動而載入到記憶體中,當資料庫實例關閉時,SGA區域也就消失了。

  1、高速數據緩衝區(Database buffer cache)

  高速數據緩衝區中存放著 Oracle 系統最近訪問過的數據塊(數據塊在高速緩衝區中也可稱為緩存塊)。當用戶向資料庫發出請求時,如果在高速數據緩衝區中存在請求的數據則 Oracle 系統會直接從高速緩衝區中讀取數據並返回給用戶,否則,Oracle 系統會打開數據文件讀取請求的數據。

  若無法在高速數據緩衝區中找到所需要的數據,則Oracle 首先從數據文件中讀取指定的數據塊到緩衝區,然後再從緩衝區將請求的數據返回給用戶。由於高速數據緩衝區被所有用戶共用,只要數據文件中的某些數據塊被當前或其他用戶請求過,那麼這些數據塊就會被裝載到高速數據緩衝區中。這樣當任何用於再次訪問相同的數據時, Oracle 就不必再從數據文件中讀取數據,而是可以直接將緩衝區中的數據返回給用戶。經常或最近被訪問的數據塊會被放置到高速數據緩衝區前端,不常被訪問的數據塊會被放置到高速數據緩衝區的後端,當高速緩衝區填滿時,會自動擠掉一些不常被訪問的數據塊。

  以存取速度來看,記憶體的讀取速度遠快於物理硬碟,所以高速數據緩衝區的存在可大大降低對物理磁碟的讀取頻率,從而達到提高資料庫伺服器性能的目的。為了便於管理SGA 的記憶體數據, Oracle 把高速數據緩衝區劃分為以下3個部分:

  (1)臟數據區:臟數據區中存放著已被修改過的數據,這些數據等待被寫入到數據文件中。當一條更新或刪除語句對某些資料庫中的數據修改後,那麼這些數據塊就被標記為 ”臟“,然後等待提交命令並通過後臺進程 DBWR 將其寫入到數據文件中。

  (2)空閑區:空閑區中的數據塊不包含任何數據,這些數據塊可以被寫入數據,Oracle 可以從數據文件中讀取數據塊,並將其存放到該區中。

  (3)保留區:保留區包含那些正在被用戶訪問的數據塊和明確保留以作為將來使用的數據塊(即緩存塊),這些數據塊將被保留在緩衝區中。

  2、重做日誌緩衝區(Red log buffer cache)

  重做日誌緩衝區用於存放資料庫進行修改操作時所產生的日誌信息,這些日誌信息在寫入到重做日誌文件之前,首先存放重做日誌緩衝區中,然後,在檢查點發生或重做日誌緩衝區中的信息量達到一定峰值時,最後由日誌寫入進程(LGWR)將此緩衝區的內容寫入到重做日誌文件。

  重做日誌緩衝區的大小由 LOG_Buffer 參數指定,該參數也可以在實例啟動後動態修改。相對於高速數據緩衝區而言,重做日誌緩衝區的大小對資料庫性能的影響較小,通常較大的重做日誌緩衝區能減少重做日誌文件的對 I/O 的讀寫次數,對資料庫的整體性能有一定的提高。

  3、共用池(Shared pool)

  共用池是 SGA 保留的記憶體區域,用於緩存 SQL 語句、PL/SQL語句、數據字典、資源鎖、字元集以及其他控制結構等。共用池包含高速緩衝區(Library cache )和字典高速緩衝區(Dictionary cache)。

  (1)庫高速緩衝區時共用池的一部分,主要包括共用 SQL區和私有 SQL區兩個組成部分。庫高速緩衝區中存放最近用過的 SQL 語句、PL/SQL 語句的文本和執行計劃。當下一次執行相同的 SQL 語句或 PL/SQL 語句時,可以直接在庫高速緩衝區中找到之前已經生成的執行計劃,而不需要再次解析相同的 SQL 語句或  PL/SQL 語句,從而提高系統執行效率。

  每條被緩存的SQL 或 PL/SQL 語句都被分成兩個部分,分別被存放在共用 SQL 區和私有 SQL 區中。共用 SQL區存放 SQL或 PL/SQL 語句的語法分析結果和執行計劃,如果以後要再次執行類似的語句,則可以利用共用 SQL 區中已緩存的語法分析結果和執行計劃。私有 SQL 區存放SQL 語句中的綁定變數、環境和會話等信息,這些信息屬於執行該語句的用戶的私有信息,其他用戶則無法共用這些信息。

  (2)字典高速緩衝區用於存放 Oracle 系統內部管理所需要的數據字典信息,例如用戶名、數據對象和許可權等。

  共用池的記憶體空間大小是可以動態改變的,一般通過修改參數 SHARED_POOL_SIZE 的值來實現。

  4、大型池(Large pool)

  大型池在 SGA 區中不是必須的記憶體結構,只在某些特殊情況下,實例需要使用大型池來減輕共用池的訪問壓力,常用的情況有以下幾種:

  •   當使用回覆管理器進行備份和回覆操作時,大型池將作為 I/O 緩衝區作用。
  •   使用 I/O  Slave 模擬非同步 I/O 功能時,大型池將被當作 I/O 緩衝區使用。
  •        執行具有大量排序操作的 SQL 語句。
  •        當使用並行查詢時,大型池作為並行查詢進程彼此交換信息的地方。

  大型池的緩存區大小是通過 Large_pool_size參數定義的,在 Oracle 11g中,用戶可以使用 alter system  命令動態地修改其緩衝區的大小。

  5、Java池

  用來提供記憶體空間給 Java 虛擬機使用,目的是支持在資料庫中運行 Java 程式包,其大小由 Java_Pool_size 參數決定

  6、流池

  Oracle 流池用於在資料庫與資料庫之間進行信息共用。如果沒有用到 Oracle 流,就不需要設置該池。流池的大小由參數 STREAMS_Pool_size 決定。

二、程式全局區(PGA)

  程式全局區(Program Global Area)也可稱做用戶進程全局區,它的記憶體在進程私有區而不是共用區。雖然 PGA 是一個全局區,可以把代碼,全局變數和數據結構都可以存放在其中,但區域內的資源並不像 SGA 一樣被所有的用戶進程所共用,而是每個 Oracle 伺服器進程都只擁有屬於自己的那部分 PGA資源。

  在程式全局區(PGA)中,一個服務進程只能訪問屬於它自己的那部分 PGA 資源區,各個服務進程的 PGA 區總和即為實例 PGA區的大小。通常 PGA 區由私有 SQL 區和會話區組成。

  1、私有 SQL區

  私有 SQL 區用於存儲變數以及 SQL 語句運行時的記憶體結構信息,當每個用戶連接到實例時,都會在實例中創建一個會話。這些會話可能會在 SGA 區中創建一個共用 SQL區,但在 PGA 區中可能會創建多個私有 SQL 區。把一個私有 SQL 區與對應的共用 SQL 區合併在一起,就可以獲得一條 SQL語句的完整緩存數據。

  每個會話的私有 SQL 區可以再分為靜態區和動態區兩部分。靜態區的信息在會話過程中保持不變,只有當會話結束時,靜態區才會被釋放掉;而動態區的信息在整個會話過程中是不斷變化的,一旦 SQL 語句指定完畢,即使會話還沒有結束,動態區也被釋放掉。

  2、會話區

  會話區用於存放用戶的會話信息(如登錄用戶名)。如果資料庫處於共用伺服器連接模式下,則會話區將位於 SGA 區域,而不是 PGA 中。

  查看程式全局區(PGA)的信息可以通過顯示 pga 參數的內容來實現。

三、前臺進程

  前臺進程包括用戶進程和服務進程,它不屬於實例的一部分,但是用戶在不知不覺中經常會用到它,使用前臺進程能夠實現用戶與實例的溝通。

  1、用戶進程

  用戶進程是指那些能夠產生或執行 SQL 語句的應用程式,無論是 SQL*Plus,還是其他應用程式,只要是能生成或執行 SQL 語句,都被稱作用戶進程。

  在用戶進程中有兩個非常重要的概念:連接和會話。連接是一個用戶進程與實例之間建立的通信渠道,這個渠道可以通過操作系統上的相關通信機制或網路連接來實現。會話是指用戶進程與實例之間建立連接後形成的用戶與實例之間的交互方式,一般是用戶發出請求,資料庫實例為用戶返迴響應消息的方式。

  2、伺服器進程

  服務進程就是用於處理用戶會話過程中向資料庫實例發出 SQL 語句或 SQL*Plus 命令,它可以分為專用伺服器模式和共用伺服器模式。在專用伺服器模式下,每個用戶進程都有一個專用的伺服器進程,這個伺服器進程代表用戶進程執行 SQL 語句,必要時還可以回傳執行結果給用戶進程。在共用伺服器模式下,每個用戶進程不直接與伺服器進程連接,而是連接到分派程式,每個分派程式可以同時連接多個用戶進程。

四、後臺進程

  Oracle 後臺進程是一組運行與 Oracle 伺服器端的後臺程式,是 Oracle 實例的重要組成部分。這組後臺進程有若幹個,它們分工明確——分別完成不同的系統程式。

其中 SMON、PMON、DBWR、LGWR 和 CKRT 這5哥後臺進程必須正常啟動,否則將導致資料庫崩潰。還有很多的輔助進程,用於實現相關的輔助功能,如果這些輔助進程發生問題,只會使某些功能受到影響,一般不會到時資料庫實例崩潰。

  1、數據寫入進程(DBWR)

   數據寫入進程的主要任務是負責將記憶體中的 “臟” 數據塊回寫到數據文件中。“臟” 數據塊是指高速數據緩衝區中的被修改過的數據塊,這些數據塊的內容與數據文件內容不一致。但 DBWR 並不是隨時將所有的 “臟” 數據塊都寫入數據文件,只有滿足一定的條件時, DBWR 進程才開始成批量地將 “臟” 數據寫入數據文件, Oracle 這樣做的目的是為了儘量減少 I/O 操作,提供 Oracle 伺服器性能。通常在下麵幾種情況下,DBWR 進程將 “臟” 數據塊寫入數據文件。

  •   當用戶進程執行插入或修改操作時,需要將 “新數據” 寫入高速數據緩衝區,如果在高速數據緩衝區中沒有找到足夠大的空閑數據塊來存放這些“新數據”,這時, Oracle 系統將啟動 DBWR 進程並將 “臟” 數據塊寫入數據文件,已獲得空閑數據塊來存儲這些 “新數據”。
  •        當檢查點進程啟動後,它會強制要求 DBWR 將某些 “臟” 數據塊寫入數據文件文件中。
  •   當 “臟” 數據塊在高速數據緩衝區中存放超過3秒鐘,DBWR 進程會自行啟動並將某些 “臟”資料庫寫入到數據文件中。

  在某些比較繁忙的應用系統中,可以修改伺服器參數文件 Spfile 的 DB_writer_processes 參數,以允許使用多個 DBWR 進程。但是 DBWR 進程的數量不應當超過系統處理器的數量,否則多餘的 DBWR 不但無法發揮作用,反而會耗費系統資源。

  2、檢查點進程(CKPT)

   檢查點進程可以看做義工事件,當檢查點事件發生時, CKPT 會要求 DBWR將某些 “臟” 數據塊回寫到數據文件。當用戶進程發出數據請求時, Oracle 系統從數據文件中讀取需要的數據並存放到高速數據緩衝區,用戶對數據的操作時在緩衝區中進行的。當用戶操作數據時,就會產生大量的日誌信息並存儲在崇左日誌緩衝區,當 Oracle 系統滿足一定條件時,日誌寫入經常(LGWR)會將日誌信息寫入到崇左日誌文件組中,當發生日誌切換時(寫入操作正要從一個日誌文件組切換到另一組時),就會啟動檢查點進程。

   DBA 還可以通過修改初始化參數 spfile 中的 checkpoint_process 參數為TRUE來啟動檢查點進程。

  3、日誌寫入進程(LGWR)

   日誌寫入進程用於將重做日誌緩衝區中的數據寫入重做日誌文件。Oracle 系統首先將用戶所做的修改日誌信息寫入日誌文件,然後再將修改結果寫入數據文件。

   Oracle 實例再運行中會產生大量日誌信息,這些日誌信息首先被記錄在 SGA 的重做日誌緩衝區中,當發生提交命令、或者重做日誌緩衝區的信息滿 1/3 ,或者日誌信息存放超過3秒鐘時,LGWR 進程就將日誌信息從重做日誌緩衝區中讀出並寫入日誌文件組中序號較小的文件中,一個日誌組寫滿後接著寫另外一組。當 LGWR 進程將所有的日誌文件都寫過一遍後,它將再次轉向第一個日誌文件組重新覆蓋。當 LGWR 進程寫滿一個日誌文件組而轉向寫另外一組時,稱之為日誌切換。

  4、歸檔進程(ARCH)

   歸檔進程是一個可選擇的進程,只有當 Oracle 資料庫處於歸檔模式時,該進程才可能起到作用。若 Oracle 資料庫處於歸檔模式,當各個日誌文件組都被寫滿而即將被覆蓋之前,先由歸檔進程(ARCH)把即將被覆蓋的日誌文件中的日誌信息讀出,然後再把這些 “讀出的日誌信息” 寫入到歸檔日誌文件中。

  當系統比較繁忙而導致 LGWR 進程處於等待 ARCH 進程時,可通過修改 LOG_Archive_max_processes 參數啟動多個歸檔進程,從而提高歸檔寫磁碟的速度。

  5、系統監控進程(SMON)

   系統監控進程時在資料庫系統啟動時恢復工作的強制性進程。例如:在並行伺服器模式下,SMON 可以恢復另一個處於失敗的資料庫,使系統切換到另外一臺正常的伺服器上。

  6、進程監控進程(PMON)

   進程監控進程用於監控其他進程的狀態,當有進程啟動失敗時,PMON 會清除失敗的用戶進程,釋放用戶進程所用的資源。

  7、鎖定進程(LCKN)

   這個一個可選進程,並行伺服器模式下可以出現過個鎖定進程以利用與資料庫通信。

  8、恢復進程(RECO)

   這是在分散式資料庫模式下使用的一個可選進程,用於數據不一致時進行恢復工作。

  9、調度進程(DNNN)

   這是一個可選進程,在共用伺服器模式下使用,可以啟動多個調度進程。

  10、快照進程(SNPN)

   快照進程用於處理資料庫快照的自動刷新,並通過 DBMS_job 包運行預定的資料庫存儲過程。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 回到目錄 鉗位器(clamper)可以將輸入波形整體上移或下移,“clamper”在 英語中的原意是“夾具”的意思,很形象地說明瞭它可以把波形任意鉗夾在某個電平處。如下圖所示: 圖 2-5.01 鉗位電路的核心器件是二極體和電容,下麵我們具體分析實現各種鉗位的電路圖。同樣的,為方便分析,我們假設下麵 ...
  • Mongodb 是基於集合建立索引 (Index),索引的作用類似於傳統關係型資料庫,目的是為了提高查詢速度 。 如果沒有建立索引, Mongodb 在讀取數據時必須掃描集合中的 所有文檔記錄。 這種全集合掃描效率是非常低的,尤其在處理大數據時,查詢可能需要花費幾十秒到幾分鐘的時間,這對基於互聯網應 ...
  • 今天在創建資料庫的時候,遇到了沒有創建資料庫許可權的問題,後來百度了一下解決了該問題。 1.先用windows身份驗證登錄,在安全性下麵的找到自己創建的登錄名,雙擊,在彈出的對話框中為它賦予許可權。 2.設置完後退出,然後登錄,這樣就可以創建資料庫了 ...
  • 大數據如此火熱的現在,想必許多小伙伴都想要加入這個行業。也是我們今天就要拿出收藏已久的大數據學習計劃。幫助你不走彎路,邁向大數據 1 大數據應用離不開基礎軟體的支撐,且大部分大數據組件部署在 Linux 操作系統上的用戶空間,也有很多組件也借鑒了Linux 操作系統的一些設計精髓,所以 Linux ...
  • MongoDB 是一款開源、跨平臺、分散式,具有大數據處理能力的文檔存儲資料庫。在 2007 年由 MongoDB 軟體公司開發完成,並實現全部代碼源發展。目 前,該文檔資料庫被國內外眾多知名網因所採納,用於提高數據訪問的處理速度 和大數據存儲問題。 基本操作命令 : show dbs : 顯示所有 ...
  • 找出employee表的所有外鍵約束 Result: 此時如果想刪除和posId相關的外鍵,只需要 找出以employee為REFERENCED_TABLE的所有約束 Result: ...
  • 開發同事反饋一個SQL Server存儲過程執行的時候,報“鏈接伺服器"(null)"的 OLE DB 訪問介面 "SQLNCLI10" 返回了消息 "Cannot start more transactions on this session."。這個存儲過程,個人做了一個精簡和脫敏處理後如下: ... ...
  • 大數據時代,給想從事IT的人帶來了新的發展機會,也提供了新的職業發展通道。在面對眾多的大數據就業崗位,我們應該選擇什麼樣的職業發展方向,並去學習相應技能達到企業要求呢? ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...