SQL2014学习笔记3--内存优化表的事务
来源:互联网 发布:2017年人口老龄化数据 编辑:程序博客网 时间:2024/05/29 19:32
本想写内存表的备份和还原,结果写到一半发现涉及到事务的部分太多,所以单开一篇写事务,篇幅会比较短,但这是理解内存表备份还原机制的基础。
内存表分两种,一种是只存在于内存中,和磁盘、日志都没半毛钱关系的内存表,这种表在备份还原时只会处理表结构而不处理数据。类似于tempdb中的表,不同之处就是重启数据库时前者保留表结构而后者渣都不剩。
另一种内存表则在磁盘中有对应的数据文件做数据持久化,MS称之为“数据和差异文件”。这部分文件是通过一个叫“脱机检查点”的后台线程通过定时读取事务日志写入数据的,so,它获得的不是第一手的变更,而是日志文件里记录的变更。
再来说事务日志与内存表的关系,说到这个关系又涉及到一个2014新出的概念:延迟性事务。延迟性事务机制允许事务提交时通过设置指定的选项,选择是否异步写入日志。什么意思呢?传统的磁盘表是数据页和日志一起写,当日志写成功后提交事务成功,这种机制下事务的执行时间取决于数据文件更新(磁盘表是页,内存表是内存地址)和事务日志更新两部分,当事务日志的更新慢于数据文件时就会拖累事务的提交速度。延迟性事务就是把这两部分分开,数据文件写入完成后事务即成功,而日志文件的写入则同时进行但不影响事务的提交。这种提交方式好处是减少可能的提交延迟时间,坏处是牺牲了一部分事务的完整性。
当延迟性事务配合内存表使用时,会使事务日志对内存表性能的影响降到最低:内存的表的事务执行完全不受日志影响,日志异步写入后,检查点线程定时更新到磁盘的数据文件中。内存表的性能提高的1B,相应的事务完整性则略有牺牲。当数据库崩溃时,没写入日志的内存表变更将丢失。
延迟性事务有两个地方指定:数据库选项中的DELAYED_DURABILITY选项和事务提交时的WITH DELAYED_DURABILITY
数据库级别的选项可以指定延迟性事务关闭/可选/强制,只有可选时才会受COMMIT选项的影响。
最后强调一下,当内存表不选择使用延迟性事务时,可以认为它和磁盘表的事务完整性一致。
因此,对于我即将写到的内存表备份和还原,涉及到的待久化内容就是:内存表定义、日志文件和数据文件。
内存表分两种,一种是只存在于内存中,和磁盘、日志都没半毛钱关系的内存表,这种表在备份还原时只会处理表结构而不处理数据。类似于tempdb中的表,不同之处就是重启数据库时前者保留表结构而后者渣都不剩。
另一种内存表则在磁盘中有对应的数据文件做数据持久化,MS称之为“数据和差异文件”。这部分文件是通过一个叫“脱机检查点”的后台线程通过定时读取事务日志写入数据的,so,它获得的不是第一手的变更,而是日志文件里记录的变更。
再来说事务日志与内存表的关系,说到这个关系又涉及到一个2014新出的概念:延迟性事务。延迟性事务机制允许事务提交时通过设置指定的选项,选择是否异步写入日志。什么意思呢?传统的磁盘表是数据页和日志一起写,当日志写成功后提交事务成功,这种机制下事务的执行时间取决于数据文件更新(磁盘表是页,内存表是内存地址)和事务日志更新两部分,当事务日志的更新慢于数据文件时就会拖累事务的提交速度。延迟性事务就是把这两部分分开,数据文件写入完成后事务即成功,而日志文件的写入则同时进行但不影响事务的提交。这种提交方式好处是减少可能的提交延迟时间,坏处是牺牲了一部分事务的完整性。
当延迟性事务配合内存表使用时,会使事务日志对内存表性能的影响降到最低:内存的表的事务执行完全不受日志影响,日志异步写入后,检查点线程定时更新到磁盘的数据文件中。内存表的性能提高的1B,相应的事务完整性则略有牺牲。当数据库崩溃时,没写入日志的内存表变更将丢失。
延迟性事务有两个地方指定:数据库选项中的DELAYED_DURABILITY选项和事务提交时的WITH DELAYED_DURABILITY
数据库级别的选项可以指定延迟性事务关闭/可选/强制,只有可选时才会受COMMIT选项的影响。
最后强调一下,当内存表不选择使用延迟性事务时,可以认为它和磁盘表的事务完整性一致。
因此,对于我即将写到的内存表备份和还原,涉及到的待久化内容就是:内存表定义、日志文件和数据文件。
0 0
- SQL2014学习笔记3--内存优化表的事务
- SQL2014学习笔记3--内存优化表的事务
- 锋利的SQL2014: 内存优化表
- SQL2014内存表性能之内存中 OLTP 的性能改进测试
- JS 内存优化学习笔记
- 学习笔记(十)-内存优化
- C++应用程序性能优化学习笔记:操作系统的内存管理
- 事务的原理 学习笔记
- SQL SERVER2014学习笔记2--内存优化表索引简介
- 锋利的SQL2014:联接算法
- 锋利的SQL2014:处理死锁
- Redis学习笔记十四、内存优化
- 三层学习之SQL2014数据库连接问题
- 数据库的事务的特性 ---- 学习笔记
- Spring 事务学习笔记(1):事务的基本知识
- Oracle学习笔记20150830事务的概念
- 事务(学习笔记)
- Oracle 学习笔记-事务
- win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
- .NET LINQ概述
- 第十三天 乐在其中-Android与远端之JSON
- 在adb命令与ddms中能检测设备,但在eclipse中Run Configurations中检测不到真机
- Linux系统调用及用户编程接口(API)学习
- SQL2014学习笔记3--内存优化表的事务
- Mac终端命令 统计iOS工程中代码行数
- 民营物流公司迫切需要政策支持
- 【数据结构&&算法系列】堆排序简单介绍及其实现
- PE文件添加Overlay
- ZYNQ结构简介
- ORA-01480:STR 赋值变量缺少空后缀
- error C4189
- Android中asset文件夹和raw文件夹区别