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?

SQL Server ->> Sparse File(稀疏文件)的更多相关文章

  1. SQL Server通过File Header Page来进行Crash Recovery

    SQL Server通过File Header Page来进行Crash Recovery 看了盖总的一篇文章 http://www.eygle.com/archives/2008/11/oracle ...

  2. 关于SQL Server中分区表的文件与文件组的删除(转)

    在SQL Server中对表进行分区管理时,必定涉及到文件与文件组,关于文件与文件组如何创建在网上资料很多,我博客里也有两篇相关转载文件,可以看看,我这就不再细述,这里主要讲几个一般网上很少讲到的东西 ...

  3. SQL Server 无法打开物理文件的 2 种解决办法

    解决方法: 方法1.无法打开可以能是没有权限.如果是这样以管理员身份运行Managerment Studio就可以了. 方法2.找到指定的数据库文件.右键属性-->安全-->勾上  ‘完全 ...

  4. SQL SERVER数据库删除LOG文件和清空日志的方案

    原文:SQL SERVER数据库删除LOG文件和清空日志的方案 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文 ...

  5. sql server迁移数据(文件组之间的互相迁移与 文件组内文件的互相迁移)

    转自:https://www.cnblogs.com/lyhabc/p/3504380.html?utm_source=tuicool SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件 ...

  6. SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题

    SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题 最近服务器执行收缩日志文件大小的job老是报错 我所用的一个批量收缩日志脚本 USE [master] GO /*** ...

  7. sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

    SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复. ...

  8. SQL SERVER 查看mdf ldf文件路径

    SQL SERVER 查看mdf ldf文件路径 select filename from sysfiles

  9. SQL Server数据库状态和文件状态

    数据库状态 (database states) 查询数据库的当前状态 : 1.查询所有数据库的状态 ,通过sys.databases目录视图的state_desc列 user master go se ...

随机推荐

  1. 移动端滑动时页面惯性滑动overflow-scrolling: touch

    -webkit-overflow-scrolling:auto | touch; auto: 普通滚动,当手指从触摸屏上移开,滚动立即停止 touch:滚动回弹效果,当手指从触摸屏上移开,内容会保持一 ...

  2. (转)合格linux运维人员必会的30道shell编程面试题及讲解

    超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...

  3. selenium+Python(生成html测试报告)

    当自动化测试完成后,我们需要一份漂亮且通俗易懂的测试报告来展示自动化测试成果,仅仅一个简单的log文件是不够的 HTMLTestRunner是Python标准库unittest单元测试框架的一个扩展, ...

  4. java中String,StringBuffer与StringBuilder的区别??

    本文着重介绍下,应该在何时恰当的使用string,stringbuffer,stringbuilder. 1,执行速度 StringBuilder >  StringBuffer  >  ...

  5. Python机器学习库sklearn的安装

    Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...

  6. window 端口占用,杀进程

    假如我们需要确定谁占用了我们的8008端口,在windows命令行窗口下执行: C:\Documents and Settings>netstat -aon|findstr 80 看到了吗,端口 ...

  7. Bash编程(5) Shell方法

    shell的方法在相同的进程内执行,与调用它的脚本一致.对于方法来说,脚本中的所有变量均可见,且不需要执行export.方法中可以创建局部变量,且不影响正在调用的脚本. 1. 定义语法 (1) Kor ...

  8. win10中VirtualBox联网设置

    <分享>关于win10操作系统中VirtualBox无法桥接的解决方法 版权声明:本文为博主原创文章,未经博主允许不得转载. 升级win10,本来是一件很好的事,想好好体验一下新版本的感觉 ...

  9. 用jQuery来绑定事件的3种方法和区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. RabbitMQ小节

    一.RabbitMQ简介 RabbitQM是一款应用程序对应用程序的通讯方法,基于AMQP协议,用Erlang语言开发,因而安装环境配置之前需要首先安装Erlang语言环境.通过客户端发送消息到队列消 ...