oracle sql 執行原理

oracle sql 執行原理

select 的工做原理:
1:Parse,語法分析階段
2:Execute,執行
3:Fetch,提取數據階段

一:先在Library Cache找這條命令,看執行計劃,
二:若是沒有,就語法分析
三:若是語法經過,就對象分析,經過數據字典
       好比表存不存在,表列存不存在,表列若是是*,就翻譯成所有列名
四:得到對象解析鎖,鎖住表,列這個對象,目的是防止別的用戶來改變表,列結構。
五:檢查權限對象,看用戶能不能訪問這個對象。好比表,視圖。
六:服務器生成執行計劃,裝載到Library Cache中
七:檢查 數據庫高速緩存區(Data buffer)中,有沒有內容,即看能不能找到對象(表,視圖)的數據塊(block),若是有,就返回
八:若是不存在,由服務器進程,把表塊讀取到Data Buffer中
九:把Data Buffer中的數據提取出來.
 

update語句分析:
1:Parse階段
2:Execute階段

一:先在Library Cache找這條命令,看執行計劃,
二:若是沒有,就語法分析
三:若是語法經過,就對象分析,經過數據字典
       好比表存不存在,表列存不存在
四:得到對象解析鎖,鎖住表,列這個對象,目的是防止別的用戶來改變表,列結構。
五:檢查權限對象,看用戶能不能訪問這個對象。好比表,視圖。
六:服務器生成執行計劃,裝載到Library Cache中

七:檢查數據庫高速緩存區(Data buffer)中,要修改的內容的行(數據塊)存不存在,若是存在,就修改
八:若是不存在,由服務器進程,把表塊讀取到Data Buffer中
九:給被修改的行加鎖,以防止其它用戶對對象(表)的結構進行修改。
十:舊數據放到Undo buffer(回滾段)中,新數據寫時去,這個改變狀態記錄到Redo Logo中(Redo 日誌/重作日誌)

刪除(DELETE)
1.Oracle讀Block到Buffer Cache(若是該Block在Buffer中不存在)
2.在redo log buffer中記錄delete操做的細節
3.在相應回滾段段頭的事務表中建立一個undo條目
4.把將要刪除的記錄建立前鏡像,存放到Undo Block中
5.在Buffer Cache中的相應數據塊上刪除記錄,而且標記相應的數據塊爲Dirty


提交(COMMIT)
1.Oracle產生一個SCN
2.在回滾段事務表中標記該事務狀態爲commited
3.LGWR Flush Log Buffer到日誌文件
3.若是此時數據塊仍然在Buffer Cache中,那麼SCN將被記錄到Block Header上,這被稱爲快速提交(fast commit)
4.若是dirty block已經被寫回到磁盤,那麼下一個訪問這個block的進程將會自回滾段中獲取該事務的狀態,確認該事務被提交。而後這個進程得到提交SCN並寫回到Block Header上。這被稱爲延遲塊清除(delayed block cleanout)。
 
 
我的疑惑待解決問題
  對於insert into table1 (id) values(select max(id)+1 from table2) 這種sql,併發會不會引發id重複???
 
 

合併鏈接(Sort Merge Join, SMJ):
  a) 對於非等值鏈接,這種鏈接方式的效率是比較高的。
  b) 若是在關聯的列上都有索引,效果更好。
  c) 對於將2個較大的row source作鏈接,該鏈接方法比NL鏈接要好一些。
  d) 可是若是sort merge返回的row source過大,則又會致使使用過多的rowid在表中查詢數據時,數據庫性能降低,由於過多的I/O.html

  嵌套循環(Nested Loops, NL):
  a) 若是driving row source(外部表)比較小,而且在inner row source(內部表)上有惟一索引,或有高選擇性非惟一索引時,使用這種方法能夠獲得較好的效率。
  b) NESTED LOOPS有其它鏈接方法沒有的的一個優勢是:能夠先返回已經鏈接的行,而沒必要等待全部的鏈接操做處理完才返回數據,這能夠實現快速的響應時間。sql

  哈希鏈接(Hash Join, HJ):
  a) 這種方法是在oracle7後來引入的,使用了比較先進的鏈接理論,通常來講,其效率應該好於其它2種鏈接,可是這種鏈接只能用在CBO優化器中,並且須要設置合適的hash_area_size參數,才能取得較好的性能。
  b) 在2個較大的row source之間鏈接時會取得相對較好的效率,在一個row source較小時則能取得更好的效率。
  c) 只能用於等值鏈接中數據庫

相關文章
相關標籤/搜索