压缩与缩小数据库

Lit*_*din 4 sql-server-2008 shrink compression

压缩和收缩 SQL Server 中的数据库是否相同?如果我压缩一个表,它会降低查询性能和 DML 吗?

Mik*_*Fal 10

在 SQL Server 中,缩小数据库/数据文件和压缩是不同的。收缩文件(顺便说一下,实际上并不推荐这样做)是从数据库中的数据文件中删除未使用空间的过程。创建文件时,SQL Server 通过调整文件大小(取决于文件的创建方式)来“保留”空间,即使它实际上没有数据来填充该空间。这个想法是你最终会在那里放一些东西(但并非总是如此)。 收缩消除了这个空白空间。

另一方面,数据压缩会压缩您的对象以减少它们在数据文件中占用的空间。有几种不同类型的压缩,但它们最终都会减少表和索引所需的物理空间。

假设您有一个 1 GB 的数据文件,其中包含 600 MB 的实际数据。这两个操作将产生以下影响:

  • 缩小:您将数据文件的大小缩小到 600 MB。这是限制,因为您仍然需要数据容量。
  • 压缩:您将数据从 600 MB 调整为更少(取决于算法可以压缩它的程度),但您的数据文件将保持为 1 GB。

对于你的第二个问题,压缩是 CPU 密集型的(它必须解压缩数据才能使用它),但使用更少的磁盘 IO(更少的位来拉出磁盘)。如果您受到 CPU 限制,它可能会影响您的查询性能。正确评估的唯一方法是测试。

  • +1 简而言之:收缩只是释放和移动页面。压缩实际上改变了每一页上的数据。并且这两个选项也不同于索引碎片整理,它与磁盘碎片整理和索引重建只有轻微的相关性——两者都可以释放空间,提高 I/O 效率,或者两者兼而有之。 (3认同)
  • 此外,99% 的系统不在 Fusion-IO 或真正好的 SSD 配置上,都是受 I/O 限制的,而不是受 CPU 限制的,除非系统动力严重不足,否则压缩*几乎*总是值得的。但是,要确定地知道,就像许多其他事情一样,您需要进行测试。 (2认同)