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 GOSET QUOTED_IDENTIFIER ON GOCREATE 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
View Code
实例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
View Code
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
View Code
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
View Code
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 |
转载于:https://www.cnblogs.com/Jesse-Li/p/5783692.html
SQL SERVER 锁定的实例相关推荐
- 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭...
在win7 中安装VS2008开发DNN的模块,经常出现"由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例.该连接将关闭"的问题,在网上找了下有如下解决 ...
- sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定
sql server 锁定 When you perform a SQL Server Online Index Rebuild operation, introduced for the first ...
- sql server 锁定_关于锁定SQL Server的全部
sql server 锁定 .SQLCode { font-size: 13px; font-weight: bold; font-family: monospace;; white-space: p ...
- 如何修改 SQL Server 中的实例名 ?
在微软的社区也看到了这个问题: https://social.msdn.microsoft.com/Forums/en-US/c59b0840-1595-456a-b77e-d95b1a2a9097/ ...
- 删除 SQL Server 的默认实例
在网上找到下面几种方法,本人使用的是第一种,很实用. 1.删除 SQL Server 的特定实例 若要删除 SQL Server 的某个特定实例,请按照以下步骤操作: 找到并删除%drive%:\\ ...
- 解决方案:请删除SQL Server的“WinCC“实例,因为在卸载“WinCC Professional“或“WinCC Runtime Professional“之后及其他问题解决方案!!!
作者:嵌入式历练者 ID : Eterlove 记下相关笔记,记录我的学习生活!站在巨人的肩上Standing on Shoulders of Giants! 该文章为原创,转载请注明出处和作者:ht ...
- SQL Server 2005 默认实例和命名实例(这文章翻译得真绕嘴)
Microsoft SQL Server 2005 Express Edition (SQL Server Express) 通常作为命名实例安装.如果未在安装过程中指定命名实例,则使用默认的命名实例 ...
- 使用JDBC连接SQL Server 2000 命名实例(Named Instance)
最近比较闲,就爱摆弄一些玩意,前时间对ruby on rails比较感兴趣,就想继续看看,但是系统坏了好几次,前段时间配好的eclipse+rdt+sqlserver的环境也就得重新diy了: ...
- SQL Server返回当前实例系统日期和时间的函数
下面列举出SQL Server返回实例系统日期和时间的函数,除了ANSI标准函数CURRENT_TIMESTAMP在应用时无需在函数后多加一对空的小括号"()"外,其余均需. 从返 ...
最新文章
- spyder jupyter集成
- oracle数据库可以存图片吗,如何往数据库(Oracle)里存储图片和文件
- JavaScript 异常处理
- 怎样呵护友谊_怎样呵护友谊(作文)
- VC操作XML编程实例
- 跳转控制语句之break
- resize 按钮不会被伪元素遮盖
- Firefox Developer Edition已阻止此网站安装未经验证的附加组件的解决办法
- asp,net 读写cookie(个人笔记)
- [Hadoop]SSH免密码登录以及失败解决方案
- java 方法调用表达式_java lambda怎么表达式判断被调用接口名称和接口中方法
- springboot banner.txt 在线制作
- pyton-虚拟环境以及django的初步使用记录信息
- 基于asp.net大学生就业管理系统#毕业设计
- Ta,两年拿下了10亿美金
- 【经验分享】IT领域7年工作经验和建议
- 车位地磁检测器产品选型指导(干货!)
- 运用计算机思维可以解决什么问题,计算机思维是能否解决生活中遇到的难题?...
- Qno技术:支持网吧业务目标持续推进——FVR9000系列网吧解决方案(转)
- python+pyqt5+mysql设计图书管理系统(1)- 数据库