在服务器上运行多个较小的数据库而不是单个较大的数据库对性能有什么影响?

Dog*_*ars 7 performance sql-server

我们的数据库架构允许多个“客户”存在于同一个数据库中,但出于管理原因[修补、备份等],我们将它们拆分为多个数据库。

问题 1

如果我们将客户合并到一个数据库中,会对性能产生什么影响?

问题2

我们目前在每个数据库中有多个客户,但每个数据库中可能有 10 个客户,比如说 5 个数据库;因此,如果我们合并数据库,我们将只有一个拥有 50 个客户的数据库;这会对性能产生很大影响吗?

Mar*_*ith 7

正如其他人在评论中指出的那样,如果不了解应用程序,就很难回答这个问题。这取决于,确实如此

问题(和答案)的性质也会根据物理环境而变化,即单个服务器上的多个数据库还是分布在多个服务器上?客户是“典型”客户还是某些客户消耗了不成比例的服务器资源?3年后,是50个客户还是50000个?

也就是说,让我们来破解它。

如果我们将客户合并到一个数据库中,会对性能产生什么影响?

潜在收益

  • 减少计划缓存内存。如果您有 5 个相同的数据库,则每个执行计划都有 5 个副本。
  • 改进的缓冲池利用率。与上面类似,您在每个数据库中拥有的任何公共数据都存在于每个数据库的缓冲池中。
  • 改进的 CPU/内存利用率。将多台服务器合并为一台服务器可消除每台主机上的操作系统开销。
  • 可能提高了 IO 利用率。将分配给每台服务器的较小阵列组合在一起可能会通过具有更高的处理峰值的容量来提高整体吞吐量。

潜在风险

  • $$$。多个低规格服务器通常比强大的服务器便宜。将负载分散到实用服务器上会更便宜。
  • 扩展灵活性。当您在强大的强大服务器上拥有所有客户并且它失去动力时,升级将变得困难而复杂。
  • 锁定/阻塞/死锁。数据库和应用程序设计中的任何缺陷都可能在单个主机环境中被放大。

从您的评论来看,这听起来像是您的软件和公司的早期阶段。因此,我会寻找最大化灵活性和最小化资本支出的方法。

  • 安装可扩展的 iSCSI 阵列。通过单独的存储,您可以独立于服务器扩展原始 GB 容量和 IOPS。
  • 使您的客户数据可移植。可能难以改造,但如果您可以将客户的数据从一个系统迁移到另一个系统,您就可以在系统之间移动它们以更好地平衡工作负载。
  • 将您的客户分层。根据每个客户的使用情况将其分配到一个层级,最初可能是 3 个层级。分析这些客户层的典型使用模式,并相应地将它们分配给服务器资源。可能您可以在一个盒子上容纳 200 个 3 级客户,或 50 个 2 级客户,或 10 个 1 级客户。

也许虚拟化会更合适。也许云会起作用。也许混合云。老实说,这确实取决于。请专家帮忙,他们可以为您节省一大笔钱。