Oracle物理體系之旅

2021-08-26 05:46:08 字數 2069 閱讀 1249

1.oracle由例項和資料庫組成,在圖中用虛框標記,上半部的直角方框為例項instance,下半部的圓角方框為資料庫database。

2.共享記憶體區sga(system global area)和一系列後台程序組成的。

3. 其中sga最主要被劃分為 共享池(shared pool)、資料緩衝區(db cache)和日誌緩衝區(log buffer)三類。後台程序包括圖中的pmon、smon、lckn、reco、ckpt、dbwr、lgwr、arch等系列程序。

4.資料庫是由資料檔案、引數檔案、日誌檔案、控制檔案、歸檔日誌檔案等系列組成的,其中歸檔日誌最終可能會被轉移到新的儲存介質中,用於備份恢復使用。

pga(program global area)區,這也是一塊開闢出來的記憶體區,和sga最明顯的差別在於,pga不是共享記憶體,是私有不共享的,使用者對資料庫發起的無論查詢還是更新的任何操作,都是在pga先預處理,然後接下來才進入例項區域。由sga和系列後台程序共同完成使用者發起的請求。

pga起到的具體作用,也就是前面說的預處理,是什麼呢?主要有三點:第一,儲存使用者的連線資訊,如會話屬性、繫結變數等:第二,儲存使用者許可權等重要資訊,當使用者程序與資料庫建立會話時,系統會將這個使用者的相關許可權查詢處理,然後儲存在這個會話區內;第三,當發起的指令需要排序的時候,pga正是這個排序區,如果在記憶體中放下排序的尺寸,就在記憶體pga區內完成,如果放不下,超出的部分就在臨時表空間(也就是磁碟)完成排序。

5.使用者發起的請求經歷的順序一般如下: 1 區 => 2 區 => 3 區   或者 1 區 => 2 區

大家請看,發出一條簡單的查詢語句 select name from user where user_id = 11;之後,該sql語句從1區先做準備工作,在pga中的session會話 完成了使用者連線資訊和許可權的儲存,這樣只要這個session不斷開連線,下次系統就不用再去硬碟中讀取資料,而直接從pga記憶體區中獲取。而這種資料避免重複獲取的方法就是 將使用者發出的這條查詢sql立即匹配成一條唯一的 hash 值,接下來該sql指令進入2區進行處理,也就是sga記憶體區,第一步便是sga區的共享池的大門,準備進入。

該條sql先在sga區的共享池中查詢是否有什麼地方有儲存過這個sql指令的身份證(就是那個唯一的 hash值),如果沒有,那麼首先查詢自己的語句語法是否正確,是否有許可權,在這些都沒問題的情況下生成這條語句的身份證,唯一的 hash 值被儲存下來了。接下來開始進行解析,解析什麼呢? 比如該條  select name from user where user_id = 11 的語句,在user_id列有索引的情況下,是用索引讀高效,還是全表掃瞄更高效呢?oracle要自己解析做出選擇。

當oracle通過計算發現索引代價更低,那麼它就選用索引讀的執行計畫進入 『資料快取區』中,資料快取區開始根據id列上的索引在user表中進行查詢,但是如果沒有找不到怎麼辦呢?那就只好去database資料檔案區中查詢所需要的資源,方式必須是執行計畫中設定的索引讀,如果找到了,就帶回到資料緩衝區中,如果沒找到,也就只能空手回去了。

這就是一條最普通的sql指令的執行經歷了。

1. 使用者首次執行該條sql指令時,該指令從磁碟中獲取使用者連線資訊和相關許可權資訊許可權,並保持在pga記憶體裡。當使用者再次執行該指令時,由於session之前未被斷開重連,連線資訊和相關許可權資訊就可以在pga記憶體中直接獲取,避免了物理讀。

2. 首次執行該sql指令結束後,sga記憶體區的共享池裡已經儲存了該sql唯一指令hash值,並保留了語法語意檢查及執行計畫等相關解析動作的勞動成果,當再次執行該sql時,由於該sql指令的hash值和共享池裡儲存的相匹配了,所以之前的硬解析動作就無須再做,不僅跳過了相關語法語意檢查,對於該選取哪種執行計畫也無須考慮,直接拿來用就好了。

3. 首次執行該sql指令時,資料一般不在sga的資料快取區里(除非被別的sql讀入記憶體了),只能從磁碟中獲取,不可避免地產生了物理讀,但是由於獲取後儲存在資料緩衝區裡,再次執行就可以直接從資料緩衝區裡獲取了,完全避免了物理讀,效率高了不少。

我們可以在查詢語句前加一句 set timing on表示跟蹤該語句的執行完成時間然後進行兩次執行,會發現第一次執行時可能花費物理讀為3,第二次執行物理讀便為0了。

Oracle物理體系(二)

從一條查詢簡單的sql語句來分析。select name from table whre id 1 首先使用者執行這條語句要連線資料庫 經過pga區 私有記憶體區 這裡使用者連線資訊和使用者許可權資訊儲存,只要這裡儲存的session資訊不斷開連線,下次系統不用再去硬碟中讀取資料,直接從pga區中獲...

Oracle 物理體系結構

各部分解釋 pga 私有記憶體區,僅供當前發起使用者使用。三個作用 使用者登入後的 session資訊會儲存在pga。執行排序。假設記憶體不夠,oracle會在暫時表空間中完畢 儲存使用者 許可權資訊 sga 包括共享池,資料緩衝區,日誌緩衝區以及一些相關的程序。database 資料終於存放的地方...

Oracle物理體系結構

各部分解釋 pga 私有記憶體區,僅供當前發起使用者使用。三個作用 使用者登入後的session資訊會儲存在pga。執行排序,如果記憶體不夠,oracle會在臨時表空間中完成 儲存使用者許可權資訊 sga 包含共享池,資料緩衝區,日誌緩衝區以及一些相關的程序。database 資料最終存放的地方,其...