日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SQL SERVER 锁定的实例

發布時間:2023/10/18 编程问答 56 如意码农
生活随笔 收集整理的這篇文章主要介紹了 SQL SERVER 锁定的实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

---實例DB:AdventureWorks2014

--- 創建view DBLocks

USE [AdventureWorks2014]
GO /****** Object: View [dbo].[DBlocks] Script Date: 8/17/2016 6:38:16 PM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE VIEW [dbo].[DBlocks] AS
SELECT request_session_id as spid,
db_name(resource_database_id) as dbname,
CASE
WHEN resource_type = 'OBJECT' THEN
object_name(resource_associated_entity_id)
WHEN resource_associated_entity_id = 0 THEN 'n/a'
ELSE object_name(p.object_id)
END as entity_name, index_id,
resource_type as resource,
resource_description as description,
request_mode as mode, request_status as status
FROM sys.dm_tran_locks t LEFT JOIN sys.partitions p
ON p.partition_id = t.resource_associated_entity_id
WHERE resource_database_id = db_id();
GO

實例1: Read Commit(SQL SERVER默認隔離級別) 隔離級別下的SELECT

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRAN
SELECT * FROM [Production].[Product] WHERE Name ='Reflector';
SELECT * FROM [dbo].[DBlocks] WHERE spid= @@SPID
COMMIT TRAN

DBLocks 的輸出結果

spid dbname entity_name index_id resource mode status
58 AdventureWorks2014 sysrowsets NULL OBJECT Sch-S GRANT
58 AdventureWorks2014 n/a NULL DATABASE S GRANT
58 AdventureWorks2014 DBlocks NULL OBJECT IS GRANT

Product 表的數據沒有LOCK,所以批處理執行select 操作獲得了共享鎖。SQL SEVER一旦讀完數據之后立即釋放共享鎖。因此執行DBLoks試圖時,上面提到的共享鎖不存在了。

實例2: 可重復讀隔離級別下的SELECT

SQL 批處理

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRAN
SELECT * FROM [Production].[Product] WHERE Name ='Reflector';
SELECT * FROM [dbo].[DBlocks] WHERE spid= @@SPID
COMMIT TRAN

DBLocks 的輸出結果

spid dbname entity_name index_id resource description mode status
58 AdventureWorks2014 sysrowsets NULL OBJECT   Sch-S GRANT
58 AdventureWorks2014 n/a NULL DATABASE   S GRANT
58 AdventureWorks2014 Product 1 PAGE 0.590972222 IS GRANT
58 AdventureWorks2014 DBlocks NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 1 KEY (b031e2166063) S GRANT
58 AdventureWorks2014 Product 3 KEY (489415cc61a4) S GRANT
58 AdventureWorks2014 Product NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 3 PAGE 3.626388889 IS GRANT

由于Product表上有聚集索引,數據行就是頁級別的全部索引行,返回兩個數據行上的鎖是鍵鎖,用來尋找相關數據。在Product表上存在Name上的非聚集索引,可以通過Index_ID字段的值來區分聚集所以和非聚集索引,Index_ID=1表示數據行和聚集索引,Index_ID=3表示非聚集索引。由于事務的隔離級別是可重復讀,共享鎖要等到事務結束為止。NOTE:索引行擁有共享鎖(S)而數據分頁,索引分頁以及表本身擁有意向共享鎖(IS)。

實例3:可串行隔離級別下的SELECT

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRAN
SELECT * FROM [Production].[Product] WHERE Name LIKE 'Reflect%';
SELECT * FROM [dbo].[DBlocks] WHERE spid= @@SPID
COMMIT TRAN

DBLocks的輸出結果

spid dbname entity_name index_id resource description mode status
58 AdventureWorks2014 sysrowsets NULL OBJECT   Sch-S GRANT
58 AdventureWorks2014 n/a NULL DATABASE   S GRANT
58 AdventureWorks2014 Product 1 PAGE 0.590972222 IS GRANT
58 AdventureWorks2014 n/a NULL METADATA schema_id = 7 Sch-S GRANT
58 AdventureWorks2014 DBlocks NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 1 KEY (b031e2166063) S GRANT
58 AdventureWorks2014 Product 3 KEY (489415cc61a4) RangeS-S GRANT
58 AdventureWorks2014 Product NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 3 PAGE 3.626388889 IS GRANT
58 AdventureWorks2014 Product 3 KEY (53bdd09497c4) RangeS-S GRANT
58 AdventureWorks2014 NULL NULL OBJECT   IS GRANT

總結

以上是生活随笔為你收集整理的SQL SERVER 锁定的实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。