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

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

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

名称

资源

缩写

编码

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

说明

数据行

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. 中标麒麟(linux)mysql配置记录

    刚装好mysql时,使用正常,后来再次使用时,连接不成功.(虚拟机中) 配置网络有问题, 1.我将ifcfg-*的两个文件备份后删除了. 2.点击右下角的小电脑,重新新建一个网络连接.把网络接入主机的 ...

  2. CF573E Bear and Bowling

    题目 我们设\(f_{i,j}\)表示前\(i\)个数中选\(j\)个的最大值. 那么显然有\(f_{i,j}=max(f_{i-1,j},f_{i-1,j-1}+j*a_i)\). 这个东西我们首先 ...

  3. 好用的 Puppeteer 辅助工具 Puppeteer Recorder

    Puppeteer Puppeteer 是一个Node库,它提供了一个高级API来控制DevTools协议上的Chrome或Chromium,常用于爬虫.自动化测试等,你在浏览器手动完成的大多数事情都 ...

  4. 工作日记之查看Linux系统里面的启动频率2017_02_07

    链接:http://www.jb51.net/LINUXjishu/19905.html 查看Linux里面的batch: cat /etc/crontab (1)0 19 * * 6 root /d ...

  5. chromium for android GPU进程结构分析

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/jaylinzhou/article/details/27517471 GPU进程的client(Br ...

  6. 奇葩的狐火浏览器border属性

    今天接到一个bug任务,客户反映火狐浏览器访问时某个商品楼层不显示商品.我立即打开我的火狐浏览器发现没有复现这个bug,后来经过一番折腾,才发现火狐浏览器缩放到90%时,商品楼层果然就消失了,而且每台 ...

  7. Ubuntu 增加新用户并赋予root权限及免密的方法

    添加用户 添加一个名为hylink的用户 adduser hylink 修改密码 passwd hylink Changing password for user hylink. New UNIX p ...

  8. Codeforces 946 课程表背包DP 数位DFS构造

    A B 给你A,B 两个数      1.a=0 OR b=0 break      2.a>=2b a=a-2b        3.b>=2a b=b-2a 如果只是单纯模拟肯定会超时 ...

  9. 【学习】014 深入理解Http协议

    Http协议入门 什么是http协议 http协议: 对浏览器客户端 和  服务器端 之间数据传输的格式规范 查看http协议的工具 1)使用火狐的firebug插件(右键->firebug-& ...

  10. python 编码解码

    一种编码想要转成另一种编码,需要先解码成万国码:Unicode,然后再从Unicode转成其他编码. 例如GBK格式想要转成utf-8,需要先按照 gbk 的格式 decode 成 unicode,再 ...