回覆列表
  • 1 # 卡納挖煤

    鎖的產生是因為併發訪問控制,先訪問資料的會話對其加鎖,以防止後面訪問的會話對其修改,造成資料異常。GBase 8t的鎖分為下面幾種:a.共享鎖; b.排他鎖;c.更新鎖 (lock-U)在更新Cursor中使用更新鎖由cursors 含有‘for update’ 選項執行時產生的,只能在沒有排他鎖或者更新鎖的記錄上加更新鎖當鎖定的記錄真正執行的時候,更新鎖將提升為排他鎖;d.專一鎖 (lock-IX or IS) 自動分配, 如果一條記錄上的記錄被更新,一個排他鎖將分配在該記錄上,同時將該記錄的表上自動加上專一鎖,這能保證沒有session可以在該表上增加排他鎖,只要該表中有記錄被增加了排他鎖。鎖的粒度有entire databases 資料庫鎖、entire tables 表鎖、disk pages 資料頁鎖和single rows, or index-key values 行鎖四種。鎖是與隔離級別相互配合的。GBase 8t事務隔離級別分為下面幾種: Dirty Read 、Committed Read 、Cursor Stability、 Repeatable Read 、Last Committed Read; a.對於Dirty Read隔離級別,資料庫伺服器不會分配任何鎖,查詢過程中,可以查詢到任何資料row, 甚至那些被修改但尚未提交的記錄,因此會產生讀取髒資料的情況。該隔離級別的併發訪問程度最高。 b.對於Committed Read隔離級別,是資料庫預設的隔離級別,能避免讀到髒資料,讀到的所有的記錄都是已提交的。 c.對於Cursor Stability隔離級別,不僅可以看到提交的記錄,也可以保證看到的記錄不會被更新,其他程序不能更新 (UPDATE or DELETE) 你所看到的記錄,當移動到下一行時,鎖才會釋放,記錄就可以進行修改。這種隔離級別可以解決Phantom讀的問題。 d.對於Repeatable Read隔離級別,資料庫在讀取的記錄上加共享鎖,驗證是否可以讀取資料直到事務提交,鎖才能釋放其他使用者可以讀取資料,但是不能修改。這種隔離級別是隔離程度最高的,能夠解決不可重複讀和Phantom讀的問題。 e.對於Last Committed Read隔離級別,當所讀的記錄被鎖,讀取的是記錄最後一次提交的資料;這種隔離級別類似oracle的讀一致性。

  • 中秋節和大豐收的關聯?
  • 峰子把手蟄腫了怎麼辦?