什麼是一致性讀?
一致性讀指的是在從查詢那一刻起,中間的變化不予理會。
舉例說明
比如我有兩個帳戶a,b. a 有1000塊,b有1000快。我查詢的時候查詢速度比較慢。中間a轉500到b賬戶。
已經查詢到a賬戶有1000,b賬戶有1500,這個時候我查詢的結果是查詢的結果應該是2500還是2000呢?
正確結果當然是2000。
這裡就設計到oracle一致性查詢的問題了.
oracle有兩個概念:
1.scn,system change number ,這是乙個只會增加的遞增數字,存在在oracle的資料塊中,當某塊改變時scn就會遞增。
2.資料庫的回滾段記錄事務槽,事務槽是用來分配回滾空間的。如果你更新了某塊,事務就寫進事務槽裡。如果未提交或回滾,
該塊就存在活動事務。資料庫讀到此塊可以識別到這種情況的存在。
oracle 在做一致性讀時,首先看發起的scn是否大於當前查詢塊的scn,如果小於則從回滾段獲取前映象資料。
如果scn大於當前查詢塊的scn,還要確保該塊沒有活動事務,否則還需要從 前映象去查詢。
oracle的回滾段,解決了一致性讀的問題,又避免了鎖,大大增強了資料庫的併發能力。
oracle保證讀一致性原理
這裡也有講解 1 undo segment的概念 當資料庫進行修改的時候,需要把儲存到以前的old的資料儲存到乙個地方,然後進行修改,用於儲存old資料的segment 就是undo segment。以前老的東西是可以被覆蓋掉的,因為undo segment是一種迴圈利用的方式。看下圖 如上圖所示 ...
一致性非鎖定讀和一致性鎖定讀
在預設配置下innodb的隔離級別是repeatable read,innodb的select操作使用的是一致性非鎖定讀 一致性的非鎖定行讀 consistent nonlocking read,簡稱cnr 是指innodb儲存引擎通過行多版本控制 multi versioning 的方式來讀取當前...
一致性非鎖定讀與一致性鎖定讀
一致性非鎖定讀 consistent nonlocking read 是指innodb儲存引擎通過 行多版本控制 multi versioning 的方式來讀取當前執行時間資料庫中行的資料。如果讀取的行正在執行delete或update操作,這時讀取操作不會因此去等待行上鎖的釋放,相反地,innod...