我有四个SQL Server数据库。根据最大负载要求,每个数据库文件的大小可以在1到2 TB之间。 HDD是一个具有大约9TB空间的多磁盘DAS。在数据库升级期间,单个数据库的事务日志文件可以大小增长到4TB。 (是的,我将一个新列添加到几亿行表中。)数据库是在简单的恢复模型上。

我可以从Microsoft找不到Microsoft的推荐(或拇指规则),了解给定数据库大小的多个磁盘空间。我得到它可以广泛变化。如果我的理解是正确的,它是我需要考虑的最大交易,因为日志文件内部的空间重新用于不同的事务。我认为日志增长设置为10%,但即使它设置为1或2个演出增量,我认为我仍然会切割它。

是否有一些我需要使用的策略来避免这种巨大的日志文件,或者我只是需要更多的磁盘空间来避免在升级期间耗尽空间?如果我做错了什么,我想学习如何做到这一点正确的方式。

我正在使用SQL Server 2012。 谢谢!

有帮助吗?

解决方案

(是的,我将一个新列添加到几亿行表中。)

将列添加到非常大的表格可能有含义,但有一个添加列的聪明方式

from:添加不是null列作为在线操作 < / p>

从SQL Server 2012 Enterprise Edition开始,当默认值是运行时常数时,在默认值中添加一个not null列是在线操作。这意味着,无论表中的行数如何,都会瞬间完成。

添加一个不是null列,默认值不是运行时常量始终执行离线,并且在操作持续时间内获取独占(SCH-M)锁定。

企业版(工作在2008年R2标准版本)具有ALTER TABLE source_table SWITCH TO new_destination_table

数据库是在简单的恢复模型上。

在简单的恢复模型中,只有一个生成的reaticetagcode将截断日志。

如果在典型升级期间正在录制自动生长学指标,那么这些收集的度量标准的平均值会给您一个良好的起始数字。 这个脚本 将帮助您开始(您需要默认跟踪启用并在您的服务器上运行)

我认为日志增长设定为10%,但即使它设置为1或2个演出增量,我认为我仍然会切割它。

我会建议您<强>更改从百分比到固定MB的自动流动设置。作为 @aaronbertrand在他的评论中说:

问题是随着时间的推移需要更长更长,因为10%的越来越多的文件也不断增长 - 这就像复合兴趣,但你支付,没有收到。

为完整性,请确保启用即时文件初始化,因此数据文件自动编制可以利用它。

其他提示

在将列添加到VLDB类表的情况下,可能值得探索使用新结构创建新表,并将旧表中的记录移动到小型范围内的新表。它将保持单个交易尺寸小,因此在简单恢复中的TLOG的高水位标记将相对较低。您无法完全避免酸性需求,但如果您可以将升级批量为较小的步骤而不是单个事务,您可能会在磁盘空间约束周围工作。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top