【发布时间】:2023-03-25 13:35:01
【问题描述】:
我想知道是否可以拆分一个非常大的查询以在辅助只读服务器上完成部分查询,或者如果此功能仅允许我在辅助服务器上运行单独的查询或脚本。我还想知道是否有人为此目的使用 AlwaysOn 高可用性组,它对您有什么作用?
【问题讨论】:
标签: sql-server scalability alwayson
我想知道是否可以拆分一个非常大的查询以在辅助只读服务器上完成部分查询,或者如果此功能仅允许我在辅助服务器上运行单独的查询或脚本。我还想知道是否有人为此目的使用 AlwaysOn 高可用性组,它对您有什么作用?
【问题讨论】:
标签: sql-server scalability alwayson
可用性组允许您将只读查询卸载到辅助只读副本,但此卸载是在连接级别完成的。因此,您将无法仅在只读副本上运行部分查询。此外,您不能将来自同一连接的不同查询路由到不同的副本(服务器)。
您必须使用完全独立的连接(具有不同的连接字符串属性)以使某些查询在主要读/写副本上运行,而其他查询在辅助只读副本上运行。在 SQL Server 2012 中,ApplicationIntent 属性已添加到 SQL Server Native Client 支持的连接字符串格式中。在此属性中,您可以指定您的连接意图是用于ReadWrite 还是ReadOnly 数据访问。详细信息在 SQL Server Native Client Support for High Availability, Disaster Recovery 的 BOL 文章中。
但是,为了让服务器知道如何处理这个连接字符串属性,你必须首先配置只读路由。可用性组侦听器需要此配置才能正确地将连接定向到主要读/写副本或辅助只读副本。详细信息在 BOL 文章中关于如何Configure Read-Only Routing for an Availability Group。
【讨论】:
集群和高可用性用于最大限度地减少停机时间,而不是提供负载平衡。来自this article 的引用说
“集群也不是负载均衡的解决方案。负载 平衡是多台服务器合二为一,分散负载 多台服务器同时进行。许多 DBA,尤其是那些工作的 对于大型商业网站,可能认为集群提供负载 集群节点之间的平衡。不是这种情况;聚类 仅有助于提高 SQL Server 实例的正常运行时间。如果你需要负载 平衡,那么您必须寻找不同的解决方案。一个潜在可能 可能是对等事务复制。”
您可以使用第二个报告服务器来执行昂贵的查询。我们通过使用事务复制将所有适用的数据移动到仅用于报告的第二台服务器来做到这一点。但是,您必须指定要查询的服务器,因此这不是一个简单的解决方案,其中 SQL 会根据工作负载决定要查询的服务器。
【讨论】: