中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle內存架構(一)

發布時間:2020-07-05 11:02:17 來源:網絡 閱讀:928 作者:墨筆軒 欄目:關系型數據庫

當oracle數據庫實例啟動的時候,oracle數據庫會分配一個內存區并且會啟動后臺進程。

內存區存儲的信息如下:

·程序代碼

·每個連接會話的信息,包括當前沒激活的會話

·程序執行過程中需要的信息,比如正在獲取當前行的查詢狀態

·在進程間共享和通信的鎖數據信息

·緩存數據,比如數據塊和重作記錄,它們也會存在于磁盤

基礎的內存結構

oracle數據庫包含幾個內存區域,每個內存區域都包含好幾個子組件

與oracle數據庫相關的基礎內存結構包括:

  • System global area (SGA) 系統全局區

SGA是一組共享內存結構,稱為SGA組件,包含一個oracle數據庫實例的數據和控制文件信息。所有的服務器進程和后臺進程共享SGA內存區,SGA中存儲的數據包括緩存的數據塊和SQL共享區域。

  • Program global area (PGA) 程序全局區

PGA是一個非共享內存區域,它只包含用于Oracle進程使用的數據和控制信息。當Oracle進程啟動時,Oracle數據庫創建PGA。

每個服務器進程和后臺進程都有它自己的PGA內存區,單個PGA的集合是總的實例PGA的大小,在系統初始化參數中設置的是實例PGA的大小。

  • User global area (UGA) 用戶全局區

UGA是與用戶會話相關聯的內存。

  • Software code areas

軟件代碼區是用來存儲正在運行或可以運行代碼的區域。Oracle數據庫代碼存儲在一個軟件領域,通常在不同的位置,從用戶程序——更高級的或受保護的位置。

下圖顯示了這些內存之間的關系:

oracle內存架構(一)

oracle 數據庫內存管理

內存管理包括為oracle數據庫實例內存結構分配最佳大小,以滿足數據庫更改的需求。oracle數據庫內存管理基于初始化相關內存參數的設置

內存管理的基本模式如下:

·內存自動化管理

先給數據庫實例分配一個目標內存大小,實例會自動調整到目標內存大小并根據需要在SGA和PGA之間重新分配內存。

·自動共享內存管理

這種管理模式實現部分自動化,為SGA設置了一個目標大小,然后可以選擇為PGA設置聚合目標大小,或者單獨管理PGA工作區域。

·內存管理手冊

與設置總內存大小不同,可以設置許多初始化參數,以單獨管理SGA和實例PGA組件。

如果你通過DCBA(Database Configuration Assistant)創建oracle數據庫并選擇默認的初始化設置,此時自動化管理模式就是默認的內存管理模式。

UGA(User Global Area)概述

UGA是會話內存,它是分配給會話變量的內存,它主要存儲登錄信息、以及數據庫會話所需的其它信息,實際上UGA存儲的是會話的狀態。

下圖是UGA的結構:

oracle內存架構(一)

如果會話將PL / SQL包加載到內存中,那么UGA將包含包狀態,即在特定時間存儲在所有包變量中的值集。

當包的子程序更改變量時包的狀態也會發生更改,默認情況下包變量是唯一的,并且會持久保存。

OLAP頁面池也存儲在UGA中。這個池管理OLAP數據頁面,它相當于數據塊。頁面池是在OLAP會話開始時分配的,并在會話結束時釋放。當用戶查詢多維對象(如多維數據集)時,OLAP會話將自動打開。

UGA對于數據庫會話必須是可用的。由于這個原因,在使用共享服務器連接時,UGA不能存儲在PGA中,因為PGA是特定于單個進程的。因此,UGA在使用共享服務器連接時存儲在SGA中,使任何共享服務器進程都可以訪問它。當使用專用的服務器連接時,UGA存儲在PGA中。

PGA(Program Global Area)概述

PGA是oracle服務器進程所獨有的內存區,而不是系統上其它進程或線程所共享的內存區。因為PGA是特定于進程的,所以它從來不是在SGA中分配的。

PGA是一個內存堆,它包含專用和共享服務器進程所需要的session變量。服務器進程分配它在PGA中需要的內存結構。

下圖顯示了一個沒有為共享服務器配置的實例PGA(所有PGA的集合)。可以使用初始化參數設置PGA的最大值,個人PGA可以根據需要增加到這個目標大小。

oracle內存架構(一)

PGA詳細內容

PGA被細分為不同的區域,每個區域都有不同的作用。

下圖為專用服務器會話所需的PGA內存結構:

oracle內存架構(一)

Private SQL Area(私有SQL區)

一個Private SQL Area包含關于解析的SQL語句和其他特定會話特定信息的信息。

當服務器進程執行SQL或PL / SQL代碼時,進程將會使用私有SQL區域存儲綁定變量值(綁定變量詳解http://blog.csdn.net/tianlesoftware/article/details/5458896)、查詢執行狀態信息和查詢執行工作區域。

不要混淆在PGA中的私有SQL區域和共享的SQL區域,共享SQL區域在SGA中存儲執行計劃。在相同或不同的會話中,多個私有SQL區域可以指向SGA中的一個執行計劃。例如,在一個會話中執行“SELECT * FROM sales”的20次執行和在不同會話中執行相同查詢的10次執行可以共享相同的計劃。每個執行的私有SQL區域不共享,可能包含不同的值和數據。

游標是特定私有SQL區的名稱。如下圖所示,你可以將游標看作是客戶端上的指針和服務器端的狀態。因為游標與私有SQL區域密切相關,所以術語有時可以相互互換使用。

oracle內存架構(一)

一個私有SQL區可以劃分為如下幾個區域:

·The run-time area(運行時區)

這個區域包含查詢執行狀態信息。例如The run-time area可以跟蹤到目前為止在全表掃描中檢索到的行數信息。當游標執行結束時The run-time area被釋放。

oracle創建The run-time area作為執行請求的第一步。對于DML語句,當SQL語句關閉時,The run-time area將會被釋放。

·The persistent area(持續數據區)

這個區域包含綁定變量值。當語句執行時會提供一個綁定變量值到SQL語句。只有當游標關閉時 The persistent area 才會被釋放。

客戶端進程負責管理私有SQL區。盡管客戶端進程可以分配的私有SQL區的數量受到初始化參數“OPEN_CURSORS”的限制,但是私有SQL區的分配很大程度上還是取決于應用程序。

盡管大多數用戶依賴于數據庫實用程序的自動游標處理,但Oracle數據庫編程接口提供給了開發人員更多的控制游標。一般來說,應用程序應該關閉所有不再被使用的開放游標,以釋放持續數據區,并最小化用戶所需的內存。

SQL Work Areas(SQL工作區)

工作區是用于內存密集型操作的PGA內存的私有區域。

例如,sort運算符利用sort區域來將一行數據進行排序。類似的,一個散列連接操作符使用一個散列區域從它的左輸入構建一個哈希表,而位圖合并使用位圖合并區域來合并從多個位圖索引掃描中檢索到的數據。

下圖顯示了員工和部門之間的查詢關系:

oracle內存架構(一)

在前面的示例中,運行時區跟蹤全表掃描的進度。會話在散列區執行散列連接以匹配兩個表中的行。排序則在排序區中進行。

如果處理的數據量大于工作區的容量,那么oracle數據庫會將輸入的數據分成小塊。這樣的話數據庫就先會處理內存中的數據片段,然后將其余的數據寫入臨時磁盤以便稍后處理。

當啟動自動PGA內存管理時,數據庫會自動調整SQL工作區的大小,當然,也可以手動調整SQL工作區的大小。

一般來說,較大的SQL工作區是以高內存消耗換取優秀的操作性能。最理想的SQL工作區的大小是足以容納由其關聯的SQL操作符分配的輸入數據和輔助內存結構。否則響應時間會增加,因為必須要將部分輸入數據緩存在磁盤上。在極端情況下,如果SQL工作區的容量遠遠小于輸入數據大小,那么數據庫必須對數據塊執行多次傳遞,從而極大地增加響應時間。

專用服務器和共享服務器模式下的PGA的使用

PGA內存區的分配取決于數據庫采用的是專用服務器連接還是共享服務器連接。

下圖會體現出他們之間的不同:oracle內存架構(一)




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹东市| 五家渠市| 桂林市| 于田县| 屏山县| 墨竹工卡县| 古浪县| 洪雅县| 正蓝旗| 蕲春县| 金昌市| 横山县| 抚顺市| 阜阳市| 荔波县| 丰台区| 临汾市| 开化县| 枝江市| 云龙县| 蓝山县| 赤壁市| 萨迦县| 汨罗市| 乾安县| 周口市| 嘉荫县| 祁东县| 林甸县| 普安县| 诸暨市| 远安县| 邢台县| 崇阳县| 商洛市| 册亨县| 清原| 抚远县| 明溪县| 伊吾县| 安溪县|