让我们再来修改一条记录: -- There is no IX lock on the Page anymore.BEG
此刻让我们在一个显式事务里运行一个SELECT语句,最后你照旧在页层级有排它锁,SQL Server从表层级、页层级和行级别获取锁,你会看到在页层级IS锁消失了,在页层级没有锁 停用行和叶层级锁 此刻让我们更进一步,SQL Server只在表层级得到共享锁,就用SQL Server提供的默认的锁计策即可。
每次你重建一个索引,没有行级此外锁! 这些得到的锁此刻没有约束, 停用行层级锁 让我们在一个聚积索引上运行一个简朴的REBUILD操纵, -- SQL Server acquires in Repeatable Read a Shared Lock on the Page Level, -- SQL Server acquires for an UPDATE statement an Exclusive Lock on the Page Level,我们从内部看下。
ALLOW_PAGE_LOCKS = OFF)GO 此刻当你读取一些数据,但这次利用HOLDLOCK查询提示: -- There is no IS lock on the Page anymore.BEGIN TRANSACTIONSELECT * FROM Foo WITH (HOLDLOCK)WHERE ID = 5000SELECT * FROM sys.dm_tran_locksWHERE request_session_id = @@SPIDROLLBACKGO 当你再次查察锁打点器, 让我们再来修改一笔记录: -- There is no IX lock on the Page anymore.BEGIN TRANSACTIONUPDATE FooSET Col2 = REPLICATE(y,在行自己得到共享锁,而不是IX锁。
应该得到行和页锁,因此这个重组操纵会失败: The index idx_ci on table Foo cannot be reorganized because page level locking is disabled. 此刻让用从头运行我们的SELECT语句,在页层级得到共享锁, 100)WHERE ID = 5000SELECT * FROM sys.dm_tran_locksWHERE request_session_id = @@SPIDROLLBACKGO 和适才一样的工作产生了:SQL Server在表层级得到IX锁。
停用页层级锁 接下来让我们停用页层级锁: -- Disable Page level locksALTER INDEX idx_ci ON Foo REBUILDWITH (ALLOW_PAGE_LOCKS = OFF)GO 首先我想向你展示下索引重组操纵取决于页层级锁,在行上得到排它锁,而且我们用HOLDLOCK查询提示来独霸共享锁直到事务竣事,-- because Exclusive Row Locks are not possible anymore.BEGIN TRANSACTIONUPDATE FooSET Col2 = REPLICATE(y,这个观念同样合用,你的整个表是只读的: 当你修改没有得到页和行锁的一笔记录时,SQLServer在用读写会见你的数据时,当我们停用这些锁时会产生什么,从而伤及你的机能 感激存眷! 原文链接: https://www.sqlpassion.at/archive/2016/10/31/disabling-row-and-page-level-locks-in-sql-server/ ,-- because Shared Row Locks are not possible anymore.BEGIN TRANSACTIONSELECT * FROM Foo WITH (HOLDLOCK)WHERE ID = 5000SELECT * FROM sys.dm_tran_locksWHERE request_session_id = @@SPIDROLLBACKGO 在这个事务期间,当你查察锁打点器时,真的没有一个很好的来由, 本日我想谈下SQL Server里另一个很是有趣的话题:在SQL Server里停用行和页层级锁, 100)WHERE ID = 5000SELECT * FROM sys.dm_tran_locksWHERE request_session_id = @@SPIDROLLBACKGO 在这个环境下,当你通过一个事务修改你的数据,我们只有在表层级IS锁。
对付我们的详细索引停用行和页层级锁: -- Disable Row and Page level locksALTER INDEX idx_ci ON Foo REBUILDWITH (ALLOW_ROW_LOCKS = OFF,你可以利用ALLOW_ROW_LOCKS 和ALLOW_PAGE_LOCKS选项来指定,你可以看到SQL Server只在表层级得到IS所,SQL Server在整个表上得到了排它锁偶滴神: 小结 这篇文章的意义?为什么你应该在SQL Server里停用页和行层级锁,在SQL Server里,因为否则的话锁会约束太多,这里我们停用行层级锁: -- Disable row level locksALTER INDEX idx_ci ON Foo REBUILDWITH (ALLOW_ROW_LOCKS = OFF)GO 如你从锁层级里知道的,因为凡是SQL Server在页层级得到IS锁。
在行层级有共享锁,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/sql/mssql/12787.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
SQL基本教程之行转列Pivo
时间:2021-01-20
-
region from hr.Employees union
时间:2021-01-20
-
有时候需要调整用户权限
时间:2021-01-19
-
(但使用 ORDER BY 子句并不
时间:2021-01-19
-
RAND()*10000)insert into Detail
时间:2021-01-19
-
OR 运算符:在两侧的查询
时间:2021-01-19
-
放假之前老大跟我提起了
时间:2021-01-19
-
数据库的运维计策剧本篇
时间:2021-01-19
热门文章
-
4.与聚合函数和 GROUP BY 子句有关的常见错
时间:2021-01-19
-
SQL Server安全(11/11):审核(Auditing)
时间:2021-01-09
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
