首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 鎖機制完整體系:三大鎖類型、樂觀/悲觀鎖程式設計視角、四大隔離等級與鎖監控實戰

     編輯:關於SqlServer

11.5.1 鎖概念

鎖為多用戶環境下資源存取限制機制。資源加鎖後有存取限制,稱「鎖定」。SQL Server 可鎖定對象:

  • 資料列
  • 索引鍵值
  • 頁——基本存取單位,8KB
  • 區——8 個連續頁
  • 表
  • 資料庫

11.5.2 鎖分類雙視角

(1) 資料庫系統視角:三大鎖類型

  • 獨佔鎖:資源僅允許鎖定程式使用,其他操作均不接受。執行 INSERT/UPDATE/DELETE 時自動使用。有其他鎖存在時無法加獨佔鎖。事務結束前不釋放
  • 共享鎖:資源可被其他用戶讀取,不可修改。SELECT 執行時通常加共享鎖。資料頁讀完通常**立即釋放**
  • 更新鎖:防止死鎖而設。準備更新資料時先加更新鎖(不可修改但可讀取),確定更新時自動轉為獨佔鎖。有其他鎖存在時無法加更新鎖

(2) 程式設計師視角:兩類鎖策略

  • 樂觀鎖:假定處理資料時無需在代碼中處理鎖,完全依賴資料庫管理。一般情況執行事務時 SQL Server 自動對事務範圍內更新的表加鎖
  • 悲觀鎖:不信任資料庫自動管理,程式設計師直接管理資料/物件加鎖,負責獲取、共享、釋放鎖

11.5.3 隔離等級:事務間隔離程度控制

隔離等級指定資料庫如何保護(鎖定)當前被其他用戶/伺服器請求使用的資料。效果等同 SELECT 中使用鎖定選項。四大隔離等級:

  • READ COMMITTED:SELECT 不返回未提交資料/髒資料。**SQL Server 預設隔離等級**
  • READ UNCOMMITTED:允許讀取已被修改但未提交的資料
  • REPEATABLE READ:SELECT 讀取資料在整個命令執行過程中不被更改。影響效能,非必要勿用
  • SERIALIZABLE:同 DELETE 中 SERIALIZABLE 選項含義

使用 SET 命令設定:

SET TRANSACTION ISOLATION LEVEL
{READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE }

11.5.4 鎖監控

可透過企業管理器或預存程序查看鎖。企業管理器:目錄樹「Management」→「Current Activity」→「Locks / Process ID」節點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved