SQL Server鎖粒度
一、鎖粒度是被封鎖目標的大小,封鎖粒度小則併發性高,但開銷大,封鎖粒度大則併發性低但開銷小
二、SQL Server支持的鎖粒度能夠分爲爲行、頁、鍵、鍵範圍、索引、表或數據庫獲取鎖。html
ELECT 語句中「加鎖選項」的功能說明sql
SQL Server提供了強大而完備的鎖機制來幫助實現數據庫系統的併發性和高性能。用戶既能使用SQL Server的缺省設置也能夠在select 語句中使用「加鎖選項」來實現預期的效果。 本文介紹了SELECT語句中的各項「加鎖選項」以及相應的功能說明。數據庫
功能說明: 併發
NOLOCK(不加鎖)
此選項被選中時,SQL Server 在讀取或修改數據時不加任何鎖。 在這種狀況下,用戶有可能讀取到未完成事務(Uncommited Transaction)或回滾(Roll Back)中的數據, 即所謂的「髒數據」。性能
HOLDLOCK(保持鎖)
此選項被選中時,SQL Server 會將此共享鎖保持至整個事務結束,而不會在途中釋放。spa
UPDLOCK(修改鎖)
此選項被選中時,SQL Server 在讀取數據時使用修改鎖來代替共享鎖,並將此鎖保持至整個事務或命令結束。使用此選項可以保證多個進程能同時讀取數據但只有該進程能修改數據。.net
TABLOCK(表鎖)
此選項被選中時,SQL Server 將在整個表上置共享鎖直至該命令結束。 這個選項保證其餘進程只能讀取而不能修改數據。指針
PAGLOCK(頁鎖)
此選項爲默認選項, 當被選中時,SQL Server 使用共享頁鎖。server
TABLOCKX(排它表鎖)
此選項被選中時,SQL Server 將在整個表上置排它鎖直至該命令或事務結束。這將防止其餘進程讀取或修改表中的數據。
HOLDLOCK 持有共享鎖,直到整個事務完成,應該在被鎖對象不須要時當即釋放,等於SERIALIZABLE事務隔離級別htm
NOLOCK 語句執行時不發出共享鎖,容許髒讀 ,等於 READ UNCOMMITTED事務隔離級別
PAGLOCK 在使用一個表鎖的地方用多個頁鎖
READPAST 讓sql server跳過任何鎖定行,執行事務,適用於READ UNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖
ROWLOCK 強制使用行鎖
TABLOCKX 強制使用獨佔表級鎖,這個鎖在事務期間阻止任何其餘事務使用這個表
UPLOCK 強制在讀表時使用更新而不用共享鎖
注意: 鎖定數據庫的一個表的區別
SELECT * FROM table WITH (HOLDLOCK) 其餘事務/語句能夠讀取表,但不能更新刪除
SELECT * FROM table WITH (TABLOCKX) 其餘事務/語句不能讀取表,更新和刪除
例子:
begin tran
select * from test_table with (TABLOCKX) //表鎖
commit tran
這時,其它語句,好比select * from test_table將只能等待。
使用 select * from dbo.A with(RowLock) WHRE a=1 這樣的語句,系統是何時釋放行鎖呢??
通過官方文檔考證後,原來 RowLock在不使用組合的狀況下是沒有任何意義的,所謂「解鈴還須繫鈴人~」
With(RowLock,UpdLock) 這樣的組合才成立,查詢出來的數據使用RowLock來鎖定,當數據被Update的時候,鎖將被釋放。
begin transaction
select * from CHARGE_ITEMS with(updlock,rowlock) where CHID=3;
說明:
1. rowlock標記須要配合updlock使用,不組合使用的狀況下rowlock是沒有意義的;
2. 鎖須要配合事務使用,即須要begin transaction,commit事務後釋放鎖。
---------------------
參考:
sql server阻塞分析:
https://blog.csdn.net/roy_88/article/details/2682044
https://www.cnblogs.com/zoro-zero/p/6140280.html
索引 其實是一組指向表中數據的指針,索引的排列順序其實就是這組指針的順序.
彙集索引 :表的物理存儲順序與指針(即邏輯)順序相同
非彙集索引 :物理與邏輯順序不一樣
由於一個表只能有一個物理順序,因此,彙集索引的個數最多隻能是1.
惟一索引 是給所作的索引增長了惟一性的約束,添加,修改索引列中數據時,不容許出現重複值.它能夠是彙集索引,也能夠是非彙集的,就看你如何定義。
主鍵索引 是把主鍵列定義爲索引,主鍵具備惟一性,因此主鍵索引是惟一索引的一種特殊形式。