一台服务器中的多个数据库问题

2 performance database-design sql-server availability-groups performance-tuning

我们公司有 5 个不同的数据库。多个数据库中没有一个涉及或利用跨数据库连接。我们有充足的资源和预算。

我们公司正在争论:

  • 1 个服务器实例上的 5 个数据库,

  • 或 5 个不同服务器上的 5 个数据库。

问题:如果我们将所有内容都放在一台服务器上,可能会出现哪些具体问题、障碍问题?我的背景不是 DBA,所以想学习可以与团队讨论的示例。

背景:

公司 1 个服务器实例的论据:我们有带有故障转移群集的“资源调控器”和“AlwaysOn 可用性组”。资源调控器将处理数据库之间的内存、CPU、io 工作负载。因此,与 AlwaysOn DR 一起,它可以处理失控的查询、糟糕的设计、内存问题。

每个数据库 100GB,关键公司信息,最少 5000 万行

我们每秒处理 300 笔交易

RTO = 10 分钟

Kin*_*hah 7

答案很经典——“看情况!”

与您的利益相关者坐下来,然后介绍两种选择的优缺点。在客户托管业务中,我遇到过这种情况,以下是我的观点:

多个数据库中没有一个涉及或利用跨数据库连接。我们有充足的资源和预算。

这意味着 dbs 是解耦的或独立的。我会说,根据关键性和正常运行时间 SLA 对 dbs 进行分组,然后在 2-3 个服务器之间分配它们(VM 也是另一种选择)。这样,您就不会将所有鸡蛋放在同一个篮子里。

为什么 ?

  • 将所有 5 个数据库放在一台服务器上将是单点故障。单个 DB 的问题会使所有其他 DB 处于危险之中。尽可能隔离您的风险,但这将花费您额外的许可和维护开销,您可以说 - 充足的资源和预算。
  • 即使您启用了资源调控器,它也不会调控缓冲池。它只管理“查询的工作内存,例如排序、散列等”。在 2014 年及以后,您可以使用资源调控器限制 IOPS。
  • 对于托管所有数据库的给定服务器,您有一个解决方案来进行备份 - 完整和日志、完整性检查、索引维护。如果您的服务器出现问题并且该作业中途失败,则其他数据库将受到影响,除非您有内置机制来检测和修复问题并继续其余的工作。
  • 操作系统的外部问题会影响您在一个地方的所有资产。
  • 即使使用 AG,您也有固定数量的工作线程,并且它们与单个服务器上的所有数据库共享。根据关键程度分散 dbs 将缓解该问题。
  • Tempdb 是每台服务器一个。所以想象一下,你所有的数据库都在同一台服务器上可能是一个瓶颈。
  • 如果您有一台服务器为所有数据库服务,则问题隔离将很困难。

我写了一种类似的答案哪个更好:每个应用程序一个数据库,还是一个数据库?