Sql-Server

如何預測數據庫大小?

  • December 21, 2020

我正在建構的數據庫的要求之一是預測數據庫大小以便為生產環境準備硬體。一個應用程序有 2 個分區的主表。表在8 Filegroups (16 files, 32 partitions). 這兩個表都儲存了上個月的數據(一個月後數據將被刪除)。我們必須12每天在一張桌子上準備36好幾百萬行,在第二張桌子上準備好幾百萬行。我對這些表進行了工作負載測試,並且:

  1. 對於 100 萬行,包含數據的文件組的數據大小約為13 GB
  2. 對於 1200 萬行,包含數據的文件組的數據大小約為48,5 GB

日誌大小僅增加了40mb.

根據這個數據有兩個問題:

  1. 我的想法是讓每天的工作量增加 30 倍。但根據上面的數據,它不是那樣工作的。13*12 != 48,5
  2. 為什麼日誌只增加40 mb了數據?
  3. 如果我們將數據儲存在 AlwaysOn 解決方案中,大小有什麼不同嗎?

為了測量文件大小,我使用了以下查詢:

SELECT [sizing].[DbName],
      [sizing].[FileName],
      [sizing].[type_desc],
      [sizing].[CurrentSizeMB],
      [sizing].[FreeSpaceMB],
      [CurrentSizeMB] - [FreeSpaceMB] AS [SizeStored]
FROM
(
   SELECT DB_NAME() AS [DbName],
          [name] AS [FileName],
          [type_desc],
          [size] / 128.0 AS [CurrentSizeMB],
          [size] / 128.0 - CAST(FILEPROPERTY([name], 'SpaceUsed') AS int) / 128.0 AS [FreeSpaceMB]
   FROM [sys].[database_files]
   WHERE [type] IN ( 0, 1 )
) [sizing];
  1. 聽起來您的數據變化很大,例如一些 VARCHAR(MAX) 列有時會被大量填充,而有時則根本沒有。這就是為什麼 12,000,000 行不一定是 100 萬行大小的 12 倍。您需要使用更大的樣本量來更準確地確定您的數據增長情況。例如,如果您想知道一個月後較小的表會是什麼樣子,那麼您需要針對至少一個月的數據(360,000,000 行)進行衡量。老實說,如果可能的話,可能應該衡量幾個月以獲得更準確的估計(儘管我假設這不是因為您正在嘗試進行初始配置)。
  2. 如果沒有更多資訊,很難說出為什麼您的日誌文件相對較慢。您的數據庫設置為哪種**恢復模式?**是否有可能有人對其進行了SHRINK操作?
  3. AlwaysOn 解決方案不會對您的Primary Replica的大小產生重大影響。但請記住,AlwaysOn 會在單獨伺服器上的輔助副本中生成數據庫的文字副本,因此您將儲存相同數據的兩個副本。

為了回答你的根本問題,我在 #1 中給出的關於使用盡可能大的數據樣本進行計算並添加最壞情況估計緩衝區的建議是你最好的選擇。例如,如果您將一個月的數據計算為 1 TB,則為第一個月提供 1.25 或 1.5 TB 的數據是安全的,並隨著時間的推移根據需要進行調整。這將是一項持續的任務,您需要在開始時定期重新訪問、重新計算、重新評估和重新配置,直到您對數據更加熟悉。一開始就安全過度配置比配置不足要好。

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