SQL Server資料庫鎖機制及類型

来源:http://www.cnblogs.com/guoxibaijv/archive/2017/02/21/6425099.html
-Advertisement-
Play Games

Microsoft SQL Server(以下簡稱SQL Server)作為一種中小型資料庫管理系統,已經得到了廣泛的應用,該系統更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為資料庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。 對 ...


  Microsoft SQL Server(以下簡稱SQL Server)作為一種中小型資料庫管理系統,已經得到了廣泛的應用,該系統更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為資料庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。   對於一般的用戶而言,通過系統的自動鎖定管理機制基本可以滿足使用要求,但如果對數據安全、資料庫完整性和一致性有特殊要求,就必須自己控制資料庫的鎖定和解鎖,這就需要瞭解SQL Server的鎖機制,掌握資料庫鎖定方法。   鎖的多粒度性以及鎖升級   資料庫中的鎖是指一種軟體機制,用來指示某個用戶(也即進程會話,下同)已經占用了某種資源,從而防止其他用戶做出影響本用戶的數據修改或導致資料庫數據的非完整性和非一致性。這兒所謂資源,主要指用戶可以操作的數據行、索引以及數據表等。根據資源的不同,鎖有多粒度(multigranular)的概念,也就是指可以鎖定的資源的層次。SQL Server中能夠鎖定的資源粒度包括:資料庫、表、區域、頁面、鍵值(指帶有索引的行數據)、行標識符(RID,即表中的單行數據)。   採用多粒度鎖的重要用途是用來支持併發操作和保證數據的完整性。SQL Server根據用戶的請求,做出分析後自動給資料庫加上合適的鎖。假設某用戶只操作一個表中的部分行數據,系統可能會只添加幾個行鎖(RID)或頁面鎖,這樣可以儘可能多地支持多用戶的併發操作。但是,如果用戶事務中頻繁對某個表中的多條記錄操作,將導致對該表的許多記錄行都加上了行級鎖,資料庫系統中鎖的數目會急劇增加,這樣就加重了系統負荷,影響系統性能。因此,在資料庫系統中,一般都支持鎖升級(lock escalation)。所謂鎖升級是指調整鎖的粒度,將多個低粒度的鎖替換成少數的更高粒度的鎖,以此來降低系統負荷。在SQL Server中當一個事務中的鎖較多,達到鎖升級門限時,系統自動將行級鎖和頁面鎖升級為表級鎖。特別值得註意的是,在SQL Server中,鎖的升級門限以及鎖升級是由系統自動來確定的,不需要用戶設置。 

SQL Server鎖類型

1)    HOLDLOCK: 在該表上保持共用鎖,直到整個事務結束,而不是在語句執行完立即釋放所添加的鎖。   

2)    NOLOCK:不添加共用鎖和排它鎖,當這個選項生效後,可能讀到未提交讀的數據或“臟數據”,這個選項僅僅應用於SELECT語句。   

3)    PAGLOCK:指定添加頁鎖(否則通常可能添加表鎖)。    

4)    READCOMMITTED用與運行在提交讀隔離級別的事務相同的鎖語義執行掃描。預設情況下,SQL Server 2000 在此隔離級別上操作。

5)    READPAST: 跳過已經加鎖的數據行,這個選項將使事務讀取數據時跳過那些已經被其他事務鎖定的數據行,而不是阻塞直到其他事務釋放鎖,

READPAST僅僅應用於READ COMMITTED隔離性級別下事務操作中的SELECT語句操作。    

6)    READUNCOMMITTED:等同於NOLOCK。    

7)    REPEATABLEREAD:設置事務為可重覆讀隔離性級別。    

8)    ROWLOCK:使用行級鎖,而不使用粒度更粗的頁級鎖和表級鎖。     

9)    SERIALIZABLE:用與運行在可串列讀隔離級別的事務相同的鎖語義執行掃描。等同於 HOLDLOCK。    

10)  TABLOCK:指定使用表級鎖,而不是使用行級或頁面級的鎖,SQL Server在該語句執行完後釋放這個鎖,而如果同時指定了HOLDLOCK,該鎖一直保持到這個事務結束。     

11)  TABLOCKX:指定在表上使用排它鎖,這個鎖可以阻止其他事務讀或更新這個表的數據,直到這個語句或整個事務結束。    

12)  UPDLOCK :指定在 讀表中數據時設置更新 鎖(update lock)而不是設置共用鎖,該鎖一直保持到這個語句或整個事務結束,使用UPDLOCK的作用是允許用戶先讀取數據(而且不阻塞其他用戶讀數據),並且保證在後來再更新數據時,這一段時間內這些數據沒有被其他用戶修改。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL 語句主要可以劃分為以下 3 個類別。 DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、資料庫、表、列、索引等資料庫對象的定義。常用的語句關鍵字主要包括 create、drop、alter等。 就是對資料庫內部的對象進行創建、刪除、修 ...
  • SQL 事務隔離級別 概述 隔離級別用於決定如果控制併發用戶如何讀寫數據的操作,同時對性能也有一定的影響作用。 步驟 事務隔離級別通過影響讀操作來間接地影響寫操作;可以在回話級別上設置事務隔離級別也可以在查詢(表級別)級別上設置事務隔離級別。事務隔離級別總共有6個隔離級別:READ UNCOMMIT ...
  • conda升級預設官網地址,速度會特別慢,現在我們指定一個當前可用的鏡像,步驟如下: 1.執行命令,生成.condarc文件 執行完上述命令後會在當前用戶目錄下生成.condarc文件 2.確認.condarc文件內容 3.確認無誤後,關閉控制台視窗,重新打開才會重新載入配置。 再升級什麼的,會發現 ...
  • --資料庫表名及欄位名都無數據字典,現在補充上。 --暫時想到如下笨辦法: --思路,分兩步,一是填寫表的字典。二是填寫表中欄位的字典。 --將表名導出到Table_Description --將列名導出到Column_Description --然後填寫上Description,最後調用存儲過程, ...
  • 1. 可能是 mysql 登錄用戶限制了只能本地連接,輸入以下命令設置可連接的 ip 地址, % 表示 所有 ip GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; flush priv ...
  • 項目上使用Oracle資料庫,所以本地需要備份還原(居然沒有在區域網上共用一個資料庫)。 比如說現在有 student.dmp 資料庫備份文件一份。 安裝配置 Oracle 11g XE 簡介 以下內容來自Oracle Database 快捷版 11g 第 2 版的 OTN 許可協議: Any us ...
  • 聲音識別和聲學模型的建立 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2016-3-30 聲明 1)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯繫博主 ...
  • 一 、對數據的增刪改查。 1. 新增 2. 修改 3. 查看 4. 刪除 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...