標籤:Oracle 體繫結構 PGA SGA
寫本篇文章主要受兩本書的啟發寫一些個人心得筆記,分享知識,並把書籍推薦給大家閱讀1、《收穫,不止Oracle》 2、《Oracle核心技術》 不涉及編程,設計體系架構思路,如果有編程書更是好!還有官方文檔一定要讀,英語水平差看翻譯也要讀一遍,真正權威來源於官方。我感覺瞭解Oracle Internal時候,儘可能把自己成為設計者的角度去看待問題,如果你能用C寫成底層過程更是了得。
我們一起來說一說,那麼資料庫分為Instance與Database,我們知道使用者訪問必須通過執行個體才能訪問資料庫,這是硬規定。執行個體與資料庫中都是什麼,使用者訪問還要經過PGA,這又是什麼,下面我們一起來來看一看
PGA,當我們的通過Socket請求(其實也分為很多種處理,不想細說)我們的指令會先到PGA地區是Program Global Area,這個地區有會儲存會話屬性,存綁定變數等也就是我們使用者串連資訊,然後使用者進程與資料庫建立會話時候,系統會將使用者相關許可權查出來,儲存在這個地區,PGA裡面有進程叫Server process來完成這些工作,而且是私人不是共用!
SGA,System Global Area,共用記憶體地區,Instance 其實就是 SGA+process(後台),SGA裡面板塊有很多,我認為相對來說shared_pool,database buffer cache,Redo log buffer相對重要,因為每一個組件都很重要,這裡只相對概念,SGA裡面也包含Java pool,Large_pool等,我們那個簡單的查詢語句來說select * from t來說說他怎樣過程。
Shared_pool共用池,這個其實作用很大,當我們從PGA訪問到執行個體時候先到SGA中,那麼在PGA會產生唯一標識HASH,這時候會在SGA的共用池中尋找著唯一標識,如果找到HASH會從對應資料緩衝緩衝中找到對應的values,把values直接返回使用者,如果找不到就比較麻煩,他會顯示判斷文法是否錯誤,許可權是否正確,解析用什麼樣的方式去查詢,會先預估成本COST,比較成本選擇較低的方式去查詢,那麼當著動作完成後就會產生唯一HASH值儲存到共用池中,然後去資料緩衝緩衝區中查詢。
資料緩衝緩衝裡面會尋找我們想要的資料,SGA是在記憶體中開闢的空間,這時候沒有我們只能去Database中來實現完成,查詢磁碟中的資料檔案找到就好找不到也好,都必須帶著結果返回給使用者,那麼一條查詢語句粗略的算是完成。
再說一說執行個體裡面的進程,我們在Linux下,ps aux | grep oracle就會發現很多後台進程,我說幾個裡面主要的進程和功能,PMON,SMON,LCKn,RECO,CKPT,ARCH,包括DBWR,LGWR,我們理解這些詞語英語英語!很重要,基本就是英語翻譯過來的字面意思,下面我們都去說一說,知道怎樣工作,負責什麼工作,重點說一下Redo log與ARCH日誌功能!
草稿2個多月了 Oracle體系告一段落 以後有空會繼續更新研究
大世界Oracle體系(未完成)