如何根据查询请求的峰值速率估计CPU?

var*_*ble -1 sql-server maxdop cpu sql-server-2019

默认情况下,SQL Server 允许最大并发连接数为 32767,这是可以同时登录 SQL Server 实例的最大用户数。

我正在开发 10 个 Web api,它们将使用自己的登录名查询 sql 服务器(因此最多 10 个登录名,加上管理员/开发人员)。预计并发登录数不超过20。

然而,每个登录 (api) 可以发出多个(也许 500 个)并发查询请求。因此,实际上 10 个 api * 500 个请求 = 5000 个并发查询请求。有时请求会较少或没有。

假设有足够的内存和磁盘 io 能力,我正在规划 cpu 要求。

据我所知,sql 请求被分配给工作线程,并且根据处理器的数量,有一定数量的默认工作线程。目前我的开发机器有 24 个处理器,因此默认的最大工作线程是 832。

假设查询可能超出线程占用成本(40),这意味着 SQL Server 可能决定使用并行性(最大 dop)。

假设 MAX DOP = 1,则一次可以处理 832 个请求。

假设 MAX DOP = 4,则一次可以处理 208 个请求。

超出此范围的任何查询请求都必须等待,直到为其分配工作线程。

那么,为了确保能够满足 5000 个请求的峰值负载,估计我至少需要大约 145 个 cpu 是否正确?

((145-4)*32)+512 = 5024

AMt*_*two 7

无法根据请求数量来估计核心数量。500 个廉价的查询可能会在几毫秒的 CPU 时间内同时执行,也可能需要几个小时的 CPU 时间。

根据您的响应时间要求以及这些并发查询的成本,它可能需要 4 核机器或大型机器。

几年前,Nick Craver在博客中介绍了用于运行该网站的硬件。自 2016 年以来,我们对 Stack Overflow 基础设施进行了一些升级,但与所使用的硬件相比,请考虑 Stack Overflow 和 Stack Exchange 网络的流量(甚至早在 2016 年)。当时,Stack Overflow 有 12 个核心,Stack Exchange 网络有 8 个核心。