Migration

預配 SQL Server 2019

  • August 3, 2020

我正在配置 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 的並發性,請嘗試以下方法:

  • 增加 tempdb 中的數據文件數量以最大化磁碟頻寬並減少分配結構中的爭用。作為一般規則,如果邏輯處理器的數量小於或等於八 (8) 個,則使用與邏輯處理器相同數量的數據文件。如果邏輯處理器的數量大於八 (8),則使用八個數據文件。如果爭用繼續,則將數據文件的數量增加四 (4) 的倍數,直至達到邏輯處理器的數量,直到爭用降低到可接受的水平。或者,更改工作負載或程式碼。
  • 考慮實施以下 TechNet 主題中的最佳實踐建議:

+ 在 SQL Server 2005 中使用 tempdb

  • 如果前面的步驟沒有顯著減少分配爭用並且爭用發生在 SGAM 頁面上,請實施跟踪標誌 -T1118。在此跟踪標誌下,SQL Server 為每個數據庫對象分配完整範圍,從而消除了 SGAM 頁面上的爭用。

所以第一篇文章引用了舊文章,但有一個轉折,因為微軟在下面寫道:

將不同的數據文件放在不同的磁碟上將提供額外的性能優勢。但是,這不是必需的。這些文件可以共存於同一磁碟捲上。

通常將(使用者)數據庫文件放在其他驅動器上可能是一個好主意,但並非必須如此。這些因素取決於您的儲存子系統和子系統提供的吞吐量 (I/O)。

有一個關於伺服器故障磁碟配置的問答:

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 中隱藏著同樣有趣的資訊,可在以下位置找到:

使用文件和文件組時的建議:

  • 大多數數據庫都可以很好地處理單個數據文件和單個事務日誌文件。
  • 如果您使用多個數據文件,請為附加文件創建第二個文件組並將該文件組設置為預設文件組。這樣,主文件將只包含系統表和對象。
  • 為了最大限度地提高性能,請盡可能在不同的可用磁碟上創建文件或文件組。將激烈競爭空間的對象放在不同的文件組中。
  • 使用文件組可以將對象放置在特定的物理磁碟上。
  • 將同一連接查詢中使用的不同表放在不同的文件組中。此步驟將提高性能,因為並行磁碟 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 集群大小的數據磁碟?)

這確實取決於你擁有什麼以及你想在哪裡結束。

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