如果添加另一个行数据文件,SQL Server 开始移动数据的速度有多快?

Jam*_*mes 2 sql-server

我们的 sql server 迁移被延迟(自然地),并且在新的切换日期之前它将用完空间。为了保持数据库正常运行,我需要给它另一个数据库文件来开始写入。

我已经分配了空间并准备好了,但是当我创建它时,SQL Server 会立即开始将数据移动到新文件中吗?

问题:我最好创建两个新文件,然后运行

    dbcc shrinkfile (livendb, emptyfile)
Run Code Online (Sandbox Code Playgroud)

在旧的?确保他们立即变得平等?

Han*_*non 5

SQL Server在确定写入数据的位置时使用比例填充算法

如果您有一个 90% 已满的文件,并将一个大小相似的新空文件添加到同一个文件组,则新文件将获得大约 90% 的写入(因为它几乎是空的,而现有文件是 90%满的)。

将新文件设置为与现有文件相同的大小(当然,如果现有驱动器空间不足,这将位于不同的驱动器上)。比例填充算法需要预先分配大量的文件空间才能将其大部分数据实际写入新文件。

按照您希望的方式配置文件组后,您可以通过重建表和索引来重新平衡文件之间的数据,确保在ON ....子句中为正在重建的每个表和索引指定正确的文件组。

顺便说一句,养成始终指定最大文件大小并有目的地管理的习惯。在 SQL Server 代理中设置警报,以便在文件填满时收到警报。当您考虑最大文件大小时,请评估合理的文件增长增量;一种平衡增长文件所需的时间与不持续增长文件的愿望。目前,如果我认为一个文件组需要 10 GB 的磁盘,并且我决定将其拆分为两个 5GB 的文件,我可能会将每个文件的初始文件大小设置为 3GB,文件增长增量设置为 250MB 或 500MB,我将每个文件的最大文件大小设置为 6GB,只是为了留出一点余地。然后我会设置一个事件以在任何文件超过 80% 时发出警告,让您有时间配置更多磁盘空间。我的答案在这里 显示了设置警报以监视日志文件增长的示例。