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在所有自旋锁上等待的次数

1 DBCC SQLPERF(spinlockstats)

SQLSERVER中的自旋锁相关推荐

  1. java 自旋锁_搞懂Java中的自旋锁

    轻松搞懂Java中的自旋锁 前言 在之前的文章<一文彻底搞懂面试中常问的各种"锁">中介绍了Java中的各种"锁",可能对于不是很了解这些概念的同学 ...

  2. 探秘最新Linux内核中的自旋锁

    一.前言 目前最新内核中的自旋锁已经进化成queued spinlock,因此需要一篇新的自旋锁文档来跟上时代.此外,本文将不再描述基本的API和应用场景,主要的篇幅将集中在具体的自旋锁实现上.顺便说 ...

  3. 自旋锁 Linux内核,Linux内核中的自旋锁

    自旋锁不会引起睡眠,当一个进程在访问内核无法获取自旋锁时,会进入忙循环,一直等待下去. 实例: Pcilynx.c (\linux-2.6.30.4\drivers\ieee1394) 1 声明 st ...

  4. 自旋锁以及Java中的自旋锁的实现

    什么是自旋锁 多线程中,对共享资源进行访问,为了防止并发引起的相关问题,通常都是引入锁的机制来处理并发问题. 获取到资源的线程A对这个资源加锁,其他线程比如B要访问这个资源首先要获得锁,而此时A持有这 ...

  5. 【SqlServer】SqlServer中的更新锁(UPDLOCK)

    UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改.当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加 ...

  6. java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...

    一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...

  7. Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁

    Linux内核中的同步原语 自旋锁,信号量,互斥锁,读写信号量,顺序锁 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Linux 内核中的同步原 ...

  8. 设备驱动中的并发控制-自旋锁

    在linux中提供了一些锁机制来避免竞争,引入锁的机制是因为单独的原子操作不能满足复杂的内核设计需求.Linux中一般可以认为有两种锁,一种是自旋锁,另一种是信号量.这两种锁是为了解决内核中遇到的不同 ...

  9. 驱动开发笔记1—内核中的事件、进程、线程、自旋锁

    内核模式下的等待 KeWaitForSingleObject() 和 KeWaitForMultipleObjects() NTSTATUS KeWaitForSingleObject(IN PVOI ...

最新文章

  1. Qt计算器开发(二):信号槽实现数学表达式合法性检查
  2. 【剑指offer-Java版】01为了准备面试也为了提升编程技巧开始刷宝典了
  3. 次小生成树(Prim + Kruaskal)
  4. Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?
  5. 双击SDK Manager.exe和AVD Manager.exe时,弹出提示:failed to execute tools\android.bat解决办法
  6. 差分形式的牛顿插值公式(理论)
  7. 深入SQL SERVER 2000的内存管理机制
  8. PHP 正则表达式分割 preg_split 与 split 函数
  9. 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
  10. Google File System 学习笔记
  11. sql查看视图字段信息_高级(视图 索引)
  12. python面试题(5)--- 检测 字符串 是否可以转换成 数字
  13. 进程,线程和协程 并行与并发
  14. IntelliJ IDEA安卓开发环境搭建
  15. python中全部注释_Python中的注释
  16. Visual Studio完成并换行快捷键
  17. 玩转基因组浏览器之查看MAF文件
  18. 有米科技股份有限公司
  19. centos7 scons安装_安装Python和Scons
  20. 10G至40G互连方案-40G QSFP+ PSM4单模光模块

热门文章

  1. Yii 2.0: yii2-highcharts-widget创建饼状图
  2. windows 服务实例
  3. tslib1.4安装小记
  4. flash跨域访问解决办法
  5. linux下达梦数据库启动_linux 平台 达梦DM 7 数据库 启动与关闭
  6. java singleton inner class_关于java:Singleton设计模式实现
  7. java 注解数组初始化_Java 之 注解的定义
  8. postman mysql_postman连接mysql执行操作
  9. 电缆的验证、鉴定和认证应该选择什么测试工具
  10. 好分数阅卷3.0_自考通过率低?一位资深阅卷老师的自述