天天看點

關于達夢資料庫事務的隔離級别介紹1、 達夢與Oracle支援的隔離級别2、隔離級别的實作

關于達夢資料庫事務的隔離級别介紹

  • 1、 達夢與Oracle支援的隔離級别
    • 髒讀
    • 不可重複讀
    • 幻讀
  • 2、隔離級别的實作
    • 讀送出隔離級
    • 串行化隔離級
    • 讀未送出隔離級
    • 隻讀事務

1、 達夢與Oracle支援的隔離級别

達夢 Oracle
讀未送出
讀送出 讀送出
重複讀 重複讀
序列化 序列化

然後我們再來看SQL-92 定義的四個隔離級别

關于達夢資料庫事務的隔離級别介紹1、 達夢與Oracle支援的隔離級别2、隔離級别的實作

也就是說Oracle資料庫是沒有髒讀的,達夢和Oracle一樣預設的隔離級别都是讀送出。

首先我們先來認識一下髒讀、不可重複讀、幻讀的概念,再來介紹怎麼實作這幾種隔離級别。

髒讀

比如說我們開啟2個會話,當A會話的事務可以讀取到B會話的已修改尚未送出的事務,這個時候就會産生髒讀。

不可重複讀

當A會話的同一個事務、同一個查詢,如果是因為其他會話的事務修改過或删除的資料,造成查詢的資料不一緻。這種現象稱為不可重複讀。

幻讀

當A會話的同一個事務、同一個查詢,如果是因為其他會話的事務添加的資料,造成查詢的資料不一緻。這種現象稱為幻讀。

2、隔離級别的實作

讀送出隔離級

資料庫的讀送出隔離可以確定隻通路到已送出事務修改的資料,保證資料處于一緻性狀态。

串行化隔離級

在要求消除不可重複讀取或幻像讀的情況下,我們可以設定事務隔離級為串行化。跟讀送出隔離級相比,串行化事務的查詢本身不會增加任何代價,但修改資料可能引發“串行化事務被打斷”錯誤。

具體來說,當一個串行化事務試圖更新或删除資料時,而這些資料在此事務開始後被其他事務修改并送出時,DM 資料庫将報“串行化事務被打斷”錯誤。應用開發者應該充分考慮串行化事務帶來的復原及重做事務的開銷,從應用邏輯上避免對相同資料行的激烈競争導緻産生大量事務復原。并結合應用邏輯,捕獲“串行化事務被打斷”錯誤,進行事務重做等相應處理。如果系統中存在長時間運作的寫事務,并且該長事務所操作的資料還會被其他短事務頻繁更新的話,最好避免使用串行化事務。

讀未送出隔離級

讀未送出隔離級别是最不嚴格的隔離級别。實際上,在使用這個隔離級别時,會發生髒讀、不可重複讀和幻像。一般來說,讀未送出隔離級别通常隻用于通路隻讀表和隻讀視圖,以消除可見性判斷帶來的系統開銷,提升查詢性能。

隻讀事務

除了前面所述的各種标準特性外,DM 資料庫還支援隻讀事務,隻讀事務隻能通路資料,但不能修改資料。并且隻讀事務不會改變事務原有的隔離級。