SQL 服务器意图锁是如何工作的?

How are SQL Server Intent-locks work?

我看过一些关于意向锁的文章,有很多意向锁,它们是意向共享(IS),意向独占(IX),共享意向独占(SIX),意向更新(IU),共享意向更新 (SIU),更新意图独占 (UIX)。有时我在锁统计信息中发现了这些锁,但我很难识别这些锁中的每一个,因为有时会发生许多性能问题

意向锁到底是用来做什么的?这些意向锁中的每一个如何在数据库并发性中相互对抗?

谢谢

意向锁是一种性能增强功能,允许 SQL 服务器在更精细的级别快速检查锁。

https://www.sqlpassion.at/archive/2016/05/16/why-do-we-need-intent-locks-in-sql-server/

关于这件事,我也得到了更多的信息。

意图共享 (IS) 使用此锁定模式,SQL 服务器保护在锁层次结构较低的某些资源上请求或获取的共享 (S) 锁。

意向独占 (IX) 这种锁模式是意向共享 (IS) 锁的超集,它不仅可以保护层次结构中较低资源的锁,还可以保护请求的或在层次结构中较低的某些资源上获得了独占 (X) 锁。

共享意图独占 (SIX) 此锁定模式保护请求或获取的共享 (S) 锁在层次结构中较低的所有资源上,并保护意图独占 (IX) 锁在某些资源上层次结构中较低的资源。资源一次只能有一个共享意向排他 (SIX) 锁,以防止其他事务修改它。但是,较低级别的资源可以具有意向共享 (IS) 锁,并且可以被其他事务读取。

意向更新 (IU) SQL 服务器在页面资源上使用此锁定模式仅用于保护所有较低级别资源上请求或获取的更新 (U) 锁定并在事务执行更新操作时将其转换为意向排他 (IX) 锁。

共享意向更新 (SIU) 这种锁模式是共享 (S) 和意向更新 (IU) 锁的组合,发生在事务分别获取每个锁但持有他们同时。

Update intent exclusive (UIX) 这种锁模式是由事务单独获取但同时持有的update (U) 和intent exclusive (IX) 锁的组合产生的时间.