Sql-Server

如何根據查詢請求的峰值速率估算 cpu?

  • May 22, 2022

預設情況下,SQL Server 最多允許 32767 個並發連接,這是可以同時登錄 SQL Server 實例的最大使用者數。

我正在開發 10 個 Web api,它們將使用自己的登錄名查詢 sql 伺服器(所以最多 10 個登錄名,加上管理員/開發人員)。預期的並發登錄數不超過 20。

然而,每個登錄 (api) 可以發出多個(可能 500 個)並發查詢請求。所以有效地 10 api * 500 req = 5000 並發查詢請求。有時請求較少或沒有請求。

假設有足夠的記憶體和磁碟 io 能力,我正在計劃 CPU 要求。

我了解 sql 請求被分配給工作執行緒,並且根據處理器的數量,有一定數量的預設工作執行緒。目前我的開發機器有 24 個處理器,所以預設的最大工作執行緒是 832。

假設查詢可能會超過成本 threadhold(40),這意味著 sql server 可能決定使用並行度(最大 dop)。

假設 MAX DOP = 1,那麼一次可以處理 832 個請求。

假設 MAX DOP = 4,那麼一次可以處理 208 個請求。

超出此範圍的任何查詢請求都必須等待,直到它被分配一個工作執行緒。

因此,為了確保可以滿足 5000 個請求的峰值負載,估計我將需要大約 145 個 CPU 是否正確?

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

沒有辦法根據請求數來估計核心數。500 個廉價查詢可能會在​​幾毫秒的 CPU 時間內並發執行,也可能需要幾個小時的 CPU 時間。

根據您的響應時間要求和這些並發查詢的成本,它可能需要 4 核機器或大型機器。

幾年前,Nick Craver寫了一篇關於用於執行該站點的硬體的部落格。自 2016 年以來,我們對 Stack Overflow 基礎架構進行了一些升級,但考慮到 Stack Overflow 和 Stack Exchange 網路(甚至早在 2016 年)的流量,與使用的硬體相比。當時,Stack Overflow 有 12 個核心,Stack Exchange 網路有 8 個核心。

引用自:https://dba.stackexchange.com/questions/312369