对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如何将压缩数据存储在缓冲区缓存中?
答案 0 :(得分:8)
压缩页面在磁盘上保持压缩状态,并在读入内存时保持压缩状态。
参考:SQL Server 2008 Data Compression: Strategy, Capacity Planning and Best Practices:
数据被解压缩(不是整个 页面,但只有数据的值 当它遇到其中一个时 以下条件:
- 读取过滤,排序,加入,作为查询响应的一部分。
- 由应用程序更新。
压缩页面没有内存解压缩副本。 解压缩数据会消耗CPU。 但是,因为压缩数据使用 数据页面越少,它也会节省:
物理I / O:因为工作负载的物理I / O很昂贵 透视,减少物理I / O. 通常会带来更大的节省 压缩的额外CPU成本 并解压缩数据。注意 因为a,物理I / O都被保存了 从或读取较小的数据量 写入磁盘,因为更多的数据 可以保留在缓冲池中缓存 存储器中。
逻辑I / O(如果数据在内存中):因为逻辑I / O消耗CPU, 有时可以减少逻辑I / O. 补偿CPU成本 压缩和解压缩数据。