偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解Oracle實例內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)

存儲 存儲軟件
由于內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)關(guān)系較緊密,進程會作用到對應(yīng)的內(nèi)存區(qū)域,比如數(shù)據(jù)庫寫入器作用到數(shù)據(jù)庫緩沖區(qū)緩存中,日志寫入器會作用到日志緩沖區(qū),所以在這里我把內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)會相互配合地進行描述~

由于內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)關(guān)系較緊密,進程會作用到對應(yīng)的內(nèi)存區(qū)域,比如數(shù)據(jù)庫寫入器作用到數(shù)據(jù)庫緩沖區(qū)緩存中,日志寫入器會作用到日志緩沖區(qū),所以在這里我把內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)會相互配合地進行描述~

[[245915]]

Oracle實例內(nèi)存結(jié)構(gòu)的組成結(jié)構(gòu):

 

 

詳解oracle實例內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)

 

 

實例內(nèi)存結(jié)構(gòu)

oracle實例內(nèi)存結(jié)構(gòu)由兩部分組成SGA(系統(tǒng)全局區(qū))和PGA(用戶全局區(qū))組成,SGA是一塊共享的內(nèi)存區(qū)域,也是***的一塊內(nèi)存區(qū)域;PGA則是用戶會話專有的內(nèi)存區(qū)域,每個會話在服務(wù)器端都有一塊專有的內(nèi)存區(qū)域就是PGA。

SGA組成

 

 

詳解oracle實例內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)

 

 

篇幅有限,下面對數(shù)據(jù)庫緩沖區(qū)、日志緩沖區(qū)、共享池做主要介紹

數(shù)據(jù)庫緩沖區(qū)緩存

 

 

詳解oracle實例內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)

 

 

通過指定 DB_CACHE_SIZE 參數(shù)的值,可以配置緩沖區(qū)高速緩存。緩沖區(qū)高速緩存可存放數(shù)據(jù)文件中塊大小為 DB_BLOCK_SIZE 的數(shù)據(jù)塊的副本。緩沖區(qū)高速緩存是 SGA 的一部分;因此所有用戶都可以共享這些塊。 緩沖區(qū)緩存 是Oracle用來執(zhí)行sql 的工作區(qū)域,在更新數(shù)據(jù)時,用戶會話不會直接去更新磁盤上的數(shù)據(jù),想想,如果允許這么做,那么頻繁的磁盤IO對于系統(tǒng)性能的影響是毀滅性的。所以,實際的處理流程是這樣的:

select ename,salary from emp where name='阿里巴巴';

首先,當用戶提交了該條sql語句,由對應(yīng)的用戶進程(比如我們常用的sql developer)將其發(fā)送給服務(wù)器,監(jiān)聽程序監(jiān)聽到該條請求,會為其建立一個對應(yīng)的服務(wù)器進程,然后服務(wù)器進程會先掃描緩沖區(qū)中有沒有包含關(guān)鍵行("阿里巴巴")的數(shù)據(jù)塊,如果有,這就算一次緩存***了,然后相關(guān)行會傳輸?shù)絇GA進行進一步處理,最終經(jīng)過格式化后展示給用戶;如果沒有***,那么服務(wù)器進程會首先將對應(yīng)行復(fù)制到緩沖區(qū)內(nèi),然后再返回給客戶端。

DML(insert,update,delete)操作同理,加入用戶發(fā)送一條update語句,服務(wù)進程依然先去掃描緩沖區(qū),如果緩存***,則直接更新,數(shù)據(jù)變臟;如果沒有***,由服務(wù)器進程將對應(yīng)數(shù)據(jù)塊先從磁盤上復(fù)制到緩沖區(qū)內(nèi),再進行更新操作。

臟緩沖區(qū)

如果緩沖區(qū)存儲的塊和磁盤上的塊不一致,該緩沖區(qū)就叫做“臟緩沖區(qū)”,臟緩沖區(qū)最終會由數(shù)據(jù)庫寫入器(DBWn)寫入到磁盤中去。

數(shù)據(jù)庫寫入器(DBWn)

數(shù)據(jù)庫寫入器是Oracle的一個后臺進程,所謂后臺進程是相對于前臺進程(服務(wù)器進程)來講的。DBWn的"n"意味著一個實例是可以有多個數(shù)據(jù)庫寫入器的。

作用:簡而言之,DBWn的作用就是將變臟了的緩沖區(qū)從數(shù)據(jù)庫緩沖區(qū)緩存中寫入到磁盤中的數(shù)據(jù)文件中去。

數(shù)據(jù)庫緩沖區(qū)緩存這塊內(nèi)存區(qū)域和數(shù)據(jù)庫寫入器這塊是比較重要的概念,別的數(shù)據(jù)庫產(chǎn)品像mySql也都有對應(yīng)的實現(xiàn),只不過叫法不一樣罷了。了解這塊的時候,要時刻意識到會話是不會直接更新磁盤數(shù)據(jù)的,會話的更新,插入,刪除包括查詢等都是先作用到緩沖區(qū)上,隨后,DBWn會將其中的臟緩沖區(qū)轉(zhuǎn)儲到磁盤上去。

DBWn什么時候?qū)懭?

DBWn是個比較懶的進程,它會盡可能少的進行寫入,在以下四種情況它會執(zhí)行寫入:

a.沒有任何可用緩沖區(qū)(不得不寫啊)

b.臟緩沖區(qū)過多

c.3秒超時(最晚3秒會執(zhí)行一次寫入)

d.遇到檢查點,即checkPoint(檢查點),檢查點是個Oracle事件,遇到檢查點,DBWn會執(zhí)行寫入。比如實例有序關(guān)閉的時候會有檢查點,DBWn會將所有臟緩沖區(qū)寫入到磁盤上去的,這很容易理解,要保持數(shù)據(jù)文件的一致性。

日志緩沖區(qū)

 

 

詳解oracle實例內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)

 

 

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

當我們執(zhí)行一些DML操作(insert,update,delete),數(shù)據(jù)塊發(fā)生改變了,產(chǎn)生的變更向量則會寫入到重做日志文件中去。有了這些記錄,當系統(tǒng)由于斷電等因素突然宕掉,數(shù)據(jù)庫緩沖區(qū)緩存內(nèi)的大量臟數(shù)據(jù)還沒來得及寫入到數(shù)據(jù)文件中去,在重新啟動的時候,會有一個實例恢復(fù)的過程,在此過程中就應(yīng)用了重做日志記錄來使數(shù)據(jù)保持一致;或者數(shù)據(jù)庫遭遇了物理損壞,比如磁盤損壞了,此時可以通過Oracle的備份恢復(fù)工具(如RMAN)進行數(shù)據(jù)恢復(fù),原理就是 提取備份集-->應(yīng)用重做日志文件中的變更記錄。

日志緩沖區(qū)

日志緩沖區(qū)是一塊比較小的內(nèi)存區(qū)域,它是用來短期存儲將寫入到磁盤中的重做日志文件中的變更向量的。

日志緩沖區(qū)存在的意義依然是為了減少磁盤IO,減少用戶的等待時間,試想下,如果每一次用戶DML操作都要進行等待重做記錄被寫入到磁盤中去,體驗會有多差勁。

日志寫入器(LGWR)

顧名思義,日志寫入器(LGWR)就是把日志緩沖區(qū)內(nèi)的內(nèi)容寫入到磁盤的重做日志文件中去,相比數(shù)據(jù)庫寫入器(DBWn),日志寫入器就勤快多了。

以下三種情況LGWR會執(zhí)行寫入:

a.commit時寫入

前面提過,DBWn的寫入和commit沒有任何關(guān)系,如果commit時數(shù)據(jù)庫沒有任何記錄,那數(shù)據(jù)就真的丟失了,Oracle 的重做日志就是為了保證數(shù)據(jù)安全而存在的,commit時,會話會先掛起,等待LGWR將這些記錄寫入到磁盤上的重做日志文件中,才會通知用戶提交完成。所以,LGWR在commit時執(zhí)行寫入,是為了確保事務(wù)永不丟失。

b.日志緩沖區(qū)的占用率達到1/3。

c.DBWn要寫入臟緩沖區(qū)前

共享池

 

 

詳解oracle實例內(nèi)存結(jié)構(gòu)和進程結(jié)構(gòu)

 

 

共享池是最復(fù)雜的SGA結(jié)構(gòu),大小通過 SHARED_POOL_SIZE 指定。

常見的幾個共享池組件:

1.庫緩存:庫緩存這塊內(nèi)存區(qū)域會按已分析的格式緩存最近執(zhí)行的代碼,這樣,同樣的sql代碼多次執(zhí)行的時候,就不用重復(fù)地去進行代碼分析,可以很大程度上提高系統(tǒng)性能。

2.數(shù)據(jù)字典緩存:存儲oracle中的對象定義(表,視圖,同義詞,索引等數(shù)據(jù)庫對象),這樣在分析sql代碼的時候,就不用頻繁去磁盤上讀取數(shù)據(jù)字典中的數(shù)據(jù)了

3.PL/SQL區(qū):緩存存儲過程、函數(shù)、觸發(fā)器等數(shù)據(jù)庫對象,這些對象都存儲在數(shù)據(jù)字典中,通過將其緩存到內(nèi)存中,可以在重復(fù)調(diào)用的時候提高性能。

作為DBA,以上內(nèi)容是必須掌握的,如果大家有興趣的話可以多了解下這方面內(nèi)容~

責任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-01-10 17:41:31

內(nèi)存結(jié)構(gòu)PostgreSQL

2010-11-15 12:02:24

Oracle進程結(jié)構(gòu)

2010-10-28 14:29:39

Oracle內(nèi)存結(jié)構(gòu)

2010-11-15 11:58:02

Oracle物理結(jié)構(gòu)

2010-03-31 14:36:50

Oracle進程結(jié)構(gòu)

2010-09-27 13:48:41

JVM內(nèi)存結(jié)構(gòu)

2010-04-15 13:10:09

Oracle系統(tǒng)結(jié)構(gòu)

2010-04-08 09:00:29

Oracle內(nèi)存結(jié)構(gòu)

2018-10-15 10:13:00

網(wǎng)絡(luò)拓撲結(jié)構(gòu)

2010-04-21 16:55:06

Oracle物理存儲結(jié)

2011-03-29 10:47:49

ORACLE數(shù)據(jù)庫

2010-03-31 14:20:23

Oracle內(nèi)存結(jié)構(gòu)

2010-04-01 16:54:06

Oracle體系結(jié)構(gòu)

2010-04-21 16:07:04

Oracle邏輯存儲結(jié)

2019-11-04 12:51:48

mysql數(shù)據(jù)庫nnodb

2011-05-19 13:49:07

Oracle物理結(jié)構(gòu)

2010-04-19 10:23:05

Oracle內(nèi)存結(jié)構(gòu)

2010-04-02 16:53:34

Oracle內(nèi)存結(jié)構(gòu)

2024-01-02 10:54:07

Rust結(jié)構(gòu)體元組

2010-04-14 11:35:57

Oracle內(nèi)存結(jié)構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號