Reza M.A Asked: 2018-03-14 23:19:55 +0800 CST2018-03-14 23:19:55 +0800 CST 2018-03-14 23:19:55 +0800 CST 是否可以使用 Microsoft SQL Server 横向扩展? 772 是否可以横向扩展 SQL Server 数据库? 有一些故障转移群集和始终开启的解决方案,但是 SQL Server 上是否有负载平衡和水平分区的解决方案? Azure中有一些,但在独立的 SQL Server 实例中没有...... sql-server 2 个回答 Voted Best Answer Brent Ozar 2018-03-15T00:25:04+08:002018-03-15T00:25:04+08:00 你这里有一堆问题: 是否可以在 Azure SQL DB 中横向扩展 READS?是的。 根据您使用的服务(例如 Azure SQL DB 的Active Secondary Replicas),您的读取工作负载可以跨多个服务器自动横向扩展,而无需对应用程序代码进行重大更改。但是,您仍然需要在应用程序中添加一个单独的连接字符串,指定 ApplicationIntent=ReadOnly 以便他们知道将您的读取查询移动到可读副本是安全的。 是否可以在 Azure SQL DB 中横向扩展 WRITES?是的,如果您更改代码。 您链接到的文档Data Partitioning是一组设计指南,您可以在编写应用程序时使用这些指南。但是,这些确实是代码更改,而不是 Azure SQL DB 的一项功能,您只需以与翻转辅助副本相同的方式翻转即可。 由您决定设计一层代码,以便当您的应用程序需要运行查询时,它会连接到适当的位置。 可以把它想象成万维网:在 Stack Overflow,写入工作负载在 StackOverflow.com、DBA.StackExchange.com、ServerFault.com 和其他站点上是分开的。但是,作为用户,您必须知道哪个站点有您要写入的数据——您无法在 ServerFault.com 上发布此问题的答案。该逻辑内置于您的大脑中 - 如果您想在多个服务器上扩展写入,则需要将相同的逻辑内置到您的应用程序中。 有一段时间,Microsoft 认为他们会使用Azure SQL DB Federations为您完成这项工作,但很快就被弃用了。 SQL Server 是否可以实现相同的功能?是的。 扩展读取就像这样简单: 购买更多 SQL Server 并将它们构建到可用性组中 在您的应用程序中添加另一个连接字符串,指定 ApplicationIntent=ReadOnly 利润! 横向扩展写入并不那么容易,并且需要更改代码,就像在 Azure SQL DB 中所做的那样。 它们中的任何一个都可以实现真正的负载平衡吗?不。 Azure SQL DB 和 SQL Server Always On 可用性组都没有真正平衡多个辅助节点的负载。您可能会遇到这样一种情况,即一个副本正在运行一些糟糕的查询,而其余的则处于闲置状态。在这种情况下,您仍然可以将新查询平均分配给工作不足和工作过度的服务器。 做真正的负载平衡——在多个副本之间保持相似的工作要求——留给读者作为练习。 TomTom 2018-03-14T23:56:43+08:002018-03-14T23:56:43+08:00 鉴于人们在它变得自动化之前已经进行了扩展 - 是的,您可以根据需要进行扩展。100 个实例之间的复制,以某种方式分配,无论是硬分配,还是通过 cpu 或任何负载 - 完成。
你这里有一堆问题:
是否可以在 Azure SQL DB 中横向扩展 READS?是的。
根据您使用的服务(例如 Azure SQL DB 的Active Secondary Replicas),您的读取工作负载可以跨多个服务器自动横向扩展,而无需对应用程序代码进行重大更改。但是,您仍然需要在应用程序中添加一个单独的连接字符串,指定 ApplicationIntent=ReadOnly 以便他们知道将您的读取查询移动到可读副本是安全的。
是否可以在 Azure SQL DB 中横向扩展 WRITES?是的,如果您更改代码。
您链接到的文档Data Partitioning是一组设计指南,您可以在编写应用程序时使用这些指南。但是,这些确实是代码更改,而不是 Azure SQL DB 的一项功能,您只需以与翻转辅助副本相同的方式翻转即可。
由您决定设计一层代码,以便当您的应用程序需要运行查询时,它会连接到适当的位置。
可以把它想象成万维网:在 Stack Overflow,写入工作负载在 StackOverflow.com、DBA.StackExchange.com、ServerFault.com 和其他站点上是分开的。但是,作为用户,您必须知道哪个站点有您要写入的数据——您无法在 ServerFault.com 上发布此问题的答案。该逻辑内置于您的大脑中 - 如果您想在多个服务器上扩展写入,则需要将相同的逻辑内置到您的应用程序中。
有一段时间,Microsoft 认为他们会使用Azure SQL DB Federations为您完成这项工作,但很快就被弃用了。
SQL Server 是否可以实现相同的功能?是的。
扩展读取就像这样简单:
横向扩展写入并不那么容易,并且需要更改代码,就像在 Azure SQL DB 中所做的那样。
它们中的任何一个都可以实现真正的负载平衡吗?不。
Azure SQL DB 和 SQL Server Always On 可用性组都没有真正平衡多个辅助节点的负载。您可能会遇到这样一种情况,即一个副本正在运行一些糟糕的查询,而其余的则处于闲置状态。在这种情况下,您仍然可以将新查询平均分配给工作不足和工作过度的服务器。
做真正的负载平衡——在多个副本之间保持相似的工作要求——留给读者作为练习。
鉴于人们在它变得自动化之前已经进行了扩展 - 是的,您可以根据需要进行扩展。100 个实例之间的复制,以某种方式分配,无论是硬分配,还是通过 cpu 或任何负载 - 完成。