插入sql行而不是删除的行将使数据库大小增加或保持不变

插入sql行而不是删除的行将使数据库大小增加或保持不变,sql,sql-server,Sql,Sql Server,我有一个很大的数据库,它的MDF文件将近190 GB。当我删除大量旧行时,MDF的大小不会减小。将新记录插入数据库时会发生什么情况?数据文件的大小是否会增加,或者新记录是否会填充已删除行创建的可用/可用空间。我无法缩小数据库或将其复制到新的空数据库中。这是一个生产数据库,做任何这些操作都需要我停止网站,这对我来说是不可行的。我应该从我的主机提供商那里获得更多的磁盘空间吗 将新记录插入数据库时会发生什么情况?数据文件的大小是否会增加,或者新记录是否会填满已删除行创建的可用/可用空间 它将填满空闲空

我有一个很大的数据库,它的MDF文件将近190 GB。当我删除大量旧行时,MDF的大小不会减小。将新记录插入数据库时会发生什么情况?数据文件的大小是否会增加,或者新记录是否会填充已删除行创建的可用/可用空间。我无法缩小数据库或将其复制到新的空数据库中。这是一个生产数据库,做任何这些操作都需要我停止网站,这对我来说是不可行的。我应该从我的主机提供商那里获得更多的磁盘空间吗

将新记录插入数据库时会发生什么情况?数据文件的大小是否会增加,或者新记录是否会填满已删除行创建的可用/可用空间

它将填满空闲空间

我不能缩小数据库

也可以。最多只能使用
收缩文件
。然而,这也不应该是你经常做的事情。仅当(偶然)数据文件变得异常大时,才应执行此操作。随着时间的推移,大多数数据库都在继续增长,因为大多数数据库都没有清除任何数据。因此,通常需要更多的空间(见下文)

我应该从我的主机提供商那里获得更多的磁盘空间吗


当您插入更多数据,并且无法删除任何“旧”数据时,是的,您将需要更多的磁盘空间。请注意,尽管数据文件有一定的大小,但这并不意味着它们已满。您可以通过报告查看磁盘可用空间。还有人解释了未分配、未使用和可用空间之间的区别,这取决于具体情况,但在许多情况下,在收缩文件之前,必须重新组织或重建索引。根据您的设计,您可能无法立即将此空间重新用于新行。重建索引@Piotr毫无意义。这里的第22个问题是你可以说Ok,收缩然后重建索引!但是,正如博文所解释的,数据文件将增长以构建索引的新副本,然后删除旧副本。。。突然之间,我们的文件又增长了,虽然可能没有达到原始大小,因为OP声明他们清除了数据。如果整个表是一个常规的非分区B树,那么您是100%正确的。如果某些数据存储在Columnstore索引中,则需要对其进行重新排序以实际删除这些行。如果按时间划分分区,则重建删除了99%数据的分区可能会有所帮助。当然,你不应该缩小数据库。