oracle體系結構梳理---SGA+PGA
三大元件:buffer cache,shared pool,redo_log buffer
---------------------------------------------------------------
SGA 在oracle 10g之後即實現了自動化管理,在11G,可以使用memory_target引數把PGA和SGA作為一個整體進行自動管理。
1.shared pool (data dictionary cache,library cache )共享池
2.database buffer cache資料庫高速緩衝區
3.redo log buffers 重做日誌緩衝區
4.large pool 大池
5.java pooljava池
高速緩衝區分成以下幾種子池:
1. 預設池,它在ORACLE中的大小由DB_CACHE_SIZE決定,經常使用的物件
2. KEEP 池,DB_KEEP_CACHE_SIZE 用在一些小表,不容易被擠出
alter table t storage (buffer_pool keep);
alter index IND_AA storage (buffer_pool keep);
3.回收池,DB_RECYCLE_CACHE_SIZE
alter table t storage(buffer_pool recycle);----將t表放在keep池
select segment_name,blocks,bytes/1024/1024||'M'AS "SIZE" from dba_segments where BUFFER_POOL = 'RECYCLE';
----回收池避免大表將buffer cache 中常用的小表踢出,二是將其儲存在一個回收區,用完之後迅速釋放
理論上講,預設池中的物件應該足夠熱(也就是說,用得足夠多),可以保證一直呆在快取中。快取會把它們一直留在記憶體中。可能還有一些段相當熱門,但是並不太熱;這些塊就作為溫塊。這些段的塊可以從快取重新整理輸出,為不常用的一些塊(“不適合快取”塊)騰出空間。為了保持這些溫段的塊得到快取,可以採取下面的某種做法:將這些段分配到保持池,力圖讓溫塊在緩衝區快取中停留得更久。將“不適合快取”段分配到回收池,讓回收池相當小,以便塊能快速地進入快取和離開快取(減少管理的開銷)。這樣會增加DBA 所要執行的管理工作,因為要考慮3 個快取,要確定它們的大小,還要為這些快取分配物件。還要記住,這些池之間沒有共享,所以,如果保持池有大量未用的空間,即使預設池或回收池空間不夠用了,保持池也不會把未用空間交出來。總之,這些池一般被視為一種非常精細的低階調優裝置,只有所有其他調優手段大多用過之後才應考慮使用。11g之後sga記憶體管理均可以設定auto方式。
REDO BUFFER大小由LOG_BUFFER決定
Large pool和Java pool
SGA 中三大元件:
第一個元件:共享池,用來存放SQL解析樹和字典物件定義的共享區域。
第二個元件,資料庫快取記憶體區,用來存放業務資料的共享記憶體區域。
第三個元件,REDO日誌快取區
第四個元件,其它共享資源,如LOCK,ENQUEUE,LATCH,統計資料。
接下來將透過一條SQL 語句的執行過程來認識這三個元件在oracle中的具體作用:
---SELECT * FROM EMP;
解析:首先接收到這一條命令的時候,現在 data dictionary cache(資料字典快取)中校驗表的相關定義相關行以及命令發出使用者的許可權,
然後在 shared pool 中的 library cache 中檢視語句之前是否已經解析,如果有,則直接按照之前的解析執行,
如果沒有則發生硬解析,然後根據執行計劃,去取 database buffer cache 中取資料。
row cache
資料字典快取也被稱為行快取(Row Cache),因為它是以記錄行為單元儲存資料的 作來語意分析,
比如:檢查物件是否存在,列是否存在,是否有許可權等。
row cache儲存了最近最常使用的資料物件定義,如使用者、許可權、列、表、索引等全部可以放到資料字典共享。
---物理讀 和 邏輯讀
物理讀即在磁碟中讀取資料
邏輯讀是指在記憶體中讀取
邏輯讀 = 當前讀 + 一致讀
-----實驗
sql>1 create table t(id,int);
sql>1 insert t values(1);
sql>1 commit;
sql>1 update t set id=2 where id=1;
sql>1 select * from t;-----2 當前讀 db block gets
sql>2 select * from t;-----1 一致讀 consistent gets
sql>2 update t set id=3 where id=3;---發生兩次一致讀,一次當前讀
--------------------------------------------------------------------
PGA
---一條sql語句的執行過程
1.語法檢查selet form
2.語意檢查 相關的物件是否存在,比如:表,列等
3.名稱轉換 同義詞或檢視等 scott.emp
4.許可權
5.將sql取hash值,hash value hash(select ename,sal from emp)返回一串字元執行計劃的hash value
6. 如果沒有相同的hash值,則硬解析.
7.透過最佳化器建立一個最優的執行計劃(需要分析計算成本)。
8. 如果是第一次執行,則將該遊標所產生的執行計劃、SQL文字等裝載進library cache的若干個heap中,以便下一次來匹配。
9. 如果是第三次執行相同的sql,則將執行計劃等資訊cache到PGA中
10. 透過私有CURSOR,執行SQL
11. 如果是SELECT,則需要PGA來FETCH資料
PGA
中包含了關於程式使用到的作業系統資源的資訊,以及一些關於程式狀態的資訊。而關於程式使用的Oracle共享資源的資訊則是在SGA中。
SGA中存放的內容: 主要概括來說就是會話在執行的過程中一些SQL語句的返回結果以及排序結果等的暫時存放地。
WORKAREA_SIZE_POLICY= MANUAL---PGA 的管理方式 auto自動和 manual 手動
pga_aggregate_target>0,WORKAREA_SIZE_POLICY= AUTO,表示PGA自動管理
1. 會話記憶體(session memory)
2. 私有 SQL 區(private SQL area)
每一個發出sql語句的session都有自己的私有sql區域
1) 固定部分(persistent area),包含繫結資訊(bind information)之類的資料
2) 執行部分(run-time area),當遊標執行結束就會被釋放。---將查詢的結果儲存在PGA中,等所有結果出來時,再釋放遊標
INSERT
UPDATE
DELETE
3. 遊標及共享 SQL 區
控制程式碼==指標
一個共享sql去可以對應多個私有sql區---銀行和客戶的關係
共享sql區有控制程式碼,有執行計劃,私有sql區只儲存了一個指標型別的東西
私有CURSOR只有控制程式碼,沒有執行計劃
而共享CURSOR,有控制程式碼,還有執行計劃
4. SQL 工作區
1) SORT_AREA_SIZE: 需要進行排序的操作
2) SORT_AREA_RETAINED_SIZE:排序完成後用於儲存已排序資料的記憶體總量 SORT_AREA_RETAINED_SIZE=0 說明SORT_AREA_RETAINED_SIZE=SORT_AREA_SIZE
不用返回給使用者則不用使用SORT_AREA_SIZE如:INSERT INTO T SELECT * FROM emp ORDER BY ename;
3) HASH_AREA_SIZE:雜湊連線(hash-join)
4) bitmap_merge_area_size: 點陣圖合併(bitmap merge)
5) create_bitmap_area_size
點陣圖建立(bitmap create)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-1409115/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle體系結構梳理Oracle
- oracle體系結構梳理----各種程式Oracle
- ORACLE體系結構梳理---基本概念Oracle
- oracle體系結構梳理---redo和undo解析1Oracle
- oracle體系結構梳理---redo和undo檔案解析Oracle
- oracle體系結構Oracle
- ORACLE體系結構小結Oracle
- oracle體系結構總結Oracle
- Oracle體系結構之-物理結構Oracle
- Oracle體系結構之-記憶體結構Oracle記憶體
- oracle結構梳理---資料字典Oracle
- oracle體系結構(轉)Oracle
- ORACLE-體系結構Oracle
- Oracle 體系結構圖Oracle
- oracle體系結構(1)Oracle
- oracle體系結構(2)Oracle
- oracle體系結構(3)Oracle
- Oracle體系結構:記憶體結構和程式結構(轉)Oracle記憶體
- 3:Oracle體系結構(邏輯結構)Oracle
- Oracle記憶體體系結構Oracle記憶體
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- oracle結構梳理---歸檔檔案Oracle
- oracle體系結構概覽Oracle
- Oracle 體系結構介紹Oracle
- Oracle體系結構之記憶體結構(SGA、PGA)Oracle記憶體
- oracel體系結構梳理----控制檔案以及pfile和spfile
- Oracle體系結構部落格連結Oracle
- Oracle OCP(37):Database 體系結構OracleDatabase
- Oracle 11g體系結構Oracle
- Oracle體系結構理論篇Oracle
- Oracle 12C 體系結構Oracle
- Oracle資料庫體系結構Oracle資料庫
- 【00】Oracle體系結構詳解Oracle
- Oracle RAC 體系結構--儲存Oracle
- Oracle 體系結構介紹(轉)Oracle
- Oracle 體系結構 SGA 和PGA 總結Oracle
- Oracle系列:Oracle RAC叢集體系結構Oracle
- Oracle體系結構之-Oracle後臺程式Oracle