oracle的記憶體管理(之中的乙個)

2021-09-07 05:56:45 字數 4109 閱讀 5777

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

1.記憶體管理

oracle資料庫所使用的記憶體主要涉及到兩個方面:pga和sga。

pga指的是程式全域性區(program global area),是server程序(server process)使用的一塊包括資料和控制資訊的記憶體區域,pga是非共享的記憶體,在server程序啟動或建立時分配(在系統執行時,排序、連線風操作也可能須要進一步的pga分配),並為server process排他訪問。所以pga中的資料結構並不須要通過latch來保護。

程序的建立通常有兩種模式:專用server模式(dedicated  server)及共享server模式(sharedserver)。 在 專 用 服 務 器 模 式 下 ,oracle會為每乙個會話啟動乙個oracle程序;而在共享server模式下。通常在server端啟動一定數量的server程序。然後由多個client請求共享同乙個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區等。

可變pga又進一步的由下面兩部分組成:

(1)會話記憶體-session memory用於存放會話的登入資訊以及其它相關資訊。對於共享server模式,這部分記憶體是共享而非私有的。

(2)私有的sql區 - private sql area:private sql area包括繫結變數資訊、查詢執行狀態資訊以及查詢工作區等。每乙個發出sql查詢的會話都擁有一塊私有sql區,對於專用server模式,這部分內存在pga中分配。對於共享server模式,這部分內存在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語句執行完成就釋放該區域。對於查詢語句則是在記錄返回後或查詢取消時釋放)

oracle表的管理 一

oracle表的管理 一 1.表名和列的命令規則 1 必須以字母開頭 2 長度不能超過30個字元 3 不能使用oracle的保留字 4 只能使用如下字元 a z,a z,0 9.等 2.oracle支援的資料型別 1.字元型 char 定長 最大為2000字元 查詢速度快 例如 char 10 小韓...

Spark中的記憶體管理 一

乙個spark應用執行的過程如下所示 executor上面執行的每個maptask結束後都會有mapstatus匯報給driver,當maptask數量非常多的時候可能會導致driver出現oom,此時需要調整driver的記憶體大小,通過 conf spark.driver.memory 4g或者...

記憶體的管理

記憶體的管理大致分為有作業系統 os 的和沒有作業系統的。一 沒有os 沒有作業系統的時候,計算機執行的就是裸機程式,記憶體的開闢和釋放全部由裸機程式自己承擔。二 有os 有作業系統的時候,作業系統會幫助我們管理記憶體空間,並且留下一些簡潔的記憶體管理介面,便於我們能夠直接控制記憶體的管理。但是相比...