為什麼我們的 8-cpu SQL Server 機器上的 CPU 使用如此不對稱?
我注意到執行 SQL Server 2008 的 8 CPU 數據庫伺服器上的 CPU 使用率根本不平衡。
以下是前一段時間隨機一天的 1 天平均值,這是典型的且始終不對稱:
9, 15, 10, 21, 18, 21, 14, 9
(這裡只有縮略圖,因為圖像真的很高,但點擊查看完整尺寸的圖像)
與我們的 4-CPU 網路伺服器相比,這些伺服器幾乎一直都是完全平衡的,這讓我覺得很奇怪。
現在,這是一個專用伺服器,所以唯一在其上執行的是 SQL Server 2008(以及我們大量使用的內置全文索引),所以我不確定為什麼 CPU 使用率會如此不對稱. 想法?
您的文件/文件組是如何設置的?
我會抄襲自己:
關於 IO 的另一個想法:我們小心地將我們最大的最常用表設置在包含多個文件的文件組上。這樣做的性能增強之一是 SQL 將對文件組中的每個文件進行執行緒請求 - 因此,如果 BigOverUsedTable 在 FileGroup1 上並且 FileGroup1 中有四個文件並且您的數據庫有 8 個核心,它實際上將使用四個核心來執行“選擇來自 BigOverUsedTable 的大數字處理討厭的查詢”——否則,它將只使用一個 CPU。我們從這篇 MSDN 文章中得到了這個想法:
http://msdn.microsoft.com/en-us/library/ms944351.aspx
來自 TFA:
“文件組使用並行執行緒來改善數據訪問。當按順序訪問表時,系統會為每個文件並行創建單獨的執行緒。當系統對具有四個文件的文件組中的表執行表掃描時,它使用四個單獨的執行緒來並行讀取數據。通常,在單獨的磁碟上使用多個文件可以提高性能。文件組中的文件過多會導致並行執行緒過多並造成瓶頸。
由於這個建議,我們在 8 核機器上的文件組中有四個文件。它運作良好。
編輯:這現在有另一個(可能)更好的答案。圖表不符合比例——如果你仔細觀察,每個處理器實際上負載了大約 20%,正如 uzbones 指出的那樣。
編輯:我們實際上可以看出使用多個文件文件組會有所幫助,因為我們沒有將所有表都放在包含四個文件的文件組中。對“單個文件”文件組的大查詢僅使用一個 CPU,但對四個文件文件組中的表的查詢會使用 4 個 CPU。