我正在构建的数据库的要求之一是预测数据库大小以便为生产环境准备硬件。一个应用程序有 2 个分区的主表。表在8 Filegroups (16 files, 32 partitions)
. 这两个表都存储了上个月的数据(一个月后数据将被删除)。我们必须12
每天在一张桌子上准备36
好几百万行,在第二张桌子上准备好几百万行。我对这些表进行了工作负载测试,并且:
- 对于 100 万行,包含数据的文件组的数据大小约为
13 GB
- 对于 1200 万行,包含数据的文件组的数据大小约为
48,5 GB
日志大小仅增加了40mb
.
根据这个数据有两个问题:
- 我的想法是让每天的工作量增加 30 倍。但根据上面的数据,它不是那样工作的。
13*12 != 48,5
- 为什么日志只增加
40 mb
了数据? - 如果我们将数据存储在 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];
听起来您的数据变化很大,例如一些 VARCHAR(MAX) 列有时会被大量填充,而有时则根本没有。这就是为什么 12,000,000 行不一定是 100 万行大小的 12 倍。您需要使用更大的样本量来更准确地确定您的数据增长情况。例如,如果您想知道一个月后较小的表会是什么样子,那么您需要针对至少一个月的数据(360,000,000 行)进行衡量。老实说,如果可能的话,可能应该衡量几个月以获得更准确的估计(尽管我假设这不是因为您正在尝试进行初始配置)。
如果没有更多信息,很难说出为什么您的日志文件相对较慢。您的数据库设置为哪种恢复模式?是否有可能有人对其进行了
SHRINK
操作?AlwaysOn 解决方案不会对您的Primary Replica的大小产生重大影响。但请记住,AlwaysOn 会在单独服务器上的辅助副本中生成数据库的文字副本,因此您将存储相同数据的两个副本。
为了回答你的根本问题,我在 #1 中给出的关于使用尽可能大的数据样本进行计算并添加最坏情况估计缓冲区的建议是你最好的选择。例如,如果您将一个月的数据计算为 1 TB,则为第一个月提供 1.25 或 1.5 TB 的数据是安全的,并随着时间的推移根据需要进行调整。这将是一项持续的任务,您需要在开始时定期重新访问、重新计算、重新评估和重新配置,直到您对数据更加熟悉。一开始就安全过度配置比配置不足要好。