SQL Server 2008多版本的并發控制
數據庫的一致性,也是衡量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、數據庫\事務
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解