亚洲最大的av在线,国产精品视频一区二区三区麻豆,欧美久久久久久久久久,www.日本欧美,亚洲456区乱码,在线免费日本

當前位置: Oracle DBA培訓網-優技培訓 >> oca培訓 >

oca教程:oracle內存結構詳解

oca教程:oracle內存結構詳解

Oracle 內存結構

與 Oracle 實例關聯的基本內存結構包括:

系統全局區 (SGA):由所有服務器和后臺進程共享。SGA 中存儲的數據示例包括高速緩存的數據塊和共享 SQL 區域。

程序全局區 (PGA):各個服務器進程和后臺進程專用,每個進程都有一個 PGA。

SGA 是共享內存區,包含實例的數據和控制信息,由以下各項組成:

數據庫緩沖區高速緩存:用于緩存從磁盤檢索到的數據塊

重做日志緩沖區:用于緩存重做信息,直到其可以寫入磁盤為止

共享池:用于緩存可在用戶間共享的各種結構

大型池:用于緩沖大型 I/O 請求的可選區域,以便支持并行查詢、共享服務器、Oracle XA 以及某些類型的備份操作

Java 池:用于存放 Java 虛擬機 (JVM) 中特定于會話的 Java 代碼和數據

流池:由 Oracle Streams 使用

保留緩沖區高速緩存:用于存放會盡可能長地保留在緩沖區高速緩存中的數據

循環緩沖區高速緩存:用于存放緩沖區高速緩存中很快過期的數據

nK 塊大小緩沖區高速緩存:用于緩存大小與默認數據庫塊大小不同的數據塊,用來支持可傳輸的表空間

數據庫緩沖區高速緩存、共享池、大型池、流池和 Java 池的大小可以按照當前需求自動調整。而且,這些內存緩沖區以及保留緩沖區高速緩存、循環緩沖區高速緩存和 nK 塊大小緩沖區高速緩存可以在不關閉實例的情況下進行更改。

Oracle 數據庫會提供預警和指導,以標識內存大小問題,從而幫助確定相應的內存參數值。

程序全局區 (PGA) 是一個內存區,其中包含每個服務器進程的數據及控制信息。服務器進程是處理客戶機請求的進程。每個服務器進程都有在服務器進程啟動時創建的自己專用的 PGA。只有該服務器進程才能訪問。

所用 PGA 內存量和 PGA 的內容取決于實例是否是在共享服務器模式下配置的。通常,PGA 包含下列內容:

專用 SQL 區:包含綁定信息和運行時內存結構等數據。發出 SQL 語句的每個會話都有一個專用 SQL 區。

會話內存:此處分配的內存用于存放會話變量以及與該會話相關的其它信息。

1.緩沖區高速緩存 data buffer cache

通過指定 DB_CACHE_SIZE 參數的值,可以配置緩沖區高速緩存。緩沖區高速緩存可存放數據文件中塊大小為 DB_BLOCK_SIZE 的數據塊的副本。緩沖區高速緩存是 SGA 的一部分;因此所有用戶都可以共享這些塊。服務器進程將數據文件中的數據讀入緩沖區高速緩存。為了提高性能,服務器進程有時在一個讀操作中會讀取多個塊。然后由 DBWn 進程將數據從緩沖區高速緩存寫入數據文件。為提高性能,DBWn 在一個寫操作中會寫入多個塊。

在任何給定時間,緩沖區高速緩存都可能會存放一個數據庫塊的多個副本。雖然該塊只存在一個當前副本,但為了滿足查詢需要,服務器進程可能需要根據過去的映像信息構造讀一致性副本。這稱為讀一致性 (CR) 塊。

最近最少使用 (LRU) 列表可反映緩沖區的使用情況。緩沖區將依據其被引用時間的遠近和引用頻率進行排序。因此,最經常使用且最近使用過的緩沖區將列在最近最常使用一端。傳入的塊先被復制到最近最少使用一端的緩沖區中,然后該緩沖區將被指定到列表中央,作為起點。從這個起點開始,緩沖區根據使用情況在列表中上下移動。

緩沖區高速緩存中的緩沖區可以處于以下四種狀態之一:

已連接:當前正將該塊讀入高速緩存或正在寫入該塊。其它會話正等待訪問該塊。

干凈的:該緩沖區目前未連接,如果其當前內容(數據塊)將不再被引用,則可以立即執行過期處理。這些內容與磁盤保持同步,或者緩沖區包含塊的讀一致性快照。

空閑/未使用:緩沖區因實例剛啟動而處于空白狀態。此狀態與“干凈的”狀態非常相似,不同之處在于緩沖區未曾使用過。

灰:緩沖區不再處于連接狀態,但內容(數據塊)已更改,因此必須先通過 DBWn 將內容刷新到磁盤,然后才能執行過期處理。

服務器進程使用緩沖區高速緩存中的緩沖區;而 DBWn 進程通過將更改的緩沖區寫回數據文件,使高速緩存中的緩沖區變為可用狀態。檢查點隊列中列出將要寫出到磁盤的緩沖區。

Oracle 數據庫支持同一數據庫中有多種塊大小。標準塊大小用于 SYSTEM 表空間。標準塊大小可以通過設置初始化參數 DB_BLOCK_SIZE 來指定。其有效值介于 2 KB 到 32 KB 之間,默認值為 8 KB。非標準塊大小的緩沖區的高速緩存大小通過以下參數指定:

DB_2K_CACHE_SIZE

DB_4K_CACHE_SIZE

DB_8K_CACHE_SIZE

DB_16K_CACHE_SIZE

DB_32K_CACHE_SIZE

DB_nK_CACHE_SIZE 參數不能用于調整標準塊大小的高速緩存的大小。如果 DB_BLOCK_SIZE 的值為 nK,則設置 DB_nK_CACHE_SIZE 是非法的。標準塊大小的高速緩存的大小始終由 DB_CACHE_SIZE 的值確定。

由于每個緩沖區高速緩存的大小都有限制,因此,通常并非磁盤上的所有數據都能放在高速緩存中。當高速緩存寫滿時,后續高速緩存未命中會導致 Oracle 數據庫將高速緩存中已有的灰數據寫入磁盤,以便為新數據騰出空間。(如果緩沖區中沒有灰數據,則不需要寫入磁盤即可將新塊讀入該緩沖區。)以后若對已寫入磁盤的任何數據進行訪問,則會導致再次出現高速緩存未命中現象。

數據請求導致高速緩存命中的幾率會受到高速緩存大小的影響。高速緩存越大,包含所請求數據的幾率也就越大。因此,增加高速緩存大小會提高引起高速緩存命中的數據請求的百分比。

數據庫管理員 (DBA) 可以創建多個緩沖區池來提高數據庫緩沖區高速緩存的性能。您可以根據對象的訪問情況將其分配給某個緩沖區池。緩沖區池有三種:

保留:此池用于保留內存中可能要重用的對象。將這些對象保留在內存中可減少 I/O 操作。通過使池的大小大于分配給該池的各個段的總大小,可以將緩沖區保留在此池中。這意味著緩沖區不必執行過期處理。保留池可通過指定 DB_KEEP_CACHE_SIZE 參數的值來配置。

循環:此池用于內存中重用幾率很小的塊。循環池的大小要小于分配給該池的各個段的總大小。這意味著讀入該池的塊經常需要在緩沖區內執行過期處理。循環池可通過指定 DB_RECYCLE_CACHE_SIZE 參數的值來配置。

默認:此池始終存在。它相當于沒有保留池和循環池的實例的緩沖區高速緩存,可通過 DB_CACHE_SIZE 參數進行配置。

注:保留池或循環池中的內存不是默認緩沖區池的子集。

CREATE INDEX cust_idx …

STORAGE (BUFFER_POOL KEEP …);

ALTER TABLE oe.customers

STORAGE (BUFFER_POOL RECYCLE);

ALTER INDEX oe.cust_lname_ix

STORAGE (BUFFER_POOL KEEP);

手工刷新內存:

alter system flush buffer cache;

BUFFER_POOL 子句用于定義對象的默認緩沖區池。它是 STORAGE 子句的一部分,對 CREATE 和 ALTER 表、簇和索引語句有效。未明確設置緩沖區池的對象中的塊將進入默認緩沖區池。

語法為:BUFFER_POOL [KEEP | RECYCLE | DEFAULT]。

使用 ALTER 語句更改對象的默認緩沖區池時,已緩存的塊會一直保留在其當前緩沖區中,直到正常緩沖區管理活動將它們清除為止。從磁盤讀取的塊將被放置在為該段新指定的緩沖區池中。

由于多個緩沖區池被分配給某一個段,所以有多個段的對象可以將塊放置在多個緩沖區池中。例如,按索引組織的表在索引段和溢出段上可以有多個不同的池。

2.共享池 shared pool

大小通過 SHARED_POOL_SIZE 指定。

庫高速緩存包含語句文本、已進行語法分析的代碼和執行計劃。

數據字典高速緩存包含數據字典表中各表、列和權限的定義。

用戶全局區 (UGA) 包含會話信息(如果使用 Oracle 共享服務器)。

庫高速緩存:庫高速緩存包含共享 SQL 區和 PL/SQL 區 - 經過完全語法分析或編譯的 PL/SQL 塊和 SQL 語句的表示法。PL/SQL 塊包括:

過程和函數

程序包

觸發器

匿名

PL/SQL 塊

數據字典高速緩存:數據字典高速緩存將字典對象的定義存放在內存中。

結果高速緩存:結果高速緩存包含 SQL 查詢結果高速緩存和 PL/SQL 函數結果高速緩存。此高速緩存用于存儲 SQL 查詢或 PL/SQL 函數的結果,以加快其將來的執行速度。

用戶全局區:UGA 包含 Oracle 共享服務器的會話信息。使用共享服務器會話時,如果尚未配置大型池,則 UGA 位于共享池中。

3.大型池large pool

可配置為 SGA 中一個單獨的內存區

大小由 LARGE_POOL_SIZE 參數指定

用于在內存中為以下各項存儲數據:

--UGA

--備份和還原操作

--并行查詢消息傳送

大型池必須顯式配置。大型池的內存不是來自共享池,而是直接來自 SGA,這就增大了 Oracle 服務器在實例啟動時需要的共享內存量。

大型池用于為以下各項分配大量會話內存:

--I/O 服務器進程

--備份和還原操作

--Oracle 共享服務器進程和 Oracle XA 接口(事務處理與多個數據庫交互時使用)

由于從大型池為 Oracle 共享服務器分配會話內存,因此共享池中由于頻繁分配和取消分配大對象而產生的碎片也就很少。將大對象從共享池中分離出來,可增加共享池內存的使用效率,這意味著,它可以將更多內存用于處理新的請求,以及在需要時用于保留現有數據。

4.Java pool

可配置為 SGA 中一個單獨的內存區

大小由 JAVA_POOL_SIZE 參數指定

用于將 JVM 中特定于會話的所有 Java 代碼和數據存儲在內存中

5.重做日志緩沖區 redo buffer cache

Oracle 服務器進程將重做條目從用戶的內存空間復制到每個 DML 或 DDL 語句的重做日志緩沖區。重做條目包含重建或重做 DML 和 DDL 操作對數據庫的更改所必需的信息。它們用于數據庫恢復,需要占用緩沖區中的連續空間。

重做日志緩沖區是一個循環緩沖區;服務器進程可以用新條目覆蓋重做日志緩沖區中已寫入磁盤的條目。LGWR 進程的寫速度通常都很快,足以確保緩沖區中始終有存儲新條目的空間。LGWR 進程將重做日志緩沖區寫入磁盤上的活動聯機重做日志文件(或活動組成員)中。LGWR 進程將 LGWR 上次寫入磁盤以來進入緩沖區的所有重做條目復制到磁盤。

什么導致 LGWR 執行寫操作?

用戶進程提交事務處理時

每隔三秒,或每當重做日志緩沖區占滿三分之一時

DBWn 進程將修改的緩沖區寫入磁盤時(如果相應的重做日志數據尚未寫入磁盤)

技術沙龍MORE+

標簽錯誤:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要參加技術沙龍