压缩数据如何存储在缓冲区缓存中,压缩或解压缩?

Mic*_*eyn 6 sql-server sql-server-2008 sql-server-2008-r2

在SQL Server 2008 R2中使用行级或页级压缩时,SQL Server是否以压缩格式或扩展形式将数据存储到缓冲区缓存中.

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

Original size:  100 GB
Compressed size: 20 GB
Run Code Online (Sandbox Code Playgroud)

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

那么,SQL Server如何将压缩数据存储在缓冲区缓存中?

Mit*_*eat 8

压缩页面在磁盘上保持压缩状态,并在读入内存时保持压缩状态.

参考:SQL Server 2008数据压缩:策略,容量规划和最佳实践:

当满足以下条件之一时,数据将被解压缩(不是整个页面,而只是感兴趣的数据值):

  • 作为查询响应的一部分,它被读取用于过滤,排序,连接.
  • 它由应用程序更新.

压缩页面没有内存中的解压缩副本. 解压缩数据会消耗CPU.但是,由于压缩数据使用的数据页较少,因此还可以节省:

  • 物理I/O:因为从工作负载的角度看物理I/O是昂贵的,所以减少物理I/O通常比压缩和解压缩数据的额外CPU成本节省更多.请注意,保存物理I/O是因为从磁盘读取或写入较少量的数据,并且因为更多数据可以保留在缓冲池内存中.

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