【问题标题】:How is compressed data stored in the buffer cache, compressed or uncompressed?压缩数据如何存储在缓冲区缓存中,压缩或未压缩?
【发布时间】:2011-06-05 02:49:37
【问题描述】:

在 SQL Server 2008 R2 中使用行级或页面级压缩时,SQL Server 会将数据以压缩形式还是扩展形式存储到其buffer cache

例如,假设我有一个(页面级)压缩到其原始大小的 20% 的表:

Original size:  100 GB
Compressed size: 20 GB

此外,运行此特定 SQL Server 实例的(专用)主机具有 24 GB 内存。如果查询执行表扫描,查看所有列(为了示例)并且 SQL Server 将数据缓存为压缩,理论上它可以将所有数据都放在其缓冲区缓存中,并可用于将来的查询。但是,如果数据是在未压缩的情况下缓存的,那么 100 GB 的数据显然无法容纳 24 GB 的服务器内存。

那么,SQL Server 是如何在其缓冲区缓存中存储压缩数据的呢?

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2008-r2


    【解决方案1】:

    压缩页面以压缩形式保存在磁盘上,并在读入内存时保持压缩状态。

    参考:SQL Server 2008 Data Compression: Strategy, Capacity Planning and Best Practices

    数据被解压(不是整个 页,但只有数据值 利息),当它满足其中之一 以下条件:

    • 读取它以作为查询响应的一部分进行过滤、排序、连接。
    • 由应用程序更新。

    内存中没有压缩页面的解压缩副本。 解压数据会消耗 CPU。 但是,由于压缩数据使用 更少的数据页,它也节省了:

    • 物理 I/O:因为物理 I/O 对工作负载来说很昂贵 透视,减少物理 I/O 通常比 压缩的额外 CPU 成本 并解压数据。注意 物理 I/O 被保存,因为 从或 写入磁盘,因为更多的数据 可以保持缓存在缓冲池中 记忆。

    • 逻辑 I/O(如果数据在内存中):因为逻辑 I/O 会消耗 CPU, 减少的逻辑 I/O 有时可以 补偿CPU成本 压缩和解压缩数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多