【问题标题】:Always On: Could select queries in a synchronous secondary replica affect queries in the primary replica?Always On:同步辅助副本中的选择查询会影响主副本中的查询吗?
【发布时间】:2021-08-31 06:06:54
【问题描述】:
通常的建议是通过将连接声明为只读来将选择查询重定向到辅助副本。但我对此有疑问。
我知道两个事实:
-
在主副本中创建的事务必须首先在同步辅助副本中提交。
-
Select 查询在表上获取共享锁,这会阻止其他查询执行修改。
这是否意味着只读连接中的选择查询(可以发送到辅助副本以提高性能)实际上会影响在主副本中执行的整体性能?
请注意,这只会发生在同步副本上,而不是异步副本。
提前致谢,
伊格纳西奥
【问题讨论】:
标签:
sql-server
transactions
locking
alwayson
【解决方案1】:
在主副本中创建的事务必须首先提交
同步次要副本。
为了澄清,当主事务提交时,事务日志在同步辅助上被强化,但是辅助上的重做线程将更改应用到副本。主节点上的提交不会等待重做完成。
选择查询在表上获取共享锁,这会阻止其他
执行修改的查询。
无论会话隔离级别如何,在snapshot isolation 下执行可读辅助节点上的查询。 DML 操作是只读的,不会阻塞重做线程。查询获取共享模式稳定性锁以防止并发 DDL 操作,因此只有 DDL(来自主节点)可能会导致阻塞。