我想知道是否可以拆分一个非常大的查询以使其部分在辅助只读服务器上完成,或者如果此功能仅允许我在辅助服务器上运行单独的查询或脚本。我还想知道是否有人为此目的使用AlwaysOn高可用性组,它是如何为您工作的?
答案 0 :(得分:0)
群集和高可用性用于最小化停机时间,而不是提供负载平衡。来自this article的引用说
“群集也不是负载平衡的解决方案。加载 平衡是指许多服务器充当一个服务器,分散负载 几个服务器同时。许多DBA,尤其是那些工作的人 对于大型商业网站,可能会认为群集提供负载 集群节点之间的平衡。不是这种情况;集群 有助于仅改善SQL Server实例的正常运行时间。如果你需要加载 平衡,那么你必须寻找一个不同的解决方案。一个潜在可能 可能是点对点事务复制。“
您可以使用第二个报告服务器执行昂贵的查询。我们通过使用事务复制将所有适用的数据移动到仅用于报告的第二台服务器来实现。但是,您必须指定要查询的服务器,因此它不是一个简单的解决方案,其中SQL根据工作负载决定要查询的服务器。
答案 1 :(得分:0)
可用性组允许您将只读查询卸载到辅助只读副本,但此卸载是在连接级别完成的。因此,您将无法仅在只读副本上运行部分查询。此外,您不能从路由到不同副本(服务器)的同一连接中获得不同的查询。
必须使用完全独立的连接(具有不同的连接字符串属性)才能在主读/写副本上运行某些查询,而其他查询在辅助只读副本上运行。在SQL Server 2012中,SQL Server Native Client支持的连接字符串格式中添加了ApplicationIntent
属性。在此属性中,您可以指定您的连接是否适用于ReadWrite
或ReadOnly
数据访问。详情见SQL Server Native Client Support for High Availability, Disaster Recovery上的BOL文章。
但是,为了让服务器知道如何处理此连接字符串属性,必须先配置只读路由。可用性组侦听器需要此配置才能正确地将连接定向到主读/写副本或辅助只读副本。详情请参阅BOL文章,了解如何Configure Read-Only Routing for an Availability Group。