Express版核心限制歧義
我們有一個應用程序,它使用 MSSync 將數據從伺服器下載到客戶端的 SQL Server Express 2005。客戶端具有超執行緒的雙核,因此總共有 4 個核。
我對 SQL Server Express 的限制進行了大量研究,我認為它歸結為 1 個物理套接字,但在該套接字中最多使用 4 個核心。但是,這提出了一些與我在實踐中所理解的相反的問題。
我們的同步過程最大化了 1 個核心,淹沒了同步過程,導致性能比具有更高 GHz 的設備慢 10-20 倍,並且沒有最大化 SQL Server Express 2005 正在使用的單個核心。
但是:如果允許 SQL Server 在 1 個套接字中使用 4 個核心,為什麼我們的同步過程只使用 1 個核心?這是因為 1 個連接有一個專用核心嗎?還是我沒有正確理解極限規格?將 SQL Server Express 升級到現代版本是否有助於使其使用更多核心?
我做了更多的研究。我使用了 SQL Server Express 2012 甚至 SQL Server Developer 2012,並且全部最多只有 1 個核心。因此,顯然,這與 Express 限制無關。
這可能是一個技術限制,您在單個連接/事務中的查詢僅停留在單個核心上。很可能,這是保證事務一致性的邏輯要求。
從 SQL Server 2012 開始,我看到的是負載會不時交換到另一個核心,但它永遠不會同時使用超過 1 個核心。甚至沒有開發版。
如果有人能證實這些假設,那將是受歡迎的。
- 根據 MSDN Bol SQL Server 2005 Express支持 like
Limited to one CPU
,其中 CPU 表示套接字,不限於核心和超執行緒。直到 2008 年,這是政策,沒有任何文件可用於不受支持的 2005 版本,但 2008 R2文件仍然指出:SQL Server 支持指定數量的處理器插槽乘以每個插槽中的邏輯 CPU 數量。例如,出於此表的目的,以下內容被視為單個處理器:
- 單核、超執行緒處理器,每個插槽有 2 個邏輯 CPU。
- 具有 2 個邏輯 CPU 的雙核處理器。
- 具有 4 個邏輯 CPU 的四核處理器。
- 2012 Express版支持 1 個 CPU,最多 4 個核心。對於 2012 年,核心和套接字的計算變得更加複雜(考慮到虛擬化),這在仍然聲明的文件中可以看出
僅限於 1 個插槽或 4 個核心中的較小者
- 2012 Developer版支持與Enterprise 版相同,即沒有限制。如果您看到限制,它們是由於您的使用、設置和工作負載(只有一個連接、
MAXDOP
設置、未為並行計劃選擇的查詢)。進一步參考:
如果您的工作負載沒有跨核心並行,無論許可證如何,這可能有幾個原因,例如
- MaxDOP 設置為 1
- 出於某種原因選擇非並行計劃的執行計劃
- 您的工具一次生成一個查詢,而不是同時啟動查詢