二、完整的锁兼容性矩阵(见下图)

对上图的是代码说明:见下图。

三、下表列出了数据库引擎可以锁定的资源。

名称

资源

缩写

编码

呈现锁定时,描述该资源的方式

说明

数据行

RID

RID

9

文件编号:分页编号:Slot编号

用于锁定堆中的单个行的行标识符。

索引键

KEY

KEY

7

6字节哈希值

索引中用于保护可序列化事务中的键范围的行锁。

分页

PAGE

PAG

6

文件编号:分页编号

数据库中的 8 KB 页,例如数据页或索引页。

范围

EXTENT

EXT

8

文件编号:范围的第一个分页的编号

一组连续的八页,例如数据页或索引页。

 

HoBT

     

堆或 B 树。 用于保护没有聚集索引的表中的 B 树(索引)或堆数据页的锁。

数据表

TABLE

TAB

5

数据表ID(OBJID字段)

包括所有数据和索引的整个表。

文件

FILE

FIL

3

文件编号

数据库文件。

应用程序

APPLICATION

APP

10

6字节哈希值

应用程序专用的资源。

 

METADATA

     

元数据锁。

 

ALLOCATION_UNIT

     

分配单元。

数据库

DATABASE

DB

2

数据库代码(DBID字段)

整个数据库。

索引

 

IDX

4

Db_id:object_id:index_id相关的其他资源

索引中的数据行锁定,

四、SQL SERVER要锁定资源时,默认是从最底级开始锁起,例如,索引键值,数据行,以避免大范围锁定,以避免影响其他人同时访问该范围内的其他数据,但是当内存不足时,SQL SERVER会自动扩大锁定范围以减低管理锁定的负荷。下面我们来看一个示例。

--建立SP_LOCK输出缓存表

if exists( select * from tempdb..sysobjects where name like '#temp%' and type ='u')

begin

drop table #temp

create table #temp(spid int,dbid int ,objid int,indid int,type varchar(3),resource varchar(20)

,mode varchar(20),status varchar(5))

end

begin tran

update WBK_PDE_head set [COP_EMS_NO]='abcde' where wbook_no='BE404942850177'

insert #temp exec sp_lock @@spid

commit tran

-----获取dbid

--select DB_ID('Test')

--只查看定制的数据库的相关资源,sql 2008

select spid,数据库=DB_NAME(dbid),对象=OBJECT_NAME(objid),

索引=(select name from sysindexes where ID=OBJID and indid=t.indid ),

TYPE,resource,mode,status from #temp t where dbid=28

order by dbid,objid,indid

---

---以SQL 2005的sys.indexes表查询相关数据

select spid,数据库=DB_NAME(dbid),对象=OBJECT_NAME(objid),

索引=(select name from sys.indexes where object_id=OBJID and index_id=t.indid ),

TYPE,resource,mode,status from #temp t where dbid=28

order by dbid,objid,indid

说明:

1.建立临时表#Temp用以存储系统存储过程sp_lock输出的数据

2.开启事务,然后更新数据(update),但不去确认事务,数据库会锁定相关对象,将sp_lock所呈现的相关数据插入到#Temp表中,并将结果查询出来。

在查询分析器中执行以下代码

select a.*,b.name from #temp a left join sysobjects b on a.objid=b.id 

order by a.type

图如下示:

另外的示例可以参见SQL SERVER的锁机制(一)——概述(锁的种类与范围)中的“示例代码二”相内容。

接上SQL SERVER的锁机制(一)——概述(锁的种类与范围)的更多相关文章

  1. 在SQL Server里为什么我们需要更新锁

    今天我想讲解一个特别的问题,在我每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们需要更新锁?在我们讲解具体需 ...

  2. sql server对并发的处理-乐观锁和悲观锁

    https://www.cnblogs.com/dengshaojun/p/3955826.html sql server对并发的处理-乐观锁和悲观锁 假如两个线程同时修改数据库同一条记录,就会导致后 ...

  3. SQL SERVER错误:已超过了锁请求超时时段。

    问题:远程连接数据库,无法打开视图,报错:SQL SERVER错误:已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222) 执行语句获取进程id select * f ...

  4. 通过DBCC Page查看在SQL Server中哪行数据被锁住了?

    原文:通过DBCC Page查看在SQL Server中哪行数据被锁住了? 如何查看被锁的是哪行数据?通过dbcc page可以. 要想明白这个问题: 首先,需要模拟阻塞问题,这里直接模拟了阻塞问题的 ...

  5. 偶然发现有的IIS里的程序,连接 不上SQL Server数据库, 超时

    经查应用程序池中, 有一个启用32位应用程序,  有时打开它就能连接上SQL SERVER了.

  6. 再谈mysql锁机制及原理—锁的诠释

    加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...

  7. 二、多线程基础-乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁

    1.10乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 ...

  8. sql server对并发的处理-乐观锁和悲观锁(转)

    假如两个线程同时修改数据库同一条记录,就会导致后一条记录覆盖前一条,从而引发一些问题. 例如: 一个售票系统有一个余票数,客户端每调用一次出票方法,余票数就减一. 情景: 总共300张票,假设两个售票 ...

  9. SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

    在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...

随机推荐

  1. 工具使用--Tomcat

    一.Tomcat 服务搭建 1.进入apache官网下载tomcat 8.在左手边的菜单区,选择download下的tomcat8 版本: PS:操作系统,文件类型 2.将zip文件下载,解压到本地: ...

  2. C++中的析构顺序和cosnt对象

    1,当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 2,单个对象创建时构造函数的调用顺序(工程经验总结): 1,调用父类的构造过程: 2,调用成员变量的构造函数(调用顺序与声明顺序相同): ...

  3. P2562kitty猫基因

    这道题是安徽NOI省选题,但是难度并没有那么难. 这道题是一个字符串的递归题,有很多大佬用线段树来写的(我也想学线段树,lowbit当头一棒).题意为全部相同则输出B或A,不同则分成长度相同的两个子串 ...

  4. QT DBUS: Not connected to D-Bus server, 注意source /etc/profile

    运行环境:ARM 运行如下代码: QDBusConnection bus = QDBusConnection::sessionBus(); if(!bus.registerService(" ...

  5. MySql+EF+CodeFirst

    ef+mssql详细是许多.net程序员的标配.作为一个程序员当然不能只会mssql这一个数据库,今天简单聊聊ef+mysql.推荐新人阅读. 1]首先创建一个mvc项目,如图: 创建完毕之后再nug ...

  6. 豆壳CMS本地安装教程

    DouPHP安装教程 一.下载DouPHP程序. 解压后得到三个文件夹 将upload文件夹里面的内容复制到wamp的www的文件夹. 二.打开浏览器,输入127.0.0.1. 勾选后选择下一步 注意 ...

  7. 新建maven子模块 出现 Unable to read parent POM

    新建maven子模块 出现 Unable to read parent POM错误 于是把pom.xml文件中的 中文字符全部删除 包括 注释 最后成功建立

  8. python面向对象--元类

    一个类没有声明自己的元类,默认他的元类就是type,除了使用内置元类type,我们也可以通过继承type来自定义元类,然后使用metaclass关键字参数为一个类指定元类 class Foo: def ...

  9. 19Redis

    1.概念 redis是一款高性能的NOSQL系列的非关系型数据库 1.1什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非 ...

  10. vector auto

    #include <iostream>#include <vector>#include <string>using namespace std;using std ...