只读辅助数据库上的锁是否传播到读/写数据库

Gav*_*vin 7 sql-server-2012 availability-groups

我正在考虑使用 SQL Server 2012 中的 SQL Server 可用性组将我们主数据库上的报告卸载到第二个只读服务器,该服务器通过可用性组保持同步。

我的问题是,当我在只读服务器上运行大型报告时,如果在读/写版本上运行通常会产生大量阻塞,锁是否会从只读服务器传播回读/写服务器?还是锁只保留在只读服务器上,只会导致等待同步的数据阻塞?

尝试查看拥有只读服务器是否可以解决我遇到的一些问题。

Rem*_*anu 12

  1. AlwaysOn 辅助节点将所有读取映射到版本化读取,这些读取(几乎)是无锁的
  2. 即使使用版本化读取,也有一些(很少)锁定,例如。模式稳定性锁定对象。从来没有任何类型的锁从辅助锁传播到主锁。此外,不能有是从辅助节点到主节点的任何锁定传播,仅仅是因为辅助节点是主节点的回溯副本。将对象 'foo' 上的锁从次要对象传播到主要对象是没有意义的,因为主要对象可能在 2 小时前已经删除了 'foo' 而次要对象还没有赶上。锁从主要到次要的下游传播通过日志记录,因此在重做日志时会在辅助上重新获取锁,因此锁始终应用于适当的结构(如果“foo”存在于获取锁时的主节点,然后根据定义,在重新播放锁时存在于辅助节点上)。
  3. 二级读取可能会阻止重做(例如,通过在重做尝试获取架构修改时持有架构稳定性锁)。当辅助读取释放锁时,重做恢复。在这种情况下,“重做”意味着“将主服务器的日志应用到辅助服务器上”,即。赶上。