查询只读副本时对主实例的性能影响
Performance impact on primary instance when querying read-only replica
我目前正在开发一个连续查询数据库以获取要显示的实时数据的应用程序。
为了尽量减少对正在写入数据库的系统的影响,这对业务运营至关重要,我直接连接到可用性组中的只读副本(使用只读副本服务器名称而不是通过 applicationintent=readonly
的方式通过 Always On 侦听器进行只读路由)。
即使这样做,我们也注意到将数据插入主服务器的响应时间增加了。
根据我对辅助副本的理解,情况不应如此。我也在查询中使用 NOLOCK
提示。我对此感到非常困惑,并且不太明白是什么导致了响应时间的增加。到目前为止我所想到的是 SQL 是,不管 NOLOCK
提示如何,锁定我正在读取的 table 并防止同步复制到只读副本,这是依次锁定主实例 table,它阻止了插入查询。
是这种情况还是我对 Always on Read only 副本不太了解?
我发现 this 我认为最能描述主服务器上响应时间增加的可能原因的文档。
总的来说,对于那些正在研究使用他们的 AlwaysOn 可用性组在他们的主要和次要副本之间分配负载的人来说,这是一本很好的读物。
对于那些不想阅读整个文档的人,它教会了我以下内容(用我自己粗略的话说):
尽管不太可能,但辅助副本上的工作负载 运行 可能会影响发送事务已提交确认(复制到辅助副本)所花费的时间。当使用同步提交模式时,主节点在提交事务之前等待此确认,它是 运行(例如插入)。因此,增加辅助副本的确认时间会导致主副本在插入时花费更长的时间。
虽然在文档中 'Impact on Primary Workload' 部分下有更好的解释。再说一次,如果你想了解更多,我真的建议你读一读。
我目前正在开发一个连续查询数据库以获取要显示的实时数据的应用程序。
为了尽量减少对正在写入数据库的系统的影响,这对业务运营至关重要,我直接连接到可用性组中的只读副本(使用只读副本服务器名称而不是通过 applicationintent=readonly
的方式通过 Always On 侦听器进行只读路由)。
即使这样做,我们也注意到将数据插入主服务器的响应时间增加了。
根据我对辅助副本的理解,情况不应如此。我也在查询中使用 NOLOCK
提示。我对此感到非常困惑,并且不太明白是什么导致了响应时间的增加。到目前为止我所想到的是 SQL 是,不管 NOLOCK
提示如何,锁定我正在读取的 table 并防止同步复制到只读副本,这是依次锁定主实例 table,它阻止了插入查询。
是这种情况还是我对 Always on Read only 副本不太了解?
我发现 this 我认为最能描述主服务器上响应时间增加的可能原因的文档。
总的来说,对于那些正在研究使用他们的 AlwaysOn 可用性组在他们的主要和次要副本之间分配负载的人来说,这是一本很好的读物。
对于那些不想阅读整个文档的人,它教会了我以下内容(用我自己粗略的话说): 尽管不太可能,但辅助副本上的工作负载 运行 可能会影响发送事务已提交确认(复制到辅助副本)所花费的时间。当使用同步提交模式时,主节点在提交事务之前等待此确认,它是 运行(例如插入)。因此,增加辅助副本的确认时间会导致主副本在插入时花费更长的时间。
虽然在文档中 'Impact on Primary Workload' 部分下有更好的解释。再说一次,如果你想了解更多,我真的建议你读一读。