锁存器和自旋锁(Latch&Spinlock)----Latch类型及模式

简介:

转载自:http://blog.csdn.net/burgess_liu/article/details/19607151


Latch类型

Latch的存在是为了保护内存里的数据。有数百种被不同类型的Latch,其中大部分你不大可能会遇到,然而Latch等待偶尔会显示在sys.dm_os_wait_stats中。SQL Server中,Latch可分为两大类,一类是服务缓冲池的被称为BUF Latch(如sys.dm_os_wait_stats里面的PAGELATCH或PAGEIOLATCH,sys.dm_os_latch_stats中的Buffer Latch类);另一类是Non-BUF。通过SELECT * FROM sys.dm_os_latch_stats你可以看到超过150种Latch类型,其中BUFFER类型的最多。如果你查看sys.dm_os_wait_stats的内容,你会看到LATCH_, PAGELATCH_ 和PAGEIOLATCH_打头的Latch,其中LATCH_打头的等待都是用于Non-BUF类型,PAGELATCH_打头的Latch应用于各种页,PAGEIOLATCH_打头的Latch用于数据从磁盘移到RAM。

Latch模式

Latch模式锁模式简单,前者更少,并且兼容性也直接得多。从下面的查询结果中可以看到,有6中Latch模式:NL, KP, SH, UP, EX, DT。

wKiom1dqahvxOGsNAADRkRA9Wf0888.jpg


NL:内置的Null Latch,不需要考虑它。它基本上表示没有Latch在使用,所以它甚至没有记录在正常条件下。

KP:Keep Latch,用于表明需要一个特定的页来完成某事,不应该被破坏掉。

SH:Shared Latch,从页读取数据时需要它。

UP:Update Latch,表明一个页正在被更新,但不是页里面的表数据。与T-SQL中的UPDATE(需要EX Latch)没有关系。

EX:Exclusive Latch,表明数据正在被改变或添加。两个EX Latch不能同时保留在用一个页上。

DT:Destroy Latch,表明页正在从内存中移除。当页的记录被移除时,被删除的页会从Lazy Writer进程中获得一个DT Latch。记住,这未必意味着数据被删除,它可以简单地从Buffer Cache中移除,数据副本仍然驻留在磁盘。然而,从Buffer Cache中移除一个页要走多个步骤,因为SQL Server引擎维护一个哈希表,哈希表罗列当前哪些页在内存里,否则,它就不知道页的内存地址。如果页上有其他Latch,那么就不能有DT Latch,这使得KP Latch更加重要,当需要一个页,但尚未读写时,就要用KP Latch来阻止获得DT Latch。

Latch兼容性


wKiom1dqai6TLL4xAAAxyhVy9is223.jpg


授予顺序

在任何系统中,随着处理器线程数量的增长,大量的请求会排队等待一个特定的页。对于一个没有Latch的页,第一个想要获得Latch的进程会被授予一个Latch,这个不难理解,但当更多的进程开始出现时,行为就有点不同了。KP Latch会完全跳过队列,除非页上有一个DT Latch,KP Latch会往前跳并保持活动的状态。其他的Latch会等待,加入到队列中。当当前的Latch释放了,队列中的第一个Latch会被授予,但这里会有特殊情况发生,队列中和第一个Latch兼容的任何其他Latch会被允许,即使在它前面有不兼容的锁。通过这种方式,队列中的下一个Latch类型总会被授予,但对于其他Latch,在关门的同时也有机会跳进来。

Latch等待

Latch等待是指Latch请求不能被立即授予,其原因有两个,一个是该Latch已经被访问,另一个是与下一个有冲突。仅仅写入Latch模式(UP、EX、DT)提供阻塞任务信息。单任务等待期间,阻塞信息有可能改变。一个任务也可能阻塞它自身,这是由于数据访问的异步性质。

SUPERLATCHES/SUBLATCHES

 经常使用索引的根页常被Latch,每次在索引上执行寻找(seek)时,都必须读取根页以便为找到包含剩余数据的页的路径。SuperLatch通过把单Latch放进一个Sublatch阵列中,一个SubLatch对应一个CPU内核的方式,来提升有32个或更多个逻辑处理器的系统性能。http://blogs.msdn.com/b/psssql/archive/2009/01/28/hot-it-works-sql-server-superlatch-ing-sub-latches.aspx上面有一些有用的关系图来显示这种状况。图7-17显示的正常的Latch情况,而图7-18显示的是SuperLatch和SubLatch的情况。当一个处理器需要EX Latch的时候就会出问题,因为要做到这一点,SuperLatch必须协调所有的SubLatch,来确保它们都能在合适的时间转换成EX Latch。这比获取一个正常的EX Latch更耗资源,所以,如果经常发生并到一定程度,那么SuperLatch就会降级为一个普通的Latch。SuperLatch对于几乎总是只读的页是有利的。
wKiom1dqaknhqJ0LAACVbR_in7E553.jpg













本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1791860 ,如需转载请自行联系原作者


相关文章
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
527 5
|
机器学习/深度学习 人工智能 机器人
计算机视觉技术介绍
【10月更文挑战第14天】 计算机视觉技术介绍
|
机器学习/深度学习 存储 人工智能
提升深度学习性能的利器—全面解析PAI-TorchAcc的优化技术与应用场景
在当今深度学习的快速发展中,模型训练和推理的效率变得尤为重要。为了应对计算需求不断增长的挑战,AI加速引擎应运而生。其中,PAI-TorchAcc作为一个新兴的加速引擎,旨在提升PyTorch框架下的计算性能。本文将详细介绍PAI-TorchAcc的基本概念、主要特性,并通过代码实例展示其性能优势。
18521 166
|
10月前
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
391 12
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
591 0
|
人工智能 边缘计算 算法
物联网与人工智能:开启未来世界的智慧之门
在科技飞速发展的时代,物联网(IoT)与人工智能(AI)正逐步重塑我们的生活方式。物联网通过连接物理世界与数字世界,构建了庞大信息网络;人工智能则赋予这一网络以智慧,提升其效能。本文从定义、发展历程出发,探讨两者如何在智能硬件、制造、城市、医疗及交通等领域融合创新,并展望5G、边缘计算、算法突破及安全隐私保护等未来趋势,共同开启智慧未来的大门。
536 1
|
负载均衡 应用服务中间件 Linux
在Linux中,Nginx如何实现负载均衡分发策略?
在Linux中,Nginx如何实现负载均衡分发策略?
|
算法 Java
Java【算法分享 01】道格拉斯-普克 Douglas-Peucker 抽稀算法(算法流程图解+使用JDK8方法实现+详细注解源码)
Java【算法分享 01】道格拉斯-普克 Douglas-Peucker 抽稀算法(算法流程图解+使用JDK8方法实现+详细注解源码)
968 0
|
关系型数据库 MySQL Java
RDS MySQL SSL 使用详解
RDS MySQL SSL 使用详解
|
程序员 vr&ar C语言
C/C++静态库和动态库的制作、使用、优缺点
C/C++静态库和动态库的制作、使用、优缺点
409 0