oracle concept-pga和共享sql 私有sql記載
看oracle concepts的第八章記憶體管理中對於pga和sql區真的不是很好理解,就把其中的要點難點摘要下來了,
程式全域性區pga是供服務程式儲存資料及控制資訊的記憶體區域。服務程式啟動時由oracle建立的非共享的記憶體區。只有服務程式才能訪問屬於她的PGA,對pga的讀寫操作由oracle程式碼實現的。
PGA的內容:
每個使用者都有自己的pga,記錄各種不同的連線至oracle伺服器的程式資訊,例如使用者名稱 密碼等。登陸oracle的會話會在伺服器端佔用一塊pga,會話剛登陸時,每個使用者佔用的pga大概幾百KB記憶體,並在以後動態收縮。
私有sql區中包含繫結資訊及執行時記憶體結構等資料。每個執行的sql語句的session都有一個私有sql區。提交相同sql語句都有自己的私有sql區,但使用同一共享sql區。同樣私有sql在專用伺服器模式下也儲存與PGA中。
遊標的私有sql區又分為:
持續資料區(繫結變數之類的資料),此區在遊標關閉時釋放。
執行時區,遊標執行完畢後就會釋放,執行時區維護會話的相關遊標,例如查詢時的scn,當前結果集的位置,工作區(排序 雜湊 點陣圖)也是執行時區一部分
Oracle執行使用者請求例如sql查詢首先需要建立遊標然後開啟遊標,遊標開啟後被執行前,這一段期間所使用的記憶體都是使用持續資料區記憶體。繫結資訊,sql宣告等還有用來和共享sql區關聯的sql地址資訊。
摘自tom大師:
執行計劃這些相關SQL的資訊,在共享池中只留一份,各個會話的UGA中的儲存指標.也就是說,在應用程式(SQL)中,應該存有相應DLL庫(共享SQL)的指標,憑這個指標,將私有SQL區與共享SQL區聯絡起來。
私有sql區的持續資料區中存放的這個指向共享SQL區的指標,和與之對應的SQL宣告文字,是持續區最重要的內容
私有sql區的持續資料區儲存的繫結變數 sql宣告等需要一個連線到共享sql的地址。
使用者程式管理私有sql區,私有sql區的分配和回收主要取決於使用者的應用程式,使用者程式可分配私有sql區,私有sql區的最大數量由open_cursors控制。
專有伺服器連線:私有sql區位於服務程式的pga,共享伺服器:私有sql區位於sga中。
在一個語句執行遊標(語句控制程式碼被釋放)被關閉後,相應的私有sql區才會被清除。
語句結束後,oracle會釋放其使用的執行時區,但是此語句使用的持續資料區還是會被保留,直到關閉遊標才會釋放其使用的持續資料區,從而減少應用程式所佔用的記憶體。
會話記憶體
使用者儲存會話的變數(登陸資訊)和會話相關的資訊。在共享伺服器下,會話記憶體為共享而不是某個會話私有。
Sql工作區
對於複雜查詢來說,執行時區的大部分容量用於需要記憶體的操作建立工作區之用。一般來說,更大工作區能夠顯著提高sql操作的效能,但是會消耗更多記憶體。(例如排序 分組 雜湊 點陣圖建立和融合等都會消耗pga中的sql工作區),sql工作區也是執行時區的一部分。
最好是工作區能夠容納sql語句的全部輸入資料及額外的控制記憶體結構。不然sql語句的響應時間增加,存在部分資料資料必須放在臨時磁碟區,資料資料需要在臨時磁碟區與工作區間多次交換,將影響sql操作的時間。
Pga的自動管理需要設定引數workarea_size_policy=auto和pga_aggregate_target分配給pga的值。
感覺這篇blog很亂,有些知識點自己真是沒有弄清楚,以前看pga記憶體看見了就逃避,慢慢地還是有了點自己的理解。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1055838/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL】Oracle SQL共享池檢查SQLOracle
- SQL SERVER與ORACLE的資料共享SQLServerOracle
- Oracle 常用SQL筆記OracleSQL筆記
- 共享SQL語句SQL
- 如何建立SQL 調優集(—) 從共享池載入SQL
- Oracle Sql優化筆記OracleSQL優化筆記
- oracle PL/SQL中的過載OracleSQL
- oracle glogin.sql 和login.sqlOracleSQL
- 【SQL】Oracle SQL monitorSQLOracle
- SQL in ORACLE and SQL ServerSQLOracleServer
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- Oracle glogin.sql 和login.sql使用OracleSQL
- ORACLE DBA必須記住的常用SQL命令和檢視OracleSQL
- SQL Server 生成C#公共實體屬性和私有屬性SQLServerC#
- v$sql v$sqlarea和父遊標 子游標記載01SQL
- 關於共享SQL——窺視解析SQL
- 【SQL】Oracle SQL處理的流程SQLOracle
- ORACLE SQL and SQL*PLUS (strong recommend)OracleSQL
- Oracle SQL Trace 和 10046 事件OracleSQL事件
- ORACLE中SQL TRACE和TKPROF的使用OracleSQL
- Oracle SQL的硬解析和軟解析OracleSQL
- Oracle SQL Trace 和10046 事件OracleSQL事件
- SQL SERVER和ORACLE的排序問題SQLServerOracle排序
- [SQL]oracle 繫結變數(bind variable)[轉載]SQLOracle變數
- oracle實驗記錄 (SQL*PLUS 命令操作)OracleSQL
- sql%notfound、sql%rowcount和returnSQL
- ORACLE TOP SQLOracleSQL
- Oracle樹 sqlOracleSQL
- Oracle 常用SQLOracleSQL
- oracle SQL with 子句OracleSQL
- Oracle SQL JOINOracleSQL
- first oracle sqlOracleSQL
- Oracle SQL optimizationOracleSQL
- Oracle PL/SQLOracleSQL
- PostgreSql擴充套件Sql-動態載入共享庫(C函式)SQL套件函式
- SQL Server下載SQLServer
- SQL Server 修改AlwaysOn共享網路位置SQLServer
- 13_共享SQL減少硬解析SQL