1. 程式人生 > >Sqlserver事務和鎖🔒

Sqlserver事務和鎖🔒

llb sql語句 活動 ati transacti 允許 ble 默認 ive

事務:事務是包含一組數據庫操作的邏輯工作單元,用於保證數據的一致性和可恢復性。

事務的分類:

      1.自動提交事務:在sqlserver中,每條sql語句都被看作是一個事務,當執行完成後,數據庫引擎都會自動執行提交事務或回滾事務。

      2.顯示事務:使用begin transaction語句標識事務的開始,使用commit或rollback語句標識事務的結束。

      3.隱式事務

      4.批處理級事務

事務保存點 save transaction 語句


保存點定義了事務中的一個位置,可以在rollback的時候講數據回滾到保存點的位置,從而實現部分回滾事務的功能,避免不必要的系統資源損耗。

例:

begin transaction test
save transaction a
insert into shop values(111);
rollback transaction a
insert into shop values(222);
commit transaction test

嵌套事務


sqlserver支持嵌套事務

事務的隔離級別


read uncommitted:指定語句可以讀取已由其他事物修改但尚未提交的行,在這種事務隔離級別下,語句可以讀取到未提交的修改,這種讀取叫做臟讀,是限制最少的級別。

read committed

:指定語句不能讀取其他事物正在修改但尚未提交的行,這可以避免臟讀,sqlserver的默認選項。

repeatable read:指定語句不能讀取其他事物正在修改但尚未提交的行,而且其他事物也不能修改當前事務在提交前所讀取的數據。

snapshot:指定事務在開始時,就獲得了已經提交數據的快照,因此當前事務只能看到在事務開始之前對數據所做的修改。

serializable:提供最高級別的事務隔離。當事務處在這個級別時,一個查詢只能看到事務開始之前提交的數據,而無法看到臟數據或事務執行中其他並行事務所修改的數據。在此級別下,事務就好像被一個一個地串行執行,而不是並發執行多個事務。

set
transaction isolation levelread uncommitted | read committed | repeatable read | snapshot | serializable

鎖的分類


按系統角度分為:共享鎖、獨占鎖(排他鎖)、更新鎖、意向鎖、架構鎖、大容量更新鎖。

從並發控制手段上分為:樂觀鎖、悲觀鎖。

https://www.cnblogs.com/rasion/archive/2010/03/29/1699600.html

鎖的兼容性


技術分享圖片

鎖的粒度和結構層次


數據庫引擎具有多粒度鎖定,允許一個事務鎖定不同類型的資源。鎖定在較小的粒度(例如行)可以提高並發度,但開銷大,因為鎖定的範圍越小,需要的鎖就越多(鎖定了許多行,就需要持有更多的鎖);鎖定在較大的粒度(例如表)會降低並發度,但是消耗較低, 因為鎖定的範圍大,需要的鎖就越小(鎖定了表,限制了其他事物對表的訪問)。

數據庫引擎通常必須獲取多粒度級別上的鎖才能完整地保護資源。這種多粒度級別上的鎖稱為鎖層次結構

技術分享圖片

查看鎖的活動情況


1.使用sqlserver時間探查器

2.使用windows管理工具->性能 ,系統監視器

3.系統視圖:sys.dm_tran_locks

技術分享圖片

死鎖產生的原因以及如何避免


https://www.cnblogs.com/wangweitr/p/7158023.html

參考:《sqlserver性能監測與優化》

Sqlserver事務和鎖🔒