博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server可以锁定的资源类型
阅读量:7053 次
发布时间:2019-06-28

本文共 1203 字,大约阅读时间需要 4 分钟。

SQL Server可以锁定的资源类型

SQL Server可以锁定不同类型的资源。这些可以被锁定的资源类型包括:RIDs或键(keys)(行级别),页(pages),对象(objects)(例如,表),数据库(databases)和其他。行位于页中,而也是包含表或索引数据的物理数据块。你首先应该熟悉这些资源类型,到更高级的阶段,你可能会要熟悉其他锁定资源类型,像盘区(extents),分配单元(allocation units),堆(heaps)或B树(B-trees)。
为了获得一个特定资源类型的锁,你的事务必需首先获得更高粒度级别上的相同模式的意向锁。例如,为了获得一个行上的排它锁,你的事务必需首先在行位于的页上申请意向排它锁和拥有页的对象上的意向排它锁。类似的,为了获得一个特定粒度级别上的共享锁,你的事务必需首先在更高粒度级别上申请一个意向共享锁。意向锁的目的是在更高的粒度级别上有效地检测到不兼容锁请求并阻止授予它们。例如,一个事务持有一个行锁,而另一个事务在行位于的整个页或表上请求一个不兼容的锁模式,因为第一个事务在页和表上获得的意向锁,对于SQL Server很容易识别冲突。意向锁不会干扰行级别粒度上的锁请求。例如,一个页上的意向锁不会阻止其它事务在该页的行上获得不兼容的锁模式。
锁兼容性表如下:

请求模式 授予了排它锁(X) 授予了共享锁(S) 授予了意向排它锁(IX) 授予了意向共享锁(IS)
是否授予排它锁请求?
是否授予共享锁请求?
是否授予意向排它锁请求?
是否授予意向共享锁请求?

 

SQL Server动态决定锁定哪个资源类型。当然,对于理想的并发,最好只锁定需要锁定的资源,也就是只锁定影响的行。然而,锁定需要内存资源和内部管理开销。因此,当SQL Server选择锁定哪个资源类型时,要同时考虑并发和系统资源。
SQL Server会首先申请细粒度的(fine-grained)锁(像行或页锁),在一定情况下,尝试升级细粒度的锁到更粗粒度(coarse-grained)锁(像表锁)。例如,当一条语句获得至少5000个锁,然后对于每1250个新锁,如果之前尝试锁升级不成功,那么锁升级(lock escalation)被触发。
在SQL Server 2008和SQL Server 2012,你可以通过使用ALTER TABLE语句设置一个表选项,来控制锁升级的行为方式。如果你喜欢,也可以禁用锁升级,或者决定在表级别(默认)或者分区级别发生锁升级。(一个表可以被物理组织到多个更小的单元叫做分区。)

翻译自

Itzik Ben-Gan
Microsoft SQL Server 2012 T-SQL Fundamentals
Page 302
Lockable Resource Types

转载地址:http://vasol.baihongyu.com/

你可能感兴趣的文章
javascript变量声明提升(hoisting)
查看>>
有价值的数据
查看>>
LayUi超级好用的前端工具
查看>>
[Ubuntu] ubuntu的tty下挂载移动硬盘拷贝数据
查看>>
PowerBI分析个人Exchange邮箱数据
查看>>
犯了个低级错误
查看>>
Win7部署基础知识(7):使用Imagex捕获和安装映像
查看>>
Outlook Anywhere 客户端配置详解
查看>>
IOS在Xcode 4.x以上如何 创建 和 添加 静态库
查看>>
WebSphere was 7.0修改端口号为80,修改上下文根
查看>>
Repeater控件数据导出Excel
查看>>
下载Android源码出现的问题
查看>>
远程桌面如何复制本地文件 远程桌面拷贝电脑上的文件方法
查看>>
[转]解决JS浮点数(小数)计算加减乘除的BUG
查看>>
ASP.NET MVC应用程序的安全性介绍总括(高级编程)
查看>>
Java模拟Delegate
查看>>
记录下,我们平时开发当中不得不知道的HTTP状态码
查看>>
HDU-1045 Fire NetFire Net 最大团
查看>>
VC++6.0 按F1无法打开 MSDN 的解决办法
查看>>
Eclipse自动部署项目到Tomcat的webapps下的有效方法
查看>>