day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)
一? ? 概念:
1、 實(shí)例/instance: 后臺(tái)進(jìn)程+共享內(nèi)存 用于管理和控制數(shù)據(jù)庫(kù)
?數(shù)據(jù)庫(kù)/database: 物理文件的集合 為實(shí)例提供數(shù)據(jù),如數(shù)據(jù)文件,控制文件,參數(shù)文件,日志文件等
?數(shù)據(jù)庫(kù)服務(wù)器/database server: 軟件+實(shí)例+數(shù)據(jù)庫(kù)
oracle數(shù)據(jù)庫(kù)環(huán)境有以下兩部分:
?oracle軟件,存放在服務(wù)器本地硬盤上
?oracle數(shù)據(jù)庫(kù),存放在共享存儲(chǔ)上
rac? (生產(chǎn)環(huán)境模式)
?
2、實(shí)例
?oracle數(shù)據(jù)庫(kù)啟動(dòng)后首先在內(nèi)存中劃分一片空間,并啟動(dòng)一些進(jìn)程,而內(nèi)存和進(jìn)程統(tǒng)稱oracle數(shù)據(jù)庫(kù)實(shí)例,數(shù)據(jù)庫(kù)關(guān)閉后,實(shí)例就被關(guān)閉
?一個(gè)數(shù)據(jù)庫(kù)可以對(duì)應(yīng)多個(gè)實(shí)例,如兩個(gè),四個(gè)等,一般沒有單數(shù)的。用戶可以通過連接到的實(shí)例訪問數(shù)據(jù)庫(kù),可以實(shí)現(xiàn)負(fù)載均衡,提高并發(fā)等的效果,這種結(jié)構(gòu)叫做oracle的RAC技術(shù)。
??
#查看oracle實(shí)例
#查看相關(guān)內(nèi)存
[oracle@ocp003 ~]$ ipcs#啟動(dòng)數(shù)據(jù)庫(kù)
SQL> startup;
然后再次查看進(jìn)程和內(nèi)存相關(guān)的信息,即可發(fā)現(xiàn)進(jìn)程和內(nèi)存中有了oracle相關(guān)的信息
oracle啟動(dòng)后在內(nèi)存中獨(dú)享一塊內(nèi)存區(qū)域。?
3、進(jìn)程間通信有如下的目的:
1、數(shù)據(jù)傳輸,一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程,發(fā)送的數(shù)據(jù)量在一個(gè)字節(jié)到幾M之間;
2、共享數(shù)據(jù),多個(gè)進(jìn)程想要操作共享數(shù)據(jù),一個(gè)進(jìn)程對(duì)數(shù)據(jù)的修改,其他進(jìn)程應(yīng)該立刻看到;
3、通知事件,一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它們發(fā)生了某件事情;
4、資源共享,多個(gè)進(jìn)程之間共享同樣的資源。為了做到這一點(diǎn),需要內(nèi)核提供鎖和同步機(jī)制;
5、進(jìn)程控制,有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常,并能夠及時(shí)知道它的狀態(tài)改變。
其中:
第一列就是共享內(nèi)存的key;
第二列是共享內(nèi)存的編號(hào)shmid;
第三列就是創(chuàng)建的用戶owner;
第四列就是權(quán)限perms;
第五列為創(chuàng)建的大小bytes;
第六列為連接到共享內(nèi)存的進(jìn)程數(shù)nattach;
第七列是共享內(nèi)存的狀態(tài)status。
?? ?其中顯示“dest”表示共享內(nèi)存段已經(jīng)被刪除,但是還有用戶在使用它,
?? ?當(dāng)該段內(nèi)存的mode字段設(shè)置為SHM_DEST時(shí)就會(huì)顯示“dest”。
連接/connection:
?連接是從客戶端到Oracle 實(shí)例的一條物理路徑。連接可以在網(wǎng)絡(luò)上建立,或者通過IPC 機(jī)制建立。通常會(huì)在客戶進(jìn)程與一個(gè)專用服務(wù)器或一個(gè)調(diào)度器之間建立連接。
? ??
會(huì)話/session:
?會(huì)話是實(shí)例中存在的一個(gè)邏輯實(shí)體。這就是你的會(huì)話狀態(tài)(session state),也就是表示特定會(huì)話的一組內(nèi)存
? ? 中的數(shù)據(jù)結(jié)構(gòu).提到"數(shù)據(jù)庫(kù)連接"時(shí),大多數(shù)人首先想到的就是“會(huì)話”。在服務(wù)器中的會(huì)話上執(zhí)行SQL、提交事務(wù)和運(yùn)行存儲(chǔ)過程。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?二? 體系結(jié)構(gòu)
oracle的體系結(jié)構(gòu)主要分三類
?內(nèi)存結(jié)構(gòu)
?進(jìn)程結(jié)構(gòu)
?存儲(chǔ)結(jié)構(gòu)
概覽:
一 :內(nèi)存結(jié)構(gòu)
?? ?SGA: 系統(tǒng)/共享全局區(qū)
?? ??? ?Shared Pool/共享池
?? ??? ?Database Buffer Cache/數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存
?? ??? ?Redo Log Buffer/重做日志緩沖區(qū)
?? ??? ?Large Pool/大池
?? ??? ?Java Pool/JAVA池
?? ??? ?Streams Pool/流池
?? ??? ?...
?? ?PGA: 進(jìn)程全局區(qū)
?? ?UGA: 用戶全局區(qū)
1、共享池
?? ?庫(kù)高速緩存
?? ??? ?存儲(chǔ)最近使用的SQL和PL/sql語(yǔ)句,使用LRU(least recently used)算法
?? ?
?? ?數(shù)據(jù)字典高速緩存
?? ??? ?緩存數(shù)據(jù)字典相關(guān)的數(shù)據(jù)
SQL> show parameter shared_pool_size;
SQL> show parameter shared_pool_size;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ shared_pool_size big integer 02、數(shù)據(jù)庫(kù)高速緩沖區(qū)
?? ?存儲(chǔ)最近從數(shù)據(jù)文件讀入的數(shù)據(jù)塊信息或用戶更改后需要寫回?cái)?shù)據(jù)庫(kù)的數(shù)據(jù)信息,沒有提交給數(shù)據(jù)庫(kù)的更改后的數(shù)據(jù)為臟數(shù)據(jù)。
SQL> show parameter db_block_size;
SQL> show parameter db_block_size;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_size integer 8192SQL> show parameter db_block_buffers;
SQL> show parameter db_block_buffers;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_buffers integer 0SQL> show parameter db_cache_size;
SQL> show parameter db_cache_size;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_cache_size big integer 0
修改sga大小
SQL> alter system set db_cache_size = 5000M;
SQL> show parameter db_cache_size;
SQL> alter system set db_cache_size = 200m;系統(tǒng)已更改。SQL> show parameter db_cache_size;NAME TYPE VALUE ------------------------------------ --------------------------------- -------------------- db_cache_size big integer 208M?
3、重做日志緩沖區(qū)
?? ?數(shù)據(jù)庫(kù)發(fā)生修改而變化的數(shù)據(jù)在進(jìn)入數(shù)據(jù)庫(kù)高速緩沖區(qū)之前先進(jìn)入重做日志緩沖區(qū),變化之前的數(shù)據(jù)庫(kù)放入重做日志緩沖區(qū)。
4、大池
?? ?可選內(nèi)存區(qū),在大規(guī)模輸入輸出及備份過程中需要大池作為緩存空間
?? ?該參數(shù)為動(dòng)態(tài)參數(shù),可修改
5、java池
?? ?可選內(nèi)存空間,在安裝java或使用java程序時(shí),必須設(shè)置。
6、流池
?
PGA 進(jìn)程全局區(qū)
?? ?由操作系統(tǒng)本地分配,獨(dú)立于SGA.
?? ?在專有服務(wù)器中包括如下組件:
?? ?
?? ?排序區(qū):?? ?對(duì)某些SQL語(yǔ)句執(zhí)行結(jié)果進(jìn)行排序
?? ?會(huì)話信息:?? ?包含本次會(huì)話的用戶權(quán)限和性能統(tǒng)計(jì)信息
?? ?游標(biāo)狀態(tài):?? ?標(biāo)明當(dāng)前會(huì)話執(zhí)行的SQL語(yǔ)句的處理階段
?? ?堆棧區(qū):?? ?包含其他會(huì)話變量
?? ?
?? ?注意:在共享服務(wù)器配置中,多個(gè)用戶共享一個(gè)服務(wù)器進(jìn)程,會(huì)話信息的內(nèi)存區(qū)可能在SGA中分配,如果創(chuàng)建了大池,就在大池中
?? ?否則就在共享池中。
?? ?
UGA 用戶全局區(qū)
?? ?共享服務(wù)器模式,使用UGA來表示用戶的會(huì)話狀態(tài),這部分內(nèi)存會(huì)話總可以訪問,UGA存儲(chǔ)在每個(gè)共享服務(wù)器都可以訪問的SGA中
?? ?
PGA內(nèi)存管理
?
二:服務(wù)器進(jìn)程和用戶進(jìn)程
1、后臺(tái)進(jìn)程
?DBWn: 將buffer cache中的臟數(shù)據(jù)寫入到dbf中,只寫不讀。
? 執(zhí)行時(shí)間點(diǎn):
? ?沒有任何可用緩沖區(qū)
? ?臟緩沖區(qū)過多
? ?三秒超時(shí)
? ?遇到檢查點(diǎn)
CKPT: 周期性觸發(fā),更新檢查點(diǎn)信息,更新到控制文件和每個(gè)數(shù)據(jù)文件頭部。
SMON: 主內(nèi),監(jiān)控實(shí)例內(nèi)部,實(shí)例恢復(fù),如整理碎片,清理不使用的臨時(shí)段。
PMON: 主外,監(jiān)控用戶連接
?在用戶進(jìn)程失敗時(shí)執(zhí)行進(jìn)程恢復(fù)
? 清除數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存
? 釋放該用戶進(jìn)程使用的資源
?監(jiān)視會(huì)話是否發(fā)生空閑會(huì)話超時(shí)
?將數(shù)據(jù)庫(kù)服務(wù)動(dòng)態(tài)注冊(cè)到監(jiān)聽程序
ARCn: 將寫滿后的redo log寫入到歸檔日志中。
? 可以收集事物處理重做數(shù)據(jù),并將該數(shù)據(jù)傳輸?shù)絺溆媚繕?biāo)位置
MMON: 自我監(jiān)視和自我管理支持進(jìn)程
MMNL: MMON輔助進(jìn)程,
ADDM: 自動(dòng)數(shù)據(jù)庫(kù)診斷監(jiān)視器
MMAN: 自動(dòng)內(nèi)存管理
LREG: 監(jiān)聽注冊(cè)進(jìn)程
2、前臺(tái)進(jìn)程
?服務(wù)器進(jìn)程
?應(yīng)用程序服務(wù)器產(chǎn)生到數(shù)據(jù)庫(kù)服務(wù)器的連接,多個(gè)連接形成一個(gè)連接池。
?
#模擬應(yīng)用程序服務(wù)器到數(shù)據(jù)庫(kù)服務(wù)器的連接
sqlplus / as sysdba
此時(shí),加上之前的那個(gè)連接總共兩個(gè)連接。
?
?用戶的信息到達(dá)應(yīng)用程序服務(wù)器后,由應(yīng)用程序服務(wù)器隨機(jī)選擇連接到達(dá)數(shù)據(jù)庫(kù)服務(wù)器,執(zhí)行完成后,把執(zhí)行結(jié)果返回給用戶。
?
用戶進(jìn)程
?用戶客戶端產(chǎn)生的進(jìn)程,我們不關(guān)心。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day05:SQL_DCL ,权限控制
- 下一篇: day06:02oracle体系结构_存