預配 SQL Server 2019
我正在配置 SQL Server 2019 版本,並已分配了一個執行 Windows Server 2016 的虛擬伺服器。它有 4 個虛擬處理器,我有 410Gb 的驅動器空間可供使用。
我的建構必須執行同一個 35Gb 數據庫的兩個版本。
我的意圖是將新盒子上的 410Gb 驅動器拆分如下:
L:\ 保存日誌文件。基於數據庫大小的 25% = 9Gb/DB = 18Gb)的規則。T:\ 保存 tempdb 文件。4 個 1.5Gb 的數據文件(每個邏輯處理器一個),每個具有 3Gb 的日誌文件和另外 2Gb 每個 DB 用於自動增長 = 11Gb。用於數據的 D:\ 驅動器為 190Gb,用於所有備份的 E:\ 驅動器為 190Gb。
這聽起來像是明智的分裂嗎?
在使用 SQL Server 2005 中的 tempdb 中, Microsoft 寫道:
以下是 tempdb 的一些額外配置和性能建議:
- 在快速 I/O 子系統上創建 tempdb 數據庫。對大量直接連接的磁碟使用磁碟條帶化。
- 將專用於 tempdb 的磁碟空間與使用者數據庫分開。
- 創建許多文件以最大化磁碟頻寬並減少分配結構中的爭用。作為一般準則,每個 CPU 創建一個數據文件。每個文件都應設置為相同的大小。這使得比例填充算法能夠以最小的爭用均勻地分配分配負載。
現在雖然這最初是為 SQL Server 2005 編寫的,但它仍然在文章中被引用:
- 減少 tempdb 中分配爭用的建議(Microsoft | 支持)
…微軟寫道:
要提高 tempdb 的並發性,請嘗試以下方法:
- 增加 tempdb 中的數據文件數量以最大化磁碟頻寬並減少分配結構中的爭用。作為一般規則,如果邏輯處理器的數量小於或等於八 (8) 個,則使用與邏輯處理器相同數量的數據文件。如果邏輯處理器的數量大於八 (8),則使用八個數據文件。如果爭用繼續,則將數據文件的數量增加四 (4) 的倍數,直至達到邏輯處理器的數量,直到爭用降低到可接受的水平。或者,更改工作負載或程式碼。
- 考慮實施以下 TechNet 主題中的最佳實踐建議:
+ 在 SQL Server 2005 中使用 tempdb
- 如果前面的步驟沒有顯著減少分配爭用並且爭用發生在 SGAM 頁面上,請實施跟踪標誌 -T1118。在此跟踪標誌下,SQL Server 為每個數據庫對象分配完整範圍,從而消除了 SGAM 頁面上的爭用。
所以第一篇文章引用了舊文章,但有一個轉折,因為微軟在下面寫道:
將不同的數據文件放在不同的磁碟上將提供額外的性能優勢。但是,這不是必需的。這些文件可以共存於同一磁碟捲上。
通常將(使用者)數據庫文件放在其他驅動器上可能是一個好主意,但並非必須如此。這些因素取決於您的儲存子系統和子系統提供的吞吐量 (I/O)。
有一個關於伺服器故障磁碟配置的問答:
- SQL Server 的推薦磁碟/分區設置(伺服器故障)
Paul Randal 的回答開始於:
這是一個很大的“取決於”問題。
我無法回答如何為您創建單個 RAID 陣列的問題,因為我不是儲存專家,但我可以幫助您解決剩下的問題。
您需要考慮的第一件事是各種數據庫的工作負載 - OLTP(讀/寫)或 DSS/DW(主要讀)。對於讀/寫工作負載,您應該考慮 RAID 1 或 RAID 10 (RAID 1+0),因為它們提供冗餘和出色的讀/寫性能。對於以讀取為主的工作負載,您可以使用 RAID 5。RAID 5 不應用於讀/寫工作負載的原因是您在寫入時會付出性能損失。…
鑑於 Paul 在 SQL Server 開發團隊中,我傾向於對他的回答給予一些預先的信任,特別是因為他對 SQL Server 的內部工作了解很多。隨著時間的推移,他已經修改了一些資訊,但他的部落格文章是很好的起點。
同一個問答中的一個同樣有趣的答案引用了 Microsoft 文章Optimizing tempdb Performance同樣指出:
- 使每個數據文件大小相同;這允許最佳的比例填充性能。
- 將 tempdb 數據庫放在快速 I/O 子系統上。如果有許多直接連接的磁碟,請使用磁碟條帶化。
- 將 tempdb 數據庫放在與使用者數據庫使用的磁碟不同的磁碟上。
對於 SQL Server 的較新版本,在新的 Microsoft Docs 中隱藏著同樣有趣的資訊,可在以下位置找到:
- 數據庫文件和文件組(Microsoft | Docs )
使用文件和文件組時的建議:
- 大多數數據庫都可以很好地處理單個數據文件和單個事務日誌文件。
- 如果您使用多個數據文件,請為附加文件創建第二個文件組並將該文件組設置為預設文件組。這樣,主文件將只包含系統表和對象。
- 為了最大限度地提高性能,請盡可能在不同的可用磁碟上創建文件或文件組。將激烈競爭空間的對象放在不同的文件組中。
- 使用文件組可以將對象放置在特定的物理磁碟上。
- 將同一連接查詢中使用的不同表放在不同的文件組中。此步驟將提高性能,因為並行磁碟 I/O 搜尋連接的數據。
- 將頻繁訪問的表和屬於這些表的非聚集索引放在不同的文件組上。如果文件位於不同的物理磁碟上,則使用不同的文件組將提高性能,因為並行 I/O。
- 不要將事務日誌文件放在具有其他文件和文件組的同一物理磁碟上。
正如您所看到的,這不僅涉及將正確的文件放置在足夠的儲存空間中,而且還涉及將相關數據儲存在單獨的文件組中。(這是高端配置的主題)
甚至 Azure 在磁碟設置頁面上也存在差異:
在範例中提供的範例螢幕截圖中,磁碟可以儲存在不同的位置和不同的儲存(SSD、Premimum SSD、…)
回答你的問題
它有 4 個虛擬處理器,我有 410Gb 的驅動器空間可供使用。
- 根據您的儲存設置,您可能能夠為您的 SQL Server 實例 (VM) 獲得一些快速的 SSD 儲存。將事務日誌文件甚至可能是 TEMPDB 文件放在這些磁碟上。創建單獨的驅動器。
- 將使用者數據庫的 MDF 和 NDF 文件放在較慢的磁碟/儲存上。
- 確保您有足夠的 RAM 來支持數據緩衝,因為這將減少 MDF 和 NDF 文件(磁碟儲存)所需的 I/O。
最後,這取決於很多因素。去閱讀 Paul Randal 和 Brent Ozar 的一些關於 RAM、I/O、tempdb 和磁碟分區的文章(另一方面;您正在格式化具有 64kb 集群大小的數據磁碟?)
這確實取決於你擁有什麼以及你想在哪裡結束。