SQLSERVER中的自旋锁
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中的自旋锁相关推荐
- java 自旋锁_搞懂Java中的自旋锁
轻松搞懂Java中的自旋锁 前言 在之前的文章<一文彻底搞懂面试中常问的各种"锁">中介绍了Java中的各种"锁",可能对于不是很了解这些概念的同学 ...
- 探秘最新Linux内核中的自旋锁
一.前言 目前最新内核中的自旋锁已经进化成queued spinlock,因此需要一篇新的自旋锁文档来跟上时代.此外,本文将不再描述基本的API和应用场景,主要的篇幅将集中在具体的自旋锁实现上.顺便说 ...
- 自旋锁 Linux内核,Linux内核中的自旋锁
自旋锁不会引起睡眠,当一个进程在访问内核无法获取自旋锁时,会进入忙循环,一直等待下去. 实例: Pcilynx.c (\linux-2.6.30.4\drivers\ieee1394) 1 声明 st ...
- 自旋锁以及Java中的自旋锁的实现
什么是自旋锁 多线程中,对共享资源进行访问,为了防止并发引起的相关问题,通常都是引入锁的机制来处理并发问题. 获取到资源的线程A对这个资源加锁,其他线程比如B要访问这个资源首先要获得锁,而此时A持有这 ...
- 【SqlServer】SqlServer中的更新锁(UPDLOCK)
UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改.当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加 ...
- java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...
一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...
- Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁
Linux内核中的同步原语 自旋锁,信号量,互斥锁,读写信号量,顺序锁 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Linux 内核中的同步原 ...
- 设备驱动中的并发控制-自旋锁
在linux中提供了一些锁机制来避免竞争,引入锁的机制是因为单独的原子操作不能满足复杂的内核设计需求.Linux中一般可以认为有两种锁,一种是自旋锁,另一种是信号量.这两种锁是为了解决内核中遇到的不同 ...
- 驱动开发笔记1—内核中的事件、进程、线程、自旋锁
内核模式下的等待 KeWaitForSingleObject() 和 KeWaitForMultipleObjects() NTSTATUS KeWaitForSingleObject(IN PVOI ...
最新文章
- Qt计算器开发(二):信号槽实现数学表达式合法性检查
- 【剑指offer-Java版】01为了准备面试也为了提升编程技巧开始刷宝典了
- 次小生成树(Prim + Kruaskal)
- Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?
- 双击SDK Manager.exe和AVD Manager.exe时,弹出提示:failed to execute tools\android.bat解决办法
- 差分形式的牛顿插值公式(理论)
- 深入SQL SERVER 2000的内存管理机制
- PHP 正则表达式分割 preg_split 与 split 函数
- 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
- Google File System 学习笔记
- sql查看视图字段信息_高级(视图 索引)
- python面试题(5)--- 检测 字符串 是否可以转换成 数字
- 进程,线程和协程 并行与并发
- IntelliJ IDEA安卓开发环境搭建
- python中全部注释_Python中的注释
- Visual Studio完成并换行快捷键
- 玩转基因组浏览器之查看MAF文件
- 有米科技股份有限公司
- centos7 scons安装_安装Python和Scons
- 10G至40G互连方案-40G QSFP+ PSM4单模光模块
热门文章
- Yii 2.0: yii2-highcharts-widget创建饼状图
- windows 服务实例
- tslib1.4安装小记
- flash跨域访问解决办法
- linux下达梦数据库启动_linux 平台 达梦DM 7 数据库 启动与关闭
- java singleton inner class_关于java:Singleton设计模式实现
- java 注解数组初始化_Java 之 注解的定义
- postman mysql_postman连接mysql执行操作
- 电缆的验证、鉴定和认证应该选择什么测试工具
- 好分数阅卷3.0_自考通过率低?一位资深阅卷老师的自述