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. cordova build android 环境的坑

    毕业设计的选题为一个app,native app学起来在时间上有些不足,因此选择了hybird app ;cordova就不介绍了,本文主要是写在cordova bulid android时所遇到的问 ...

  2. WinScp结合Putty在Windows与UNIX之间进行文件传输

    1. 关于传输协议: SSH Secure Shell安全外壳协议 SFTP Secure File Transfer Protocal安全文件传送协议 2. WinScp与Putty的作用: Put ...

  3. pip安装Python依赖环境

    将包依赖信息保存在requirements.txt文件 pip freeze > requirements.txt 根据依赖文件安装依赖 pip install -r requirements. ...

  4. Python+Selenium之常用模块

    要用webdriver:from selenium import webdriver eg: driver = webdriver.Chrome()      driver.maximize_wind ...

  5. (转)[InnoDB系列] -- SHOW INNODB STATUS 探秘

    原文:http://imysql.cn/2008_05_22_walk_through_show_innodb_status 很多人让我来阐述一下 SHOW INNODB STATUS 的输出信息, ...

  6. 生产html测试报告

    批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成 HTML 格式的.unittest 里面是不能生成 html 格式报告的,需要导入一个第三方的模块:HTML ...

  7. [转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化

    局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自< ...

  8. MySql数据库与JDBC编程三

    多表连接查询(两种规范 SQL92和SQL99) SQL92规范: 等值连接,非等值连接,外连接,广义笛卡儿积连接 多个表都放在from后,,连接条件放在where后,条件要求两列值相等,则为等值连接 ...

  9. jquery.edatagrid(可编辑datagrid)的使用

    用spring+springmvc+mybatis+mysql实现简单的可编辑单元格,首先是页面效果图: 其中,“编号”列是不可编辑的,“暂缓措施”是可以自由编辑的,主要html组成: <%@ ...

  10. MySQL批量插入多条数据方便测试

    批量插入流程 数据库字段 delimiter create procedure doinsert3() begin declare i int; declare j int; ; ; ) do ins ...