SQL Server 2008多版本併發控制

2022-01-10 12:05:28 字數 1586 閱讀 7516

資料庫的一致性,也是衡量dbms效能的重要指標之一。目前大多數商業資料庫(db2, sql server)的併發控制採用的是兩階段鎖(two-phase locking,2pl)協議,2pl保證了併發事務執行的可序列化。但2pl在對任何資料進行讀、寫操作之前,需要對該資料加鎖。在封鎖相容矩陣中,s鎖(share locks,共享鎖)和x鎖(exclusive locks,排它鎖)是不相容的,因此當事務1正對資料a進行讀操作(加s鎖)時,事務2想要對資料進行寫操作(加x鎖),那麼事務2必須等待事務1釋放資料a上的s鎖,才能繼續執行。多版本併發控制(multi-version concurrency control,mvcc)較好地解決了這一問題。在多版本的系統中,每一次寫資料均產生乙個新的版本,讀操作可以根據需要讀取合適的版本,因此讀寫操作互不阻塞。mvcc雖然提高了併發度,但也帶來了維護多個版本的儲存開銷。

microsoft sql server 資料庫引擎引入了現有事務隔離級別的一種新的實現方式 - 已提交讀,用於提供使用行版本控制的語句級快照。sql server 資料庫引擎還引入了乙個新的事務隔離級別 - 快照,用於提供也使用行版本控制的事務級快照。

將 read_committed_snapshot 資料庫選項設定為 on 可啟用使用行版本控制的已提交讀隔離。將 allow_snapshot_isolation 資料庫選項設定為 on 可啟用快照隔離。為資料庫啟用任一選項時,資料庫引擎都將保持被修改的每一行的版本。每當某個事務修改行時,修改前的該行影象將被複製到版本儲存區的一頁中。版本儲存區是tempdb中的資料頁集合。如果有多個事務修改行,則該行的多個版本將被鏈結到乙個版本鏈中。使用行版本控制的讀操作將檢索每一行在事務或語句啟動時已提交的最後乙個版本。

為 sql server 2008編寫的或 sql server 中新增的應用程式,通過在 read_committed_snapshot 資料庫選項為 on 時指定讀提交的事務隔離級別,來實現使用行版本控制的讀提交的隔離。所有讀操作都將檢視語句啟動時已提交的行版本。這將提供資料的語句級快照。

為 sql server 編寫的應用程式將通過在 allow_snapshot_isolation 資料庫選項為 on 時指定快照事務隔離級別,來實現快照隔離。快照事務中的所有讀操作都將檢視事務啟動時已提交的行版本。這將提供資料的事務級快照。

對於使用基於行版本控制的隔離級別的事務,讀操作不對資料請求共享鎖。這意味著使用行版本控制的讀取器不會妨礙其他讀取器或編寫器訪問同一資料。同理,編寫器也不會妨礙讀取器。但是,編寫器會互相妨礙(即使是在基於行版本控制的隔離級別下執行)。兩個寫操作不能同時修改同一資料。

「快照隔離」功能擴充套件了 sql server 2008 中的鎖定框架,它使應用程式能夠在發生任何資料修改之前檢視值。這可防止應用程式被鎖定,同時仍將提供真正已提交的資料。sql server 2008 的 read committed snapshot 需要資料庫管理員來啟用,允許資料被唯讀事務讀取。所以 si 對唯讀事務的併發控制效果是很好的,但是對更新事務是否也這樣不得而知。對長時間執行的更新事務來說更為不利於與短期的高競爭性事務。如果跨資料庫的事務試圖使用 快照隔離(si)標準 ,而不是所有資料庫都設定的話,則該事務會失敗。這無疑給可擴充套件性帶來一定的障礙。看來微軟要實現自己的比 sql 92 規範還要強的 si 還有很多路要走。

SQL Server 2008多版本併發控制

資料庫的一致性,也是衡量dbms效能的重要指標之一。目前大多數商業資料庫 db2,sql server 的併發控制採用的是兩階段鎖 two phase locking,2pl 協議,2pl保證了併發事務執行的可序列化。但2pl在對任何資料進行讀 寫操作之前,需要對該資料加鎖。在封鎖相容矩陣中,s鎖 ...

SQL Server 2008 企業版安裝

此 中包含了x86 x64 ia64 三種cpu模式的安裝程式。版本號為 10.0.1600.22 安裝序列號 開發版 developer pttfm x467g p7rh2 3q6cg 4dmyb 企業版 enterprise jd8y6 hqg69 p9h84 xdtpg 34mbb 安裝環境為...

Sql Server 2008 收縮日誌

收縮日誌 alter database dnname set recovery with no wait goalter database dnname set recovery 簡單模式 gouse dnname godbcc shrinkfile n dnname log 11,truncate...