oracle 11g 體系結構研究

ywxj_001發表於2016-11-06

Oracle體系結構


Oracle在線上事務處理上比較強

記憶體IO能力200倍於普通磁碟

select * from emp where empno=:1   繫結變數    透過hash value

有索引走索引,無索引走全表掃描

執行計劃會計算總成本,選出執行計劃最低的

Shared poollibrary cache

1)語句找出 從library cache找出最優的執行計劃,找出這條語句

2)物件失效 原先表上有100條資料,表上的資料沒有變化,繼續執行全表掃描

         如果表上的資料增加到了100萬條,那麼執行計劃會改變

3)併發控制 有些票務系統會用到

Library cache中快取了數百萬條記錄,如何從中找出這條語句的執行計劃,11g裡面的SQL語句區分大小寫,hash每個字母轉化為ASCII碼,進行hash運算

hash value定義SQL語句

 

資料表用lock控制併發

1)計算hash 

3SQL都是相同一個emp表,但是歸屬於不同的schema,那麼就會出現3個是一樣的hash value,但是確是不同的執行計劃。

上圖的橫線就是軟解析的整個等待過程,產生的等待事件是latch library cache

從上到下依次是父遊標和子游標

增加mutex鎖,為了縮短連結串列長度,提高檢索速度

找到父遊標的mutex,找到父遊標獲取mutex,再找到執行計劃。

出現mutex等待事件,說明SQL語句版本過多

硬解析

先獲取latch,發現沒有,釋放latch,再申請latch shared pool,獲得chunk記憶體


語法解析 語義解析 表上資料分佈  有無索引

 

硬解析多,會有等待事件:

latch library cache

latch shared pool

 

資料字典cachedata dictionary cache主要用來做硬解析時候用

還有一個叫軟軟解析,在library cache執行完軟解析後,會有一個指標直接指向heap6,就是代表軟軟解析

UGA 放在PGA

session cached cursor

library cache heap6 指標指向heap6

可以參考dsi文件


讀不阻塞寫,但寫會阻塞讀

B塊正在寫的時候,如果A塊要去讀B塊的內容,是無法讀的,需要等到

產生了buffer busy waits的等待事件,DML語句產生等待

 

檢查點事件

checkpoint

資料庫操作在記憶體中完成,把資料檔案讀到記憶體中去,30005000


理想情況下,要在斷電前把5000寫入磁碟,保證資料不丟失

5000;執行commit,代表事務結束

只要commit就把資料寫入磁碟,同步寫,效率低,效能差。8k一個資料塊

但是資料庫同步寫入磁碟速度太慢。

現在是如果系統重啟完了,資料庫在啟動時候把資料重新構造出來,資料塊用非同步來寫

只寫日誌,日誌先行,commit,先把日誌寫入磁碟,資料塊緩行。



把上面的1234DBWr寫入下面的磁碟內

DBWr負責寫髒塊,3秒一寫,充滿1/3空間一寫,DBWr1234寫回磁碟,DBWr去把原先記憶體中移除掉已經寫回到磁碟裡面的1234日誌

checkpoint程式監控資料檔案同步


把當前狀態寫入控制檔案,剛好把日誌4寫入了磁碟,如果例項掛了,就從日誌4開始恢復



Database buffer cache記憶體空間總要用完

3秒內BCH就會增加1

會把BCH數值小的清除掉

Shared pool做解析,到database buffer cache取資料,database dictionary cache用來做硬解析

Redo log buffer日誌先進,先進記憶體,commitlgwr寫入日誌到磁碟

Large pool:對磁碟操作要做記憶體緩衝,IO操縱,記憶體緩衝區在large pool定義,如果沒有設定large pool會導致在RMAN恢復的時候導致資料庫效能下降,因為RMAN恢復會消耗IO資源,導致佔用shared pool資源,使資料庫效能下降。

dbms_mview.explain_rewrite物化檢視不能查詢重寫在這裡都能看到

 

一個表,如果多列資料無關聯,執行計劃正確,如果出現多列資料相關,會導致資料庫的執行計劃有偏差,需要增加虛擬列來進行修復

多列統計資訊和索引無關

收集統計資訊

exec dbms_stats.gather_table_stats(‘scott’,’T1’,’CASCADE=>TRUE);

資料庫採用哪個執行計劃?

Profile優於spm,先profile,再spm

SpmSQL plan baseline

SQL語句放入baseline


當第二個accept變成了yes,才會從兩個accept中間進行選擇

1.      sql tunning advice 驗證,資料庫自動執行

會從兩個acceptyes中進行選擇

2.      envolve 手動進行驗證

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2127880/,如需轉載,請註明出處,否則將追究法律責任。

相關文章