3

我目前正在开发一个应用程序,该应用程序不断查询数据库以获取要显示的实时数据。

为了对正在写入数据库的系统产生最小的影响,这对业务操作至关重要,我直接连接到可用性组中的只读副本(使用只读副本服务器名称而不是只读路由通过Always On 监听器,通过applicationintent=readonly)。即使这样做,我们也注意到将数据插入主服务器的响应时间增加了。

据我对次要副本的理解,情况并非如此。我NOLOCK也在查询中使用提示。我对此感到非常困惑,并且不太了解导致响应时间增加的原因。到目前为止,我所想到的是,无论NOLOCK提示如何,SQL 都会锁定我正在读取的表并阻止同步复制到只读副本,这反过来又锁定了主实例表,该表正在阻止插入查询。

是这种情况还是我对 Always on 只读副本不太了解?

4

1 回答 1

2

我发现这份我认为最能描述主服务器响应时间增加的可能原因的文档。

一般来说,对于那些正在考虑使用 AlwaysOn 可用性组在其主副本和辅助副本之间分配负载的人来说,这是一本很好的读物。

对于那些不想阅读整个文档的人,它教会了我以下几点(用我自己粗略的话):虽然不太可能,但在辅助副本上运行的工作负载可能会影响发送确认所花费的时间事务已提交(复制到辅助节点)。当使用同步提交模式时,主节点在提交它正在运行的事务之前等待这个确认(例如插入)。因此,辅助副本的确认时间增加会导致主副本在插入时花费更长的时间。

不过,在“对主要工作负载的影响”部分下的文档中对此进行了更好的解释。再说一次,如果您想了解更多,我真的建议您阅读它。

于 2016-01-08T10:28:49.377 回答