我知道重做 DDL 操作的重做线程可能会被SELECT
可读辅助副本上的长时间运行查询阻塞,因为后者持有锁,Sch-S
从而阻止前者获取锁Sch-M
。问题是——被阻止的 DDL 操作是否会通过SELECT
阻止他们获取Sch-S
锁来阻止对该副本的后续查询?如果是这样,从用户的角度来看,它可以有效地导致中断......
我知道重做 DDL 操作的重做线程可能会被SELECT
可读辅助副本上的长时间运行查询阻塞,因为后者持有锁,Sch-S
从而阻止前者获取锁Sch-M
。问题是——被阻止的 DDL 操作是否会通过SELECT
阻止他们获取Sch-S
锁来阻止对该副本的后续查询?如果是这样,从用户的角度来看,它可以有效地导致中断......
在您描述的场景中,后续读取将被阻止。
这是我的测试。
Windows Server 2016 Standard 10.0 (内部版本 14393:)(管理程序)
一个长时间运行的选择正在从会话 55 运行。
当上面的选择语句在辅助副本上运行时,我在主副本上发布了这个架构更改。
重做线程被会话 55 阻塞,因为它无法获取
LCK_M_SCH_M
.我现在正在会话 134 的同一个表上运行另一个 select 语句。
会话 134 由于未获取而被 149 阻止
LCK_M_SCH_S
。