设为首页 收藏本站
查看: 871|回复: 0

[经验分享] 锁存器和自旋锁(Latch&Spinlock)----Latch类型及模式

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 10:00:58 | 显示全部楼层 |阅读模式
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。
SouthEast.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兼容性
SouthEast.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对于几乎总是只读的页是有利的。
SouthEast.jpg
SouthEast.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22275-1-1.html 上篇帖子: 锁存器和自旋锁(Latch&Spinlock)----理解Latch和Spinlock 下篇帖子: 锁存器和自旋锁(Latch&Spinlock)----监视Latch和Spinlock
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表