Oracle 物理體系

Oracle  物理體系數據庫

  • Oracle 物理體系
  • 問題
  • 參考資料

 

Oracle 物理體系緩存

 

NewImage

 

 

PGA:program global area ,私有不共享內存。session

PGA起到預處理的做用:性能

1.保存用戶的鏈接信息,如session屬性,綁定變量等;spa

2.保存用戶權限等重要信息;日誌

3.須要排序時,PGA就是排序區;blog

 

SGA:system global area,共享內存。排序

SGA由下組成:進程

1.共享池ip

2.數據緩衝區

3.日誌緩衝區

 

後臺進程:

1.PMON:process monitor 進程監視器

2.SMON:system monitor 系統監視器

3.DBWR:database writer 將數據緩衝區的數據刷到磁盤數據文件中

4.LGWR:log writer 將日誌緩衝區的數據刷到磁盤日誌文件中

5.CKPT:checkoutPoint 觸發DBWR,批量將數據緩衝區的數據刷到磁盤中。並不是是commit操做觸發DBWR,由於批量操做比單次操做效率高。

6.ARCH 歸檔日誌文件

……

 

數據庫:

1.數據文件

2.參數文件

3.控制文件

4.日誌文件

 

SGA+後臺進程 = 數據庫實例;

Oracle服務 = 實例(內存+進程)+ 數據庫(磁盤文件);

在多實例數據庫環境下,實例和數據庫是多對一的關係,可是在大部分狀況下是一對一。

 

SQL語句在物理體系中的流轉過程:

1.SQL進入PGA進行預處理。保存鏈接信息,權限信息。若是有排序指令,則進行排序,PGA就是排序區。若內存不夠,超出的部分須要到臨時表空間中進行排序,即在磁盤中完成排序。只要session不斷開鏈接,下次系統不須要再到磁盤中讀取相關的鏈接信息和權限信息,直接從PGA內存空間中獲取。

2.SQL匹配一條惟一的HASH值,進入SGA進行處理。先在共享池中查詢是否有存儲該HASH值,如有,則跳過語法語義檢查、權限檢查、解析,直接得到執行計劃。若無,則先進行語法語義檢查,權限檢查,沒有問題的話生成該條SQL的惟一HASH值並保存下來。而後進行解析,解析該SQL執行計劃。完成解析後將執行計劃保存起來,並和HASH值對應起來。

3.SQL進入數據緩衝區,檢查是否有須要的數據,若無,則按照執行計劃到磁盤數據庫文件中查找,找到了就帶着數據返回到數據緩衝區。

4若是SQL語句是查詢語句,則到第三步,即完成了SQL語句。若是是更新語句,則要遵循 「日誌現行」 「凡事有記錄」的原則,記錄日誌,而且要保存數據的前鏡像。而後才進行更新操做。

 

Tips:

1.由於Oracle有緩存的功能,若是有緩存SQL相應的鏈接信息,權限信息,執行計劃,數據等,不用去磁盤上讀取,能夠減小物理讀。因此執行相同的SQL,第二次比第一次快。

2.若是PGA內存分配過小,排序量太大,部分排序須要到磁盤上進行,IO操做增多,會下降性能。

3.commit不能觸發DBWR,而是CKPT觸發,是由於批量操做效率優於單次操做。

4.保存數據前鏡像,能夠實現回滾和數據的一致讀。

 

問題

1.Oracle爲何要有歸檔日誌文件的操做,爲何不直接將日誌緩衝區中的日誌信息保存到歸檔文件中。

2.沒有commit,DBWR也會將數據刷到磁盤數據庫文件中?

 

參考資料

「收穫,不止Oracle」

相關文章
相關標籤/搜索