一、ORACLE 物理體系結構
各部分解釋:
PGA: 私有內存區,僅供當前發起用戶使用。
用戶登錄後的信息會保存在PGA。
-
,如果內存不夠,oracle會在臨時表空間中完成
-
保存用戶信息
SGA: 包含以及一些相關的進程。
DATABASE: 數據最終存放的地方,其中一塊區域是日志存放區。數據和記錄日志又由DBWR和LGWR來寫入,待一個重做日志組滿了之後切換到下一個,等到循環了一次之後,原來排序為第一組的日志會被ARCH進程寫入歸檔日志。
假設有一條sql: select * from user where user_id='20'
Sql被解析後,。這一點必須注意,如果保存了該信息,下次調用sql的時候就不需要重新校驗,直接玩PGA裡取就行了。
-
隨後該sql會匹配一條並到達,共享池判斷此HASH值是否之前已經存在,如果存在就直接執行就OK了;如果不存在,就要檢查sql的等進行驗證並解析。解析什麼呢?就是要把select * from user where user_id='20' 這條語句,在user_id存在索引的情況下,oracle對最優COST做出選擇(),作出選擇後oracle會把改執行計劃和之前的那條HASH值放在一起。
-
帶著條件,sql下一步會到數據緩沖區中查找是否存在user_id為20的記錄。如果緩沖區有則馬上返回結果;如果無,則要到中查找,無論是否找到都要返回結果。
假設有一條sql:update user set user_name='蕭紅'
如上步驟1.2 。
-
把數據的操作記錄寫到
-
,持久化數據,把數據庫user表的user_name 字段都改為蕭紅。
當用戶提交commit的時候,數據並不會馬上刷進數據庫。數據何時會被刷入數據庫?
這與CKPT進程有關,當緩沖區的數據量達到一定的程度時,CKPT進程會被觸發,數據此時才批量刷入數據庫。當刷入數據庫前斷電了怎麼辦?REDU機制重新執行日志恢復數據。
2. ROLLBACK 執行的是UNDO