LocalDB (mdf) compaction

本文关键字:compaction mdf LocalDB | 更新日期: 2023-09-27 17:56:02

我正在考虑在未来的项目中使用LocalDB,而不是OleDB(MDB)。

我是否需要不时压缩数据库?如果是,那又如何呢?

我发现在SQL数据库(MDF,对吧?)的情况下有一个Shrink选项,可以以某种方式定义自动收缩和修复。也许我不需要做压缩(在我的理解中,这是创建新的数据库并将实际内容复制到其中,因此所有过时的内容都会被删除),但它足以以某种方式启用收缩(这是一个选项,以便服务器定期执行一种垃圾收集,通过将垃圾移动到数据库文件的末尾并截断文件)。

同样有趣的是,收缩在文件系统碎片方面的效果如何(我的猜测不是很好)。

总而言之,我更喜欢压缩,即如何执行它以及如何确定何时需要它(执行压缩的标准)的想法(代码)。

我明白了,有BACKUP命令,也许压缩看起来像:1)备份2)重新创建数据库3)从备份还原?

LocalDB (mdf) compaction

LocalDB是SQL Server Express,即SQL Server。一般的SQL Server准则通常也适用于LocalDB,除非您有非常特殊的情况。请注意,SQL Server Express(包括LocalDB)对MDF文件大小有额外的限制,在SQL Server Express 2012中为10GB。

要记住的一件事是,该格式被设计为快速而不是紧凑。例如,空数据库将创建一个几 MB 大的 MDF 文件。

autogrowautoshrink似乎是管理MDF大小的方法,如果你想尽可能地降低它。有与性能相关的权衡,在这篇知识库315512文章和保罗·兰德尔的这篇文章中讨论过,包括评论中的讨论。

根据文件系统碎片 - 创建具有足够大文件大小的数据库应该会有所帮助,因为当一次询问时,操作系统应该能够更容易地找到大的连续磁盘空间块。当数据库文件增长和收缩时,它更有可能在文件系统级别碎片化。我也发现了这篇文章,讨论了使用工具"手动"对给定文件进行碎片整理。看起来很有希望,但我还没有测试过。