sql-server - 在多个数据库服务器上执行并行查询(运行 Microsoft SQL Server)

标签 sql-server database

是否可以配置多个数据库服务器(都托管同一个数据库)同时执行单个查询?

我不是在询问同时使用多个 CPU 执行查询 - 我知道这是可能的。

更新

我的意思是这样的:

  • 有两个 2 服务器:Server1Server2
  • 服务器主机数据库 FooFoo 的两个实例是相同的
  • 我连接到 Server1 并提交一个复杂的(很多连接,很多计算)查询
  • Server1 决定一些计算应该在 Server2 上进行,一些数据也应该从该服务器读取 - 查询的适当部分被发送到 服务器2
  • 两台服务器都读取数据并执行必要的计算
  • 最后,Server1Server2的结果合并返回给客户端

所有这一切都应该自动发生,无需显式引用Server1Server2。我的意思是这样的并行查询执行 - 这可能吗?

更新 2

感谢 John 和 wuputah 的提示。

我正在研究增加 MOSS 数据库后端可用性和容量的替代方案。所以我正在寻找某种开箱即用的 SQL Server 负载平衡解决方案,它对应用程序透明,因为我无法修改应用程序以任何方式。 我猜 SQL Server 没有这样的功能(据我所知,Oracle 有 - 它是 wuputah 提到的 RAC)。

更新 3

引自Top Tips for SQL Server Clustering文章:

Let's start by debunking a common misconception. You use MSCS clustering for high availability, not for load balancing. Also, SQL Server does not have any built-in, automatic load-balancing capability. You have to load balance through your application's physical design.

最佳答案

您真正谈论的是集群解决方案。看起来像 SQL ServerOracle对此有解决方案,但我对它们一无所知。我猜想它们的购买和实现成本会非常高。

可能的替代建议如下:

  • 使用主从复制,并从从属服务器执行复杂的读取查询。所有写入都必须发送到主服务器,然后发送到从服务器,这样事情才能保持同步。这有助于事情进展得更快,因为从服务器只需要担心来自主服务器的写入,这些写入已经代表从服务器预先确定(没有死锁等)。如果您希望使用多台服务器,我会首先从这里着手。
  • 使用主-主复制。这意味着来自两台服务器的所有写入都相互传递,因此它们保持同步(至少理论上如此)。这具有作为主从的一些好处,但您不必担心写入到一台服务器而不是另一台服务器。 master-master 复制更常见的用途是用于故障转移支持; master-slave确实更适合性能。
  • 使用 John Sansom 谈到的功能。我对此了解不多,但它的基础似乎是将您的数据库拆分为不同服务器上的表,这将有一些好处和缺点。最大的问题是,由于两个系统不能共享内存,它们将不得不通过网络共享大量数据来计算复杂的连接。

希望这对您有所帮助!


RE 更新 1:

如果不能修改应用程序,还有希望,但可能有点复杂。如果您要设置主从复制,则可以设置代理以向从属服务器发送读取查询并向主服务器写入查询。我见过用 MySQL 完成的,但没有看到 SQLServer。除非您想自己编写代理,否则这是个问题。

这是 discussed on SO previously ,因此您可以在那里找到更多信息。


RE 更新 2:

Microsoft 的集群可能不是为性能而设计的,但那是 Microsoft 的错。这仍然是您在这里谈论的复杂程度。如果他们说这无济于事,那么您的选择仅限于上述选项以及您对应用程序所做的操作(例如分片、拆分为多个数据库等)。

关于sql-server - 在多个数据库服务器上执行并行查询(运行 Microsoft SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552645/

相关文章:

sql - 如何对 SQL Server Express 进行实时更改

sql-server - 无法在 AspNetUsers 表中插入用户

database - 存储时间序列数据的简单方法

php - 如何延迟或控制查询?

php - mysql 在 MAX -n1 和 MAX-n2 之间选择

sql-server - 对连接进行过滤?

mysql - 如何在 MySql 中使用 COALESCE 来合并数据

mysql - SQL - 如何对多个表使用 COUNT()

java - 如何将外部SqliteDatabase连接到Android应用程序?

mysql - 如何将 MySQL 的列更改为具有另一个默认值?