Sparse File(稀疏文件)不是SQL Server的特性。它属于Windows的NTFS文件系统的一个特性。如果某个大文件中的数据包含着大量“0数据”(这个应该从二进制上看),这样的文件就可以被称之为稀疏文件。如果从二维图上看这个文件你会发现文件就像很多很多洞一样,这就是“稀疏”的由来。这种文件造成的问题是空间浪费。比如说如果你现在用VMWare Workstatation创建了一个虚拟机,初始化磁盘大小为40G,VM必然会为虚拟机生成一个或者多个.vmdk文件。如果文件系统真的分配40G的物理磁盘空间给虚拟机磁盘文件,实际上是很大的浪费,因为它根本没用到这么多。那解决办法有几种。第一种是在分配整个完整大小的空间,然后把没有用到的空间都写0,然后用NTFS的压缩技术压缩文件大小。这种做法虽然算是解决了空间浪费的问题,但是是有代价的,文件从缓存写入磁盘前的压缩过程和文件解压缩的过程是有代价的,对于一个文件操作繁忙的系统或应用程序而言如此频繁的压缩和解压缩操作是很大代价的。

NTFS中处理这种文件的做法是只在文件的内容区域块不是大量的0数据才分配空间。当缓存中的文件内容在写入磁盘前被检出出存在大量区块的0数据,NTFS不会把这部分数据也写入磁盘,而是自己维护着一份列表,记录下0数据的位置。这样当读取文件操作发生并且读取到0数据时,NTFS再为读取操作写入0数据到缓冲区。

那我们再谈回来稀疏文件和SQL Server有什么关系?SQL Server会在NTFS系统生成很多类型的文件,而当中的Database Snapshots和DBCC CHECKDB命令产生的文件就是稀疏文件。DBCC CHECKDB命令在运行过程中所产生的数据都是存储在数据库内部快照(Database Internal Snapshots)里面的。

这里我试下创建一个数据库快照然后来观察下快照文件所占用磁盘空间的大小

CREATE DATABASE Test_Jerry_SS
ON
( NAME =Test_2, FILENAME ='H:\Database Data Files\Test_Jerry_SS_01.ss'),
( NAME =test1dat3, FILENAME ='H:\Database Data Files\Test_Jerry_SS_02.ss'),
( NAME =test1dat4, FILENAME ='H:\Database Data Files\Test_Jerry_SS_03.ss'),
( NAME =test1dat5, FILENAME ='H:\Database Data Files\Test_Jerry_SS_04.ss')
AS SNAPSHOT OF [Test_Jerry]
GO

实际大小仅为128KB

参考文献:
Sparse Files

Sparse File Operations

NTFS Sparse Files For Programmers

What are Sparse Files and Why Should I Care as SQL Server DBA?

最新文章

  1. H5案例分享:html5移动开发细微之美
  2. JQuery冲突问题,以及含有jquery的框架与jquery冲突
  3. UISearchController Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior
  4. 利用move_base导航--42
  5. mvc EF 数据保存时,报错:”对一个或多个实体的验证失败……“之解决
  6. 转-Android客户端和服务端如何使用Token和Session
  7. CSS3 3D变换
  8. DataTemplate和ControlTemplate的关系
  9. c++ 设计模式1
  10. 字体的大小(pt)和像素(px)如何转换?
  11. Python 爬虫入门(requests)
  12. Python:运算符
  13. 大豆生物柴油驱动的大巴斯(Bus)
  14. Ajax应用-定义一套自己的Ajax框架
  15. Python教程(2.5)——控制台输入
  16. 使用dns批量管理普通主机名相关问题
  17. DSAPI多功能组件编程应用-图形图像篇(中)
  18. LeetCode算法题-Number of Segments in a String(Java实现)
  19. 【转】iframe页面跳转时,导致父页面滚动!该怎么解决?
  20. solr搜索配置权重

热门文章

  1. Idea maven编译报错 javacTask: 源发行版 1.8 需要目标发行版 1.8
  2. 08-oracle统计函数(单组分组函数)
  3. MySQL初始化与用户配置
  4. bug缺陷级别定义
  5. Android捕捉图像后在SurfaceView上变形显示问题的处理
  6. c#实现gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
  7. vue-cli中使用stylus
  8. Principal Component Analysis(PCA)
  9. IDEA创建一个Spring MVC 框架Java Web项目,Gradle构建
  10. post方式发送接收文件