oracle的記憶體管理(之一)

來源:互聯網
上載者:User

標籤:database   linux   oracle   sga   

【深入解析oracle-eygle】學習筆記


1.記憶體管理

 

ORACLE資料庫所使用的記憶體主要涉及到兩個方面:PGA和SGA。

 

1.1 PGA管理

PGA指的是程式全域區(Program Global Area),是伺服器處理序(Server Process)使用的一塊包含資料和控制資訊的記憶體地區,PGA是非共用的記憶體,在伺服器處理序啟動或建立時分配(在系統運行時,排序、串連風操作也可能需要進一步的PGA分配),並為Server Process排他訪問,所以PGA中的資料結構並不需要通過latch來保護;

 

1.2 什麼是PGA

進程的建立通常有兩種模式:專用伺服器模式(Dedicated  Server)及共用伺服器模式(SharedServer)。 在 專 用 服 務 器 模 式 下 ,Oracle會為每個會話啟動一個Oracle進程;而在共用伺服器模式下,通常在伺服器端啟動一定數量的伺服器處理序,然後由多個用戶端請求共用同一個Oracle服務進程。

 

 

從記憶體配置與使用上PGA可以被區分為兩個地區:

 

(1)固定PGA(Fixed PGA)-  固定PGA和固定SGA類似,包含了大量原子變數、小的資料結構和指向可變PGA的指標,這些變數在源碼中定義,在編譯時間分配,可以被認為是PGA的保留記憶體

 

(2)可變PGA(Variable PGA)-  可變PGA通過具體的記憶體Heap分配來實現,其空間分配與使用時可以變化的,通過內部視圖X$KSMPP([K]ernel [S]ervice [M]emory [P]GA hea[P])可以查詢可變PGA記憶體的分配和使用方式。PGA的可變區中主要包含會話記憶體及私人SQL區等。

 

17:21:[email protected] SQL>select * from x$ksmpp;

ADDR              INST_ID KSMCHCOM          KSMCHPTR           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR

---------------- ------------------------- ---------------- ---------- --------- -------------------------

00007FC3A71D91E0        1 allocate kzthsm   00007FC3A74E9700        120 freeabl           0 00

00007FC3A71D9188        1 kpuinit env han   00007FC3A74E8F70       1936 freeabl           0 00

00007FC3A71D9130        1 Alloc environm    00007FC3A74E87A0       2000 recr           4095 00007FC3A74E95C8

00007FC3A71D90D8        1 Alloc environm    00007FC3A74E77D0       4048 freeabl           0 00007FC3A74E95C8

00007FC3A71D9080        1 permanent memor   00007FC3A74E7780         80 perm              0 00

00007FC3A71D9028        1 permanent memor   00007FC3A74E7730         80 perm              0 00

00007FC3A71D8FD0        1 Alloc environm    00007FC3A74E97F0       8312 freeabl           0 00007FC3A74E95C8

00007FC3A71DAF60        1 kzsna:login nam   00007FC3A74E97B8         56 freeabl           0 00

00007FC3A71DAF08        1 kgh stack         00007FC3A74EB8A8      17024 freeabl           0 00

00007FC3A71DAEB0        1 external name     00007FC3A74F1BF8         32 freeabl           0 00

00007FC3A71DAE58        1 Alloc environm    00007FC3A74F0B78       4224 freeabl           0 00007FC3A74E95C8

00007FC3A71DAE00        1 KSZ pga subheap   00007FC3A74F0AD8        160 freeabl           0 00

00007FC3A71DADA8        1 KJZT context      00007FC3A74F0A78         96 freeabl           0 00

00007FC3A71DAD50        1 sioheapd_kdlwpg   00007FC3A74F09A8        208 freeabl           0 00

00007FC3A71DACF8        1 bcheapd_kdlwpga   00007FC3A74F0878        304 freeabl           0 00

00007FC3A71DACA0        1 iovecheapd_kdlw   00007FC3A74F0790        232 freeabl           0 00

00007FC3A71DAC48        1 peshm.c:Proces    00007FC3A74F01D0       1472 recr           4095 00007FC3A75160F0

00007FC3A71DABF0        1 permanent memor   00007FC3A74EFB68       1640 perm              0 00

00007FC3A71DAB98        1 krbrpcact         00007FC3A74F3CC8         64 freeabl           0 00

00007FC3A71DAB40        1 permanent memor   00007FC3A74F1C58       8304 perm              0 00

 

 

可變PGA又進一步的由以下兩部分組成:

 

(1)會話記憶體-Session Memory用於存放會話的登入資訊以及其他相關資訊,對於共用伺服器模式,這部分記憶體是共用而非私人的。

 

(2)私人的SQL區 - Private SQL Area:Private SQL Area包含綁定變數資訊、查詢執行狀態資訊以及查詢工作區等。每個發出SQL查詢的會話都擁有一塊私人SQL區,對於專用伺服器模式,這部分記憶體在PGA中分配,對於共用伺服器模式,這部分記憶體在SGA中分配。

 

 

在這裡還需要瞭解的一個概念是遊標(Cursor)。Oracle的應用程式或使用者的應用程式執行時,都可能顯示或隱式的開啟遊標(Open  Cursor)來進行任務處理,開啟遊標就需要分配SQL Area。管理私人SQL區是使用者進程的責任,而分配和回收則依賴於具體的應用程式,為了防止過度的SQL工作區分配,Oracle通過OPEN_CURSORS參數來限制每個使用者進程能夠同時開啟的遊標數量。一個私人SQL區在Cursor開啟時分配,當執行結束遊標關閉時釋放。

簡單來說,使用者進程的任務執行以及Cursor的使用是PGA記憶體的主要消耗者,也是我們在進行資料庫效能最佳化時最關心的內容,實際上資料庫的活動主要就是Cursor的活動

 

私人SQL區又由以下兩部分組成:

(1) 永久地區-Persistent  Area:這個地區包含綁定變數等資訊,這部分記憶體只有在遊標被關閉時才會被釋放。

(2)運行時地區-Runtime Area:這個地區存放了SQL語句運行時所需要的資訊,在執行請求時首先建立,其中包含了查詢執行的狀態資訊(如對於全表掃,則記錄全表掃的進度等)、SQL  work  areas(這部分地區在記憶體密集型請求下分配,如Sort或者Hash-Join等,對於DML語句來說,SQL語句執行完畢就釋放該地區,對於查詢語句則是在記錄返回後或查詢取消時釋放)



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.