浅谈SQL Server中的快照

简介

    数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。

 

什么是快照

    数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处:

  •     提供了一个静态的视图来为报表提供服务
  •     可以利用数据库快照来恢复数据库,相比备份恢复来说,这个速度会大大提高(在下面我会解释为什么)
  •     和数据库镜像结合使用,提供读写分离
  •     作为测试环境或数据变更前的备份,比如我要大批导入或删除数据前,或是将数据提供给测试人员进行测试前,做一个快照,如果出现问题,则可以利用快照恢复到快照建立时的状态

 

快照的原理

    与备份数据库复制整个数据库不同,快照并不复制整个数据库的页,而是仅仅复制在快照建立时间点之后改变的页。因此,当利用快照进行数据库恢复时,也仅仅将那些做出改变的页恢复到源数据库,这个速度无疑会大大高于备份和恢复方式。这个原理如图1所示(图摘自SQL Server 2008揭秘)。

    2

    图1.镜像的原理

 

    由图1可以看出,快照并不是复制整个整个数据库,而仅仅利用快照存储原始页。因此可以看出,源数据库上建立快照会给IO增加额外负担.当对快照数据库进行查询时,快照时间点之后更改的数据会查询数据文件,。这个概念如图2所示(图摘自SQL Server 2008揭秘)。

    3

    图2.查询快照数据库时查询的分布

 

写入时复制(Copy On Writing)和稀疏文件(Sparse Flie)

    由上图中可以看出,快照数据库的文件是基于稀疏文件(Sparse File),稀疏文件是NTFS文件系统的一项特性。所谓的稀疏文件,是指文件中出现大量0的数据,这些数据对我们用处并不大,却一样占用着磁盘空间。因此NTFS对此进行了优化,利用算法将这个文件进行压缩。因此当稀疏文件被创建时,稀疏文件刚开始大小会很小(甚至是空文件),比如图3所示的文件就是一个稀疏文件。虽然逻辑上占了21M,但文件实际上占了128KB磁盘空间。

    4

    图3.一个稀疏文件

 

    对于快照来说,除了通过快照数据库文件的属性来看快照的大小之外,也可以通过DMV来查看,如图4所示.

    5

    图4.通过DMV查看快照数据库大小

 

    而当快照创建后,随着对源数据库的改变逐渐增多,稀疏文件也会慢慢增长,概念如图4所示。

    1

    图5.随着源数据库的更改越来越多,稀疏文件不断增长

 

    所以,通常来说,当稀疏文件增长到源数据库文件大小的30%时,就应该考虑重建快照了。

    而稀疏文件的写入是利用了微软的写入时复制技术(Copy-On-Writing),意思是在复制一个对象时并不是真正把对象复制到另一个位置,而是在新的对象中映射一个指针,指向原对象的位置。这样当对新对象执行读操作时,直接指向原对象。而在对新的对象执行写操作时,将改变部分对象的指针指向到新的地址中。并修改映射表到新的位置中。

 

使用快照的限制

    使用快照存在诸多限制,由于列表太长(详细请参考MSDN:http://msdn.microsoft.com/zh-cn/library/ms175158.aspx#LimitationsRequirements),我只概括的说一下主要限制。

  •     当使用快照恢复数据库时,首先要删除其他快照
  •     快照在创建时的时间点上没有commit的数据不会被记入快照
  •     快照是快照整个数据库,而不是数据库的某一部分
  •     快照是只读的,意思是不能在快照上加任何更改,即使是你想加一个让报表跑得更快的索引
  •     在利用快照恢复数据库时,快照和源数据库都不可用
  •     快照和源数据必须在同一个实例上
  •     快照数据库的文件必须在NTFS格式的盘上
  •     当磁盘不能满足快照的增长时,快照数据库会被置为suspect状态
  •     快照上不能存在全文索引

    其实,虽然限制看上去很多,但只要明白快照的原理,自然能推测出快照应该有的限制。

 

快照的创建和使用

    无论是使用SSMS或是命令行,快照只能通过T-SQL语句创建。在创建数据库之前,首先要知道数据库分布在几个文件上,因为快照需要对每一个文件进行copy-on-writing。如图6所示。

    6

    图6.首先查出数据库的文件分布

 

    根据图6的数据库分布,我们通过T-SQL创建快照,如图7所示。

    7

    图7,根据图6的数据库信息创建一个数据库快照

 

     当快照数据库创建成功后,就可以像使用普通数据库一样使用快照数据库了,如图8所示。

    8

    图8.快照数据库和普通数据库一样使用

 

    通过如下语句可以看到,快照数据库文件和源数据库的文件貌似并无区别,仅仅是快照数据库文件是稀疏文件,如图9所示。

    9

    图9.源数据库和快照数据库

 

    而删除快照数据库和删除普通数据库并无二至,也仅仅是使用DROP语句,如图10所示。

    10

    图10.删除快照数据库

 

    我们也可以利用快照恢复数据库,这个恢复速度要比普通的备份-恢复来的快得多,这也可以将数据库呈现给测试人员,当测试结束后,恢复数据库到测试之前的状态。如图11所示。

    11

    图11.利用快照恢复数据库

 

使用快照其他一些需要考虑的因素

    1.快照数据库的安全设置继承源数据库的安全设置。也就是说能访问源数据库的用户或角色也能访问快照数据库,当然,因为快照数据库是只读的,所以无论任何角色或人都无法修改快照数据库。

    2.我们由文章前面图5看出,随着快照存在的时间越来越长,快照会不断增长。所以推荐在快照达到源数据库大小30%之前,重新创建快照。

    3.由于快照会拖累数据库性能,所以数据库不宜存在过多快照。

 

总结

    本文简单讲述了数据库快照的概念,原理以及使用。数据库快照可以在很多场景下使用,无论是用于报表,还是和镜像配合提供负载,以及利用快照恢复数据库,使用得当的话,快照将会是一把利器。

本文转载自:http://www.cnblogs.com/CareySon/archive/2012/03/30/2424880.html

数据挖掘实战-基于随机森林算法的交通事故预测模型 本实验数据集来源于Kaggle,原始数据集共有209306条,该数据集包含不同地区和时间段的交通事故详细信息。它包括各种指标,例如事故日期、天气状况、照明条件、碰撞类型、受伤人数和车辆参与情况。数据涵盖多个地点和事故类型,可全面了解交通事故及其原因。具体包括:crash_date:事故发生的日期。Traffic_control_device:所涉及的交通控制设备的类型(例如交通灯、标志)。weather_condition:事故发生时的天气状况。 阅读详情

相关推荐

从FinFET到GAA:手把手解读2nm芯片制造的关键技术(含BSPDN避坑指南)

本文深入解读了2nm芯片制造从FinFET向全环绕栅极(GAA)晶体管架构演进的核心技术,并重点剖析了背面供电网络(BSPDN)的三种实现路径及其工程挑战。文章旨在帮助工程师理解技术变革的内在逻辑,并为应对2nm节点设计中的关键问题提供实用指南。

weixin_29294975的博客 292

数据库快照 database snapshot

原文地址:http://blog.renren.com/share/225531933/1165488758 数据库快照是个什么东西呢?可以这样理解,就是在某个时间点对指定数据库拍了一张快照,所以它是静态的,只读的,但本质上还是一个数据库,只要是数据库我们就是可以从里面取数据的,但是数据库快照这个数据库取数据库的原理是这样的:快照生成之后,如果数据库中任何数据页都没有被修改(insert,del

cuiyan1982的专栏 7038

ANSYS 2022R2 安装教程:系统准备、许可证配置与故障排查

ANSYS 是面向工程仿真的多物理场商业软件平台,其安装远非普通应用软件的图形化向导流程,而涉及操作系统版本、运行库精确版本、硬件虚拟化支持、许可证服务架构等系统级配置。理解 ANSYS License Manager 的服务机制与端口依赖、掌握 Visual C++ 和 .NET Framework 的启用逻辑,是保障 Fluent、Mechanical、HFSS 等求解器稳定调用的基础。该技术栈广泛应用于高校教学、航空航天结构分析、电子设备电磁兼容仿真等场景。本指南聚焦 ANSYS 2022R2 版本在

weixin_28559803的博客 598

什么是数据库快照

   数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。    oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。正因为快照是一个主表的查询子集,使用快照可以加快数据的查询速度;在保持不同数...

kk121150的博客 1万+

UFS Write Booster技术解析:原理、配置与故障排查实战

在存储技术领域,缓存机制是提升I/O性能的核心手段之一,其原理是通过高速存储介质暂存数据,减少对低速主存储的直接访问,从而降低延迟、提升吞吐。Write Booster正是这一原理在UFS(通用闪存存储)规范中的具体实现,它通过引入独立的易失性高速缓存区(Write Booster Buffer),将主机写入命令快速响应与后台数据持久化分离,技术价值在于显著改善随机写入性能,消除由垃圾回收等后台操作引发的写入卡顿。该技术广泛应用于智能手机应用安装、相机连拍、固件升级(OTA)等对写入流畅性要求高的场景。本文

weixin_42561143的博客 356

Vue3项目实战:用vue-print-nb搞定多页表格打印(附样式不丢失解决方案)

本文详细介绍了在Vue3项目中,如何利用vue-print-nb插件解决Element Plus多页表格打印的样式丢失与分页错乱等核心难题。通过分离打印视图、编写专用CSS控制分页行为、以及深入理解浏览器打印原理,提供了一套从基础配置到高级技巧的完整企业级打印解决方案,确保打印输出专业可靠。

linux的博客 1233

关于SQL Server 镜像数据库快照的创建及使用

为了提高资源的使用率,想让镜像数据库可以承担部分读,可以借助数据库快照技术。数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。数据库快照在事务上与创建快照时刻的源数据库一致。一个源数据库可以有多个数据库快照,并且可以作为数据库驻留在一个SQL Server实例中。数据库快照是一个只读的状态,这也就决定了快照的使用场景,那就是用于报表。也可以通过快照快速恢复部分误操作数据。

hongjian006的博客 1523

【目标检测】yoloV5算法详解

一、与yoloV4相比,yoloV5的改进 输入端:在模型训练阶段,使用了Mosaic数据增强、自适应锚框计算、自适应图片缩放 基准网络:使用了FOCUS结构和CSP结构 Neck网络:在Backbone和最后的Head输出层之间插入FPN_PAN结构 Head输出层:训练时的损失函数GIOU_Loss,预测筛选框的DIOU_nns 二、yoloV5结构框架 CBL:CBL模块是由Conv+BN+Leaky_relu激活函数组成 Res unit:借鉴ResNet中的残差结构,用来构建深层网络,CBM是

qq_40373651的博客 2万+

数据库快照技术:原理、实现与应用

在现代数据库管理中,数据库快照是一种重要的数据保护技术,它允许我们在特定时间点捕获数据库的状态,并在需要时恢复到该状态。本文将详细探讨数据库快照的工作原理、实现方法以及代码示例,以提供全面的技术指导。

power_9的博客 2084

【PCIe硬件】PCIe引脚PRSNT与热插拔

热插拔的基本目的是要让PCIe设备按照规定的顺序、原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行。事实上,PCIe“热插拔”的关键目的就是为前面面所提到的系统RAS服务的,是提升系统RAS能力的非常重要的手段!注意,这里有两个相关概念,前面我们讲的热插拔,其实是广义的“热插拔”。这里的Hot-Plug,为了方便,我们叫做PCIe热插拔,也就是我们现在及后面将要讨论的内容。

smartvxworks的博客 2806

Python学习第1天:初识Python

Python 作为目前最流行的编程语言之一,凭借其简洁优雅的语法和强大的生态系统,成为了无数开发者的首选。本系列文章将带你从零基础入门,逐步掌握 Python 编程的核心技能。今天我们先来认识 Python,并安装好开发环境。Python(英式发音:/ˈpaɪθən/;美式发音:/ˈpaɪθɑːn/)是由荷兰人吉多·范罗苏姆(Guido von Rossum)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户的编程语言。

tigerhhzz的博客 434

数据库系统 第37节 数据库快照

数据库快照是一种强大的数据保护和恢复技术,通过行级快照和页级快照,以及多版本并发控制(MVCC)、事务日志和存储管理等关键技术,可以实现数据的一致性和可靠性。在源代码层面,这些技术的具体实现可能会因数据库系统的不同而有所差异,但基本原理是相似的。继续深入探讨数据库快照的实现,我们可以进一步讨论一些高级特性和优化策略,这些特性和策略可以提高数据库快照的效率和性能。

hummhumm的专栏 1118

《RT-DETR魔术师》专栏介绍 & 优快云独家改进创新实战 & 专栏目录

通过本专栏的阅读,后续你也可以自己魔改网络,在网络不同位置(Backbone、head、neck、loss等)进行魔改,实现创新!!!

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 7367

sql server快照复制mysql_浅谈SQL Server中的快照

简介数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。什么是快照数据库快照是 SQL Server...

weixin_31491381的博客 225

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

sql server快照复制mysql_浅谈SQL Server中的快照(转)

简介数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要 数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。什么是快照数据库快照是 SQL Serve...

weixin_39841709的博客 137

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 使用IBM heapAnalyzer分析heap dump文件步骤
下一篇: SQLServer 查询用户表记录数SQL
cwfmaker
博客等级 码龄18年 6粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值