Heim > Datenbank > MySQL-Tutorial > Hauptteil

SQLSERVER中的自旋锁

WBOY
Freigeben: 2016-06-07 15:44:55
Original
1111 Leute haben es durchsucht

SQLSERVER中的自旋锁 在SQLSERVER中的锁有很多,例如什么意向共享锁,排他锁,行,页锁 这些都属于LOCK 而latch比lock更轻量级,只在内存中存在,一般用来锁住数据页面,防止多人同时修改内存中的一个数据页面 而今天介绍的spin lock则比上面两种锁更更轻量

SQLSERVER中的自旋锁

在SQLSERVER中的锁有很多,例如什么意向共享锁,排他锁,行,页锁 这些都属于LOCK

而latch比lock更轻量级,只在内存中存在,一般用来锁住数据页面,防止多人同时修改内存中的一个数据页面

而今天介绍的spin lock则比上面两种锁更更轻量级的

spin lock介绍:

lock和latch以外还有一种更轻量级的同步资源:spin lock(自旋锁),第一次看到spin lock这个名词是在潘爱民老师写的

《Windows内核原理与实现》这本书里看到的,估计SQLSERVER也借鉴了Windows操作系统的一些同步技术。

 

在SQLSERVER里,有些spin lock很快就能得到也很快会被释放,一般来讲不大会发生长时间等待的同步资源,

SQLSERVER选择让线程在CPU上稍微等一会(所谓自旋),而不是将CPU资源让出来。由于资源很快能够得到,

这样处理能够减少CPU上线程的切换,更有效率(Windows也是这样做的减少线程切换的开销,经常切换线程上下文是很耗费CPU资源的)

 

自旋锁有可能带来的一些瓶颈:

像latch一样,spin lock是一种很轻量级的资源,正常情况下不应该成为SQLSERVER的瓶颈。当看到SQLSERVER中存在很多任务都是running

或者runnable状态可能就是spin lock的原因。在SQLSERVER内部,自旋锁的种类还是挺多的。在SQLSERVER2005里有172种那么多

大家可以运行下面语句,得到SQLSERVER在所有自旋锁上等待的次数

<span>1</span> DBCC SQLPERF(spinlockstats)
Nach dem Login kopieren

 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!