SQL2014学习笔记4--内存优化表的备份、还原、恢复

guguda2008 2014-05-08 06:21:23
加精
不了解内存表的同学请参阅我之前写的学习笔记:
SQL2014学习笔记1--初识内存优化表
SQL SERVER2014学习笔记2--内存优化表索引简介
SQL2014学习笔记3--内存优化表的事务
------------------------------------------------------------------------------------------------------------------------------------------------
本篇文章先说内存优化表的恢复。
内存优化表的恢复是很多还不了解它的人最怀疑的点:一个存在于内存中的表,怎么保证在断电等异常情况下不丢失数据?

要回答这个问题让我们先来回顾一下传统表是如何处理的:传统的磁盘表,更新操作于内存中和磁盘的日志文件里更新,日志文件写入完毕后,通过checkpoint加载到磁盘中。这样的机制使日志文件里保留了全部的已提交变更。因此当遇到断电或磁盘损坏的情况,只要有完整的日志文件,数据库重启时就可以依据日志文件将没及时提交磁盘的数据文件重新提交,最终保证已提交事务的完整性。
内存优化表由于同样采用了写日志的机制,因此恢复时同样可以像上面的步骤一样恢复它的未提交数据,而与磁盘表主要恢复磁盘文件不同的是,内存表是先根据磁盘里存储的文件对(数据文件和差异文件)在内存中重建并填充好数据,再由日志文件完成已提交事务对内存表的变更。至于磁盘上的文件对则依然由对应的后台线程更新。
上面说的这种机制,也就是在数据库重启时内存表的恢复机制:先在内存中建立表结构并根据表定义分配内存空间,再从磁盘的数据文件读取数据填充内存,最后通过日志文件提交增量数据。
这里有个小知识点:MS在填充内存表数据时,先创建和CPU核数一样多的数据加载器,每个数据加载器分别处理文件对,先加载差异文件,也就是存储delete的文件,然后以这批数据作为筛选器的数据源,选择性的加载数据文件中的数据到内存表中。
------------------------------------------------------------------------------------------------------------------------------------------------
内存表的恢复大概就是这样,下面再说一下内存表的备份和恢复:
内存表的备份分完整备份和差异备份和文件组备份(日志备份和磁盘表完全无差别),日常主要用到的是完整备份和差异备份。
内存表的完整备份就是写日志文件和数据文件到备份文件里,数据文件由于存在差异数据,因此会比实际存储的有效数据占用的磁盘空间更大一些,但也不会大多少,一般也就是10%到20%,考虑到内存表本身的大小也不会太大以及现在磁盘的白菜价,多的这部分基本可以无视。
差异部分就复杂一点了,对于文件对中的数据文件,只备份有增量数据的数据文件,而对于差异文件则是全部备份到差异备份中。

当还原时,同样是恢复的那一套流程,先从备份文件中读取文件对的内容,再加载到内存中,然后就是日志文件的事务处理,这部分和以前是一样的。
------------------------------------------------------------------------------------------------------------------------------------------------
总的来说,在未采用延迟性事务时,内存表的完整性基本可以认为是和磁盘表一样的。而在采取延迟性事务之后,会有一部分的丢失可能,参考我之前写的内存表事务处理机制。
...全文
3533 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Steven-Xu 2014-06-23
好贴,必须得顶。
回复
看不懂
回复
HUSTYZHY 2014-05-11
楼主真是有才
回复
qiugangyi 2014-05-10
写的不错,赞一个。
回复
猿猿猿媛 2014-05-10
谢谢分享,先收藏。。
回复
my03131302 2014-05-10
回复
longyongqing000 2014-05-10
楼主高才!写的不错!
回复
叶子 2014-05-10
我来点个赞
回复
ohfiner 2014-05-09
感谢分享~~
回复
Neo_whl 2014-05-09
不明觉厉
回复
laoer_2002 2014-05-09
感谢楼主分享
回复
陈词丨滥调 2014-05-09
回复
Mr_Nice 2014-05-09
Good Share ... TKs
回复
Nob-Mister 2014-05-09
楼主不错。。。。很认真的。。。 菜鸟路过。。。。
回复
KeepSayingNo 2014-05-09
感谢楼主的分享,这种精神值得大家学习
回复
回复
nettman 2014-05-08
感谢楼主分享,继续收藏
回复
king128 2014-05-08
写的不错,顶
回复
發糞塗牆 2014-05-08
慢慢来,不要急,最重要是够快
回复
guguda2008 2014-05-08
本来预计会写挺长的,结果发现很多基础性的东西都在前面的文章中写了,比如数据对,比如事务,这篇就可以节约很多解释,最终就是这么短了。。。
回复
发帖
新技术前沿
创建于2007-09-28

6124

社区成员

MS-SQL Server 新技术前沿
申请成为版主
帖子事件
创建了帖子
2014-05-08 06:21
社区公告
暂无公告