理解PGA(1)PGA記憶體作用和構成

2021-09-30 15:23:36 字數 1607 閱讀 6355

當客戶端向伺服器傳送連線請求,伺服器監聽到客戶端的請求,在專用伺服器模式下,會在伺服器端衍生乙個server process來**客戶的請求,server process進而向例項發起連線,建立會話,而pga就為server process所分配和使用。

pga,這p,或譯之程式,或翻為私有,角度不同而已,通常,我們稱之」程式全域性區「。它的建立時期:

1)server process啟動或建立時分配,原因?無他,唯pga和server process是」一根繩上的兩個螞蚱「。相濡以沫,患難一共。

2)系統執行時,sort、hash join等操作也可能需要進一步的pga分配

pga為server process排他訪問,故不存在latch爭用。它包含了server process的資料和控制資訊。通過c語言的執行時呼叫malloc()在本地分配,可動態擴縮。pga是私有的而不是共享的,這個機制是有必要的,因為當程序死掉後可以把這些資源清除和釋放掉.

oracle的應用程式或者使用者的應用程式在執行時,都可能顯示或者隱式地開啟cursor,開啟cursor就需要分配sql area,私有sql區在cursor開啟時分配,關閉時釋放,實際上,資料庫的主要活動就是cursor的活動,簡單說來,使用者程序的任務執行和cursor的使用是pga的主要消耗者。

使用者體驗最敏感的貢獻就在於pga。使用者所發出的請求,執行時,是在pga中執行。若在pga中命中,則無須軟解析或者硬解析,此時稱為軟軟解析。pga中的游標指向buffer cache中的資料行。返回時,是一批批,而非一條條。

pga可分固定pga和可變pga。可變pga是乙個記憶體堆,pga的可變區實際上是我們最為關注的pga部分。通過x$ksmpp可以查詢可變pga的分配和使用情況。它主要由:

a)會話記憶體:用於存放會話的登入資訊以及其他相關資訊

b)私有sql區

b1)永久區域:含繫結變數,這部分記憶體只有在cursor關閉時才會被釋放

b2)sql work area:含sort區、hash區等,對於dml事務,sql執行完畢就釋放該區域;對於select則是記錄返回後或者查詢取消時釋放

c)游標和sql區域:這裡的游標是一塊記憶體,不是我們常指的「指標」

私有sql區的sql工作區太小會造成磁碟i/o,為均衡執行sql所需的記憶體與實際空間的分配,不得不將作業轉換到臨時表空間,因此,oracle將所得的sql工作區按大小分:

a)optimal size:sql工作區完全可以滿足執行sql所需的記憶體

b)one-pass size:與臨時表空間進行一次i/o

c)multi-pass size:與臨時表空間進行多次i/o

當workload不大時,oracle傾向於為每個使用者會話分配optimal size sql工作區.

uga就是你的會話狀態。你的會話總能訪問這部分記憶體。uga的位置取決你如何連線oracle。如果是專用伺服器連線,uga在pga中建立;如果是共享伺服器連線,uga則在sga中建立。所以,pga包含程序記憶體,還可能包含uga。

理解PGA(1)PGA記憶體作用和構成

當客戶端向伺服器傳送連線請求,伺服器監聽到客戶端的請求,在專用伺服器模式下,會在伺服器端衍生乙個server process來 客戶的請求,server process進而向例項發起連線,建立會話,而pga就為server process所分配和使用。pga,這p,或譯之程式,或翻為私有,角度不同而...

PGA 記憶體自動管理

pga 記憶體自動管理 sql 工作區可以是自動的 全域性的管理。dba 只要設定引數 pga aggregate target 給乙個例項的 pga 記憶體指定總的大小。設定這個引數後,oracle 將它作為乙個總的全域性限制值,盡量使所有 oracle 服務程序的 pga 記憶體總數不超過這個值...

Oracle記憶體結構研究 PGA篇

一 概述 sga,pga,uga都是oracle管理的記憶體區。sga system global area 即系統全域性區,oracle中最重要的記憶體區。pga process global area 即程式全域性區,乙個程序的專用的記憶體區。uga user global area 即使用者全...