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