Sql-Server

MAXDOP 會影響我應該創建的 tempdb 數據文件的數量嗎?

  • January 29, 2014

根據我的閱讀,配置 tempdb 的最佳實踐包括創建多個數據文件。據我了解,經驗法則是,如果您應該創建與邏輯處理器相同數量的數據文件,最多 8 個。然後,如果您有 tempdb 爭用,請添加一個附加文件,直到爭用消失或您有每增加 4 個邏輯處理器就增加一個文件。所以如果你有 16 個邏輯處理器,那麼你最多可以有 10 個文件。

我很好奇的是 MAXDOP 是否會影響這一點?因此,例如,如果我有 12 個邏輯處理器。我已將 MAXDOP 設置為 6,因為它們分為 2 個 NUMA 節點。這是否意味著我應該堅持使用 6 個用於 tempdb 的數據文件?或者我是否仍然擁有推薦的處理器總數的 8 個或 9 個?

我不會添加單個附加文件,我每次至少會增加 2 或 4 個。在 cores = 5 時,沒有多少操作會比 cores = 4 工作得更好。我認為當你面對爭用時,你不會得到太大的改進,你從 4 個文件變為 5 個。我可能會以 4 個為一組(除非你有 6 核處理器,例如,並且想要測試將 SQL Server 限制為 6 核),但是到 16 歲時,如果你仍然有爭用,我不得不懷疑這是否真的接近解決問題 - 特別是因為您最好的收益是將這些文件中的每一個放在自己的一組主軸上;您極不可能擁有這麼多完全獨立的磁碟。

至於 MAXDOP 效應,我認為您不應該那樣考慮 MAXDOP。除非您使用親和力並阻止 SQL Server 甚至看到其他 6 個核心,否則這並不意味著所有查詢都將使用相同的 6 個核心。所以理論上,一個查詢可以使用 CPU 1-6,另一個可以使用 7-12,如果可以通過讓每個 CPU 訪問自己的文件來緩解爭用(實際上效果很好),那麼某些並發操作可以受益於 12.

解決 tempdb 爭用問題的另一種非常簡單的方法是在盒子中放入幾個 SSD 驅動器(格式化 1 到 80%,用一個預先確定大小的 tempdb 文件填充它,然後使用另一個驅動器作為備用驅動器 - SSD 壽命可能會有所不同,但是保持一塊未分配的塊可以幫助延長它的壽命)。這甚至在 SQL Server 2012 的集群中得到支持。無論您嘗試配置多少文件,慢速儲存總是成為瓶頸時,嘗試從 tempdb 中擠出性能需要花費大量的思考和精力。

一些可能有用的背景閱讀,尤其是當您被用於 tempdb 的老式旋轉磁碟卡住時:

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