SQL Server 意向锁

news2024/11/17 17:27:11

SQL Server 数据库引擎使用意向锁来确保共享锁(S 锁)或排他锁(X 锁)放置在锁层次结构的底层资源上。 意向锁之所以命名为意向锁,是因为在较低级别锁前可获取它们,因此会通知意向将锁放置在较低级别上。

意向锁有两种用途:

  • 防止其他事务以会使较低级别的锁无效的方式修改较高级别资源。

  • 提高SQL Server 数据库引擎在较高的粒度级别检测锁冲突的效率。

意向锁包括意向共享 (IS)、意向排他 (IX) 以及意向排他共享 (SIX)

锁模式

说明

意向共享 (IS)

保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁。

意向排他 (IX)

保护针对层次结构中某些(而并非所有)低层资源请求或获取的排他锁。IX 是 IS 的超集,它也保护针对低层级别资源请求的共享锁。

意向排他共享 (SIX)

保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁以及针对某些(而并非所有)低层资源请求或获取的意向排他锁。 顶级资源允许使用并发 IS 锁。例如,获取表上的 SIX 锁也将获取正在修改的页上的意向排他锁以及修改的行上的排他锁。 虽然每个资源在一段时间内只能有一个 SIX 锁,以防止其他事务对资源进行更新,但是其他事务可以通过获取表级的 IS 锁来读取层次结构中的低层资源。

意向更新 (IU)

保护针对层次结构中所有低层资源请求或获取的更新锁。仅在页资源上使用 IU 锁。 如果进行了更新操作,IU 锁将转换为 IX 锁。

共享意向更新 (SIU)

S 锁和 IU 锁的组合,作为分别获取这些锁并且同时持有两种锁的结果。例如,事务执行带有  PAGLOCK 提示的查询,然后执行更新操作。带有 PAGLOCK 提示的查询将获取 S 锁,更新操作将获取 IU 锁。

更新意向排他 (UIX)

U 锁和 IX 锁的组合,作为分别获取这些锁并且同时持有两种锁的结果。

我们先看看锁的粒度对应的简单锁层次结构(如下图),SQL Server 可以在不同的级别加锁,如行级别、页级别、表级别、数据库级。

现在,假设我们按聚集索引查询某行或几行数据(如下图),此时相应的行数据将加上共享锁(S),而该行数据所在的页、表,将加上意向共享锁(IS)(排它锁或更新锁同理)。这时候,如果其他事务要访问锁定数据页或者表,需要排它锁(X),则该事务将被堵塞,因为意向锁(IS)与排它锁(X)是冲突的。

官网有一张锁模式的兼容性矩阵,可以查看各种锁模式直接的关系。

刚才提到的是其他事务访问同一个资源出现了冲突导致堵塞。那对于同一个事物,行已经加了共享锁,此时需要进一步更改(部分)数据,那么加锁的过程是什么样的呢?

如果需要更改数据,最终是要加上排它锁(X),但是排它锁(X)是与共享锁(S)冲突的。而进程对能对同一个资源同时只能持有一个锁,所有只能释放共享锁(S),再加上排它锁(X),如果直接释放,资源可能被其他进程夺走,这种方法不是好的处理方式。

最好的处理方法,首先在表级资源检测是否能获取意向排他共享(SIX),意向排他共享(SIX)与意向共享锁(IS)并不冲突,可直接转换;在页级资源检测是否能获取意向排它锁(IX),意向排它锁(IX)与意向共享锁(IS)并不冲突,可直接转换;在行级别直接转换为排它锁(X)(以上检查已经确认已可以直接加排他锁)。

类似地,当进程对表具有共享锁(S)并在该表的行上具有更新锁(U)时会发生共享意向更新(SIU),而当进程对表具有更新锁(U)而对行具有排他锁时会发生更新意向排他(UIX)。

意向锁的目的,是告诉其他访问者,在当前锁层次结构中,下面的某个低级别的粒度正常持有锁,这样可以快速检测冲突,快速进行访问,减少了资源消耗。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fastadmin后台用户管理中余额记录显示

查询明细JS代码 {field: buttons,width: "200px",title: __(查询明细),table: table,events: Table.api.events.operate,buttons: [{name: money,text: __(余额),title: __(余额),classname: btn btn-xs btn-success btn-dialog,icon: fa fa-database,url: user/us…

按照条件向Spring容器中注册bean

1.Conditional注解概述 Conditional注解可以按照一定的条件进行判断,满足条件向容器中注册bean,不满足条件就不向容器中注册bean。 package org.springframework.context.annotation;import java.lang.annotation.Documented; import java.lang.annota…

数据转换器的工程师指南

数据转换是连接模拟和数字世界的重要电路,在大多数嵌入式系统中,您都会发现模拟到数字转换和数字到模拟转换,从物联网(IoT)传感器到无线网络,从智能家居自动化到电源,数据转换无处不在。在本文中…

Git在工作中的使用流程

Git中的分支 master分支:所有用户可见的正式版本,都从master发布(也是用于部署生产环境的分支,确保master分支稳定性)。主分支作为稳定的唯一代码库,不做任何开发使用。master 分支一般由develop以及hotfi…

自学黑客/网络安全,三个月究竟能学到多少知识?

现在可以看到很多标题都是三个月零基础转行网络安全,三个月成为网络安全工程师月入15K,还有很多一系列类似吸引人的标题,那这些话是不是真实情况呢?那我们就来整理一下这三个月可以学到什么,然后再来看根据三个月的学习…

PyTorch训练提升

1. 更换学习率schedule 学习率 schedule 的选择对模型的收敛速度和泛化能力有很大的影响。Leslie N. Smith 等人在论文《Cyclical Learning Rates for Training Neural Networks》、《Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates 》…

web前端 --- CSS(1)

CSS&#xff08;Cascade Style Sheet&#xff09; --- 级联样式表&#xff08;1&#xff09; <head><style>选择器{属性名&#xff1a;属性值;属性名&#xff1a;属性值;}</style> </head>属性名&#xff1a;修饰对象的属性&#xff08;样式&#xff…

docker ——安装tomcat

环境&#xff1a;centos7 安装tomcat 第一步&#xff1a;联网 第二步&#xff1a;开启docker systemctl start docker 第三步&#xff1a;拉取镜像 docker pull tomcat //下载tomcat镜像 docker pull tomcat 第四步&#xff1a;创建容器 docker run -d …

Solr之查询页面,索引,SolrJ

文章目录 1 Solr查询1.1 查询页面1.1.1 基本查询1.1.2 Solr检索运算符1.1.3 高亮1.1.4 分组1.1.4.1 分组&#xff08;Field Facet&#xff09;1.1.4.2 分组&#xff08;Date Facet&#xff09; 1.2 创建索引文件1.2.1 使用Post上传文件1.2.1.1 Linux下使用1.2.1.1.1 索引XML1.2…

BDCC- 数据湖体系

文章目录 数据湖的概念数据湖 vs 数据仓库 vs Lakehouse① 业界进展&#xff08;Databricks 2.0&#xff09;-湖上建仓② 业界进展&#xff08;Snowflake EDW 2.0&#xff09;-仓外挂湖 LakeHouse 的演进&#xff08;1&#xff09;Lakehouse 的演进路线&#xff08;2&#xff0…

基于matlab的长短期神经网络LSTM的电力负荷预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的电力负荷预测 MATALB代码 效果图 结果分析 展望 参考论文 背影 电力负荷预测的实质是从已知的电力系统&#xff0c;经济&#xff0c;社会&#xff0c;气象等情况出发&#xff0c;根据历史负荷变化规律…

CSDN 周赛 48 期

CSDN 周赛 48 期 工作日参赛1、题目名称&#xff1a;最后一位2、题目名称&#xff1a;天然气订单3、题目名称&#xff1a;排查网络故障4、题目名称&#xff1a;运输石油小结 工作日参赛 说实话&#xff0c;今天是周末&#xff0c;但是今天也是工作日&#xff0c;老顾已经预计到…

Tossim 教程

系列文章目录 TinyOS 系列文章【一】&#xff1a;TinyOS 配置教程 TinyOS 系列文章【二】&#xff1a;Tossim 教程 文章目录 系列文章目录前言1. Tossim 简介2. TOSSIM 仿真2.1. 编译 TOSSIM2.2. 基于 Python 的仿真2.3. 调试语句2.4. 网络配置 总结 前言 本文主要用于记录在…

打破广播电视行业前端摄录设备依赖进口局面,BOSMA博冠全新国产8K摄像机重新定义广播世界

《世界广播电视》杂志曾经预测&#xff0c;2025年全球将有1000个超高清频道在播出。中国广电总局提出&#xff0c;到2025年底&#xff0c;标清频道基本关停&#xff0c;省级电视台要基本具备超高清电视制播能力。视频超高清已成为一个国际趋势。中国有14亿人口&#xff0c;是全…

蓝牙设备节点协议栈基础知识

蓝牙设备节点协议栈基础知识 一&#xff1a;TTY&#xff08;虚拟控制台&#xff0c;串口以及伪终端设备组成的终端设备&#xff09; Android/Linux 几乎所有的外设都以”设备节点”的形式存在 例如PC插入串口,会识别成COM1/COM2…在linux下面则以/dev/ttyXXX的形式存在,如/dev…

国家信息安全水平考试中NISP一级网络安全证书介绍

1、什么是NISP? 国家信息安全水平考试&#xff08;National Information Security Test Program&#xff0c;简称NISP&#xff09;&#xff0c;是由中国信息安全测评中心实施培养国家网络空间安全人才的项目。 2、考取NISP一级认证的同学就业岗位和薪资标准有那些呢&#xf…

Docker创建镜像,建立网桥,容器制作虚拟机

新建基础镜像&#xff0c;希望能够SSH&#xff0c;安装java&#xff0c;用户&#xff0c;声明22端口等等&#xff1b;拷贝基础hadoop安装文件 新建Dockerfile FROM centos:7.9.2009RUN rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/local…

【C++】Windows使用Visual Studio C++链接云数据库PostgreSQL(沉浸式老爷教学)

Windows使用C Visual Studio链接云数据库PostgreSQL 一、前置条件二、安装PostgreSQL工具三、编译libpqxx库四、Visual Studio配置测试**如果对您有帮助&#xff0c;关注收藏&#xff01;** 关注 “测试开发自动化” 公众号&#xff0c;获取更多学习内容 一、前置条件 下载lib…

MQTT 开放基准测试规范:全面评估你的 MQTT Broker 性能

引言 我们很高兴地宣布&#xff1a;由 EMQ 提供的 MQTT 开放基准测试规范现已正式发布&#xff01; 该测试规范包含了实用的典型使用场景、一套衡量 Broker 性能的主要指标&#xff0c;以及一个模拟负载和收集测试结果的工具&#xff0c;可以帮助开发者评估 MQTT Broker 的可…

让同为2.4G的ZigBee与Wi-Fi相容的解决方案解析

2.4G (WIFI,BT,ZIGBEE,普通2.4G 无线) 4种2.4G 无线通信协议。 普通2.4G 无线 最便宜。 众所周知&#xff0c;小米的智能套装包含的4件套&#xff0c;人体传感器、门窗传感器、无线开关与多功能网关采用的是基于NXP的一颗工业级ZigBee射频芯片–JN5168进行组网通讯。而多功能网…