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如何将压缩数据存储在缓冲区缓存中?
压缩页面在磁盘上保持压缩状态,并在读入内存时保持压缩状态.
参考:SQL Server 2008数据压缩:策略,容量规划和最佳实践:
当满足以下条件之一时,数据将被解压缩(不是整个页面,而只是感兴趣的数据值):
- 作为查询响应的一部分,它被读取用于过滤,排序,连接.
- 它由应用程序更新.
压缩页面没有内存中的解压缩副本. 解压缩数据会消耗CPU.但是,由于压缩数据使用的数据页较少,因此还可以节省:
物理I/O:因为从工作负载的角度看物理I/O是昂贵的,所以减少物理I/O通常比压缩和解压缩数据的额外CPU成本节省更多.请注意,保存物理I/O是因为从磁盘读取或写入较少量的数据,并且因为更多数据可以保留在缓冲池内存中.
逻辑I/O(如果数据在内存中):由于逻辑I/O消耗CPU,减少的逻辑I/O有时可以补偿压缩和解压缩数据的CPU成本.
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |