为什么.bak比要备份的数据库小得多?


11

我只是备份了SQL Server数据库。MDF和LDF文件总共约29 GB,但是.bak文件只有23 GB,约小20%。

我的第一个猜测是,数据压缩的一个版本小于包含相同数据的另一个版本时,将是数据压缩,但是压缩通常会产生比20%更好的压缩率,尤其是对于高序数据(例如数据库表)而言。 )而且,压缩后的数据不能轻易地进一步压缩,但是我知道.bak文件可以被压缩。

因此,如果数据没有被压缩,并且没有任何东西被丢弃,(因为进行备份的全部目的是以后能够将其恢复到相同的状态),那么那20%的原因是什么呢?

Answers:


16

该空间已分配给数据库文件,但未使用。

您可以创建一个新数据库,使其大小为10GB,然后查看文件在磁盘上分配的空间量。但是,在将数据放入数据库之前,该文件实际上是空的,并且备份文件的大小将最小。

高温超导


10

对于完整备份,通常可以忽略LDF

MDF包含实际数据

Bak文件仅包含mdf内部正在使用的数据页。不会使用某些空间。例如,此空间是索引重建的开销用户。

对于可能具有250gb mdf的数据库,有100gb的备份是非常典型的。如果我的mdf与我的备份大小相同,这将是一个红色标记,表示数据库意外收缩或缺少磁盘空间等


4

创建数据库后,可以指定(为了提高性能)要分配给数据和日志文件的空间。即使表中未存储任何数据,也将保留该空间。仅备份已写入数据的扩展数据块。

在您的情况下,您的MDF / LDF总数可能甚至为100 GB,但是对于您所做的备份,您的备份仍将约为23 GB。如果添加了大约1 GB的数据,则MDF / LDF总计仍为100 GB,但是现在的备份约为24 GB。

完整备份包含其中包含数据的所有扩展区以及一些日志文件。完整备份包含备份任务结束时的所有数据,而不仅仅是备份任务开始时的数据。这就是为什么还需要一些日志文件的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.