溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-07-10 06:07:53 來(lái)源:網(wǎng)絡(luò) 閱讀:346 作者:初心WHQ 欄目:關(guān)系型數(shù)據(jù)庫(kù)

安裝oracle軟件----創(chuàng)建數(shù)據(jù)庫(kù)----在數(shù)據(jù)庫(kù)中創(chuàng)建表----表里存儲(chǔ)信息---這些表文件需要存儲(chǔ)在物理硬盤上面。

假如有一個(gè)用戶(這個(gè)用戶可以是遠(yuǎn)程用戶,也可以是本地的,也可以是一個(gè)應(yīng)用程序)連接到oracle數(shù)據(jù)庫(kù)上面,用戶是不能直接連接在硬盤上存儲(chǔ)的數(shù)據(jù)文件,所以在oracle中要運(yùn)行一個(gè)實(shí)例,實(shí)例并不是保存在硬盤上面的,實(shí)例是內(nèi)存的一部分,而庫(kù)和表文件是存放在硬盤上面的,用戶不能直接訪問(wèn)庫(kù)里面的數(shù)據(jù),只能訪問(wèn)實(shí)例,實(shí)例是一個(gè)特殊的內(nèi)存塊,只有實(shí)例能和數(shù)據(jù)庫(kù)直接通信,在咱們的實(shí)驗(yàn)環(huán)境中實(shí)例和數(shù)據(jù)庫(kù)是在同一臺(tái)機(jī)器上,我們稱之為單實(shí)例環(huán)境,對(duì)于用戶而言所有的操作都是在實(shí)例中完成的,oracle為實(shí)例劃分了一個(gè)內(nèi)存塊,這個(gè)內(nèi)存塊我們稱之為SGA,其實(shí)oracle實(shí)例啟動(dòng)的時(shí)候,將會(huì)分配一個(gè)SGA系統(tǒng)全局區(qū)并啟動(dòng)一些oracle的后臺(tái)進(jìn)程(守護(hù)進(jìn)程)。

SGA核心組件介紹:

在oracle中內(nèi)存=SGA+PGA

一個(gè)實(shí)例只能有一個(gè)SGA,所有的服務(wù)器進(jìn)程和后臺(tái)進(jìn)程都共享一個(gè)SGA

PGA:

我們先看一下一個(gè)select語(yǔ)句是如何被執(zhí)行的?

如果hr用戶寫了一個(gè)select * from scott.emp;

第一步:先做編譯,編譯包含了語(yǔ)法的檢查和語(yǔ)義的檢查。

第二步:如果編譯沒(méi)有問(wèn)題會(huì)進(jìn)入shared pool(共享池 )中,而shared pool 是由library cache和data dictionary cache(數(shù)據(jù)字典緩存)組成。Sql語(yǔ)句第一時(shí)間會(huì)進(jìn)入librarycache中,即library cache中會(huì)存放被編譯過(guò)的正確的sql語(yǔ)句,僅僅是sql語(yǔ)句而已。library cache中沒(méi)有緩存的sql語(yǔ)句需要進(jìn)行硬解析(即需要耗費(fèi)設(shè)備的I/0資源從硬盤讀?。?。假設(shè)library cache中有這個(gè)sql語(yǔ)句,就不需要做硬解析,接著會(huì)查 data dictionary cache。data dictionary cache中緩存了權(quán)限和對(duì)象數(shù)據(jù)及屬性,所有data dictionary cache檢查hr用戶是否對(duì)scott.emp表是否具有訪問(wèn)權(quán)限,如果有權(quán)限繼續(xù)往下執(zhí)行,如果沒(méi)有權(quán)限,直接給hr用戶返回一個(gè)結(jié)果。如果一條語(yǔ)句從來(lái)都沒(méi)有被執(zhí)行過(guò),這條語(yǔ)句首先被緩存在share pool中的library cache中,下一次被執(zhí)行的時(shí)候直接從share pool中取sql語(yǔ)句。存放sql語(yǔ)句也需要占用空間,share pool的空間也是有限的,為了防止share pool空間不夠用,采用先進(jìn)先出的規(guī)則即后執(zhí)行的sql語(yǔ)句會(huì)覆蓋先執(zhí)行的sql語(yǔ)句來(lái)釋放空間,當(dāng)然share pool的空間越大越好。

我們通過(guò)企業(yè)管理器來(lái)查看share pool的相關(guān)信息
Oracle 11g R2 體系結(jié)構(gòu)
Oracle 11g R2 體系結(jié)構(gòu)
在sql plus中可以用以下方式查看,圖中“0”表示自動(dòng)化管理
Oracle 11g R2 體系結(jié)構(gòu)
可以從v$sgainfo中查看shared pool size

SQL> select name,bytes/1024/1024||'MB' from v$sgainfo;

Shared Pool Size

256MB

Large Pool Size

16MB

Java Pool Size

16MB

第三步:data buffer cache現(xiàn)在hr用戶可以訪問(wèn)scott.emp表了,databuffer cache的作用就是從磁盤或存儲(chǔ)中將數(shù)據(jù)塊調(diào)入內(nèi)存,緩存在buffer cache中。

舉例:

用戶第一次訪問(wèn)scott.emp的內(nèi)容

SQL> set timing on

SQL> select * from scott.emp;第一次執(zhí)行sql語(yǔ)句

已選擇14行。

已用時(shí)間: 00: 00: 00.05

SQL> /再次執(zhí)行上一條命令所用的時(shí)間為00: 00: 00.00

已選擇14行。

已用時(shí)間: 00: 00: 00.00

總結(jié):buffer cache緩存數(shù)據(jù)本身,library cache緩存sql語(yǔ)句本身。

可以通過(guò)show parameter db_cache_size查看buffer cache的大小
Oracle 11g R2 體系結(jié)構(gòu)
第四步:redo log buffer<重做日志緩沖區(qū)>當(dāng)用戶執(zhí)行insert,update,delete,create,alter等操作后,數(shù)據(jù)發(fā)生了變化,這些變化了的數(shù)據(jù)寫入數(shù)據(jù)緩沖區(qū)(buffer cache)之前,先寫入重做日志緩沖區(qū),同時(shí)變化之前的數(shù)據(jù)也放入重做日志緩存中,這樣做,是為了保證在數(shù)據(jù)恢復(fù)時(shí)oracle就知道哪些事務(wù)需要提交,哪些事務(wù)需要撤回。

如果對(duì)此文有什么問(wèn)題的話,請(qǐng)加下面微信一起探討
Oracle 11g R2 體系結(jié)構(gòu)

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI