我想知道是否有可能拆分一个非常大的查询,使其部分在辅助只读服务器上完成,或者如果这个功能只允许我在辅助服务器上运行单独的查询或脚本。我还想知道是否有人为此目的使用了AlwaysOn高可用性组,它是如何为您工作的?
集群和高可用性用于最小化停机时间,而不是提供负载平衡。这篇文章中的一段话是:
"集群也不是负载平衡的解决方案。负载平衡是指许多服务器作为一个整体,分散负载多个服务器同时运行。许多dba,特别是那些工作人员对于大型商业网站,可能会认为集群提供负载集群节点间的均衡。事实并非如此;聚类帮助提高SQL Server实例的正常运行时间。如果你需要负载平衡,那么你必须寻找一个不同的解决方案。一种可能性可能是点对点事务复制。"
您可以使用第二台报表服务器来执行开销较大的查询。为此,我们使用事务性复制将所有适用的数据移动到仅用于报告的第二台服务器。但是,您必须指定要查询的服务器,因此SQL根据工作负载决定在哪个服务器上查询不是一个简单的解决方案。
可用性组允许您将只读查询卸载到二级只读副本,但是这种卸载是在连接级别上完成的。因此,不能只在只读副本上运行部分查询。此外,不能将来自同一连接的不同查询路由到不同的副本(服务器)。
您必须使用完全独立的连接(具有不同的连接字符串属性),以便在主读写副本上运行一些查询,而在从只读副本上运行其他查询。在SQL Server 2012中,在SQL Server Native Client支持的连接字符串格式中增加了一个ApplicationIntent
属性。在此属性中,您可以指定连接的意图是用于ReadWrite
还是ReadOnly
数据访问。详细信息请参见SQL Server原生客户端支持高可用性和灾难恢复的BOL文章。
但是,为了让服务器知道如何处理这个连接字符串属性,您必须首先配置只读路由。可用性组侦听器需要此配置才能正确地将连接定向到主读/写副本或从只读副本。详细信息请参见关于如何为可用性组配置只读路由的BOL文章。