PGA (ProgramGlobal Area )程序全局區
PGA是用戶進程連接到數據庫並創建一個對應的會話時,由ORACLE為服務器進程分配的專門用於當前用戶會話的內存區,每個Oracle服務器進程都包含有屬於自己的PGA,它只存儲這個服務進程的相關信息。PGA是私有的而非共享的,當它對應的用戶進程死掉後可將服務器進程及其資源清除和釋放。PGA的構成:
l 排序區
用於存放排序操作產生的臨時數據,排序區是影響PGA區大小的主要因素。排序區的大小由初始化參數SORT_AREA_SIZE決定。而SORT_AREA_RETAINED_SIZE參數是決定排序區操作結束後排序區保留的內存大小。從排序區釋放的內存仍然屬於服務器進程,並不返回給操作系統。
ORACLE利用內存比磁盤快的事實,將准備排序的數據先臨時存儲到排序區中,並在排序區中執行排序操作,然後將排序結果返回給用戶。
排序原理:如果要排序的數據在排序區中放不下,則ORACLE就將數據分割成較小的塊放在排序區中,然後對每一小塊進行排序。排序產生的臨時數據就先放到臨時表空間的臨時段中。當每一小塊都排序完成之後,再將這些排序完成的小塊合並在一起,產生最終結果。
l 會話區
存儲會話所具有的權限、角色、性能統計信息。
l 游標狀態區
運行SQL語句或使用游標的語句時,ORACLE會在共享池中為該語句分配上下文區,游標實際是指向該上下文區的指針。在PGA區中的游標狀態區存儲的是會話中當前使用的各個游標所處的狀態。
l 堆棧區
存儲的是會話中的綁定變量、會話變量、SQL語句運行的內存結構等信息。
SGA與PGA對比表
SGA
PGA
分配時間
實例啟動時
創建服務器進程時
釋放時間
實例關閉時
服務器進程結束時
共享范圍
被一個實例下的所有進程共享
單個進程專用,不能共享。