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

时间:2011-06-05 02:49:37

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

对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如何将压缩数据存储在缓冲区缓存中?

1 个答案:

答案 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成本   压缩和解压缩数据。

  •