你的位置:首页 > 软件开发 > 数据库 > 配置内存中OLTP文件组提高性能

配置内存中OLTP文件组提高性能

发布时间:2015-07-24 09:00:04
在今天的文章里,我想谈下使用内存中OLTP的内存优化文件组来获得持久性,还有如何配置它来获得高性能。在进入正题前,我想简单介绍下使用你数据库里这个特定文件组,内存OLTP是如何获得持久性的。内存中OLTP的持久性早些天对内存中OLTP(代号Hekaton)的一个大误解是,人们认为 ...

在今天的文章里,我想谈下使用内存中OLTP的内存优化文件组来获得持久性,还有如何配置它来获得高性能。在进入正题前,我想简单介绍下使用你数据库里这个特定文件组,内存OLTP是如何获得持久性的。

内存中OLTP的持久性

早些天对内存中OLTP(代号Hekaton)的一个大误解是,人们认为内存中OLTP是不具有ACID属性的——只有ACI属性,没有D属性(Durability)。但这不是真的,因为在内存中OLTP里,每个在内存中的操作都是完全日志的。如果你的数据库崩溃,内存中OLTP可以将你的数据库和内存优化表在崩溃发生前恢复常态。内存中OLTP记录每个操作到传统SQL Server的事务日志。因为在非持久性内存里发生的一切都是基于MVCC原则,内存中OLTP只记录重做(redo)日志记录,任何时间都没有撤销(undo)日志,因为用内存中OLTP在故障恢复期间从不会有撤销操作发生。对进行中的事务进行回滚操作,只有前版本才是可以的。

当事务的提交时,重做(redo)日志才会写入。另外所谓的离线检查点工作者(Offline Checkpoint Worker)将成功提交的事务从事务填入一对所谓的数据和德尔塔文件(Data and Delta Files),来自内存中OLTP的数据和德尔塔文件会加速故障恢复。故障恢复重建你的内存优化表初始于数据和德尔塔文件对,然后自上个检查发生的所有改变从事务日志里应用。我们来看下这个概念。

配置内存中OLTP文件组提高性能

 

因为在内存OLTP里一切都是和高性能有关,数据和德尔塔文件SQL Server只用顺序读写(sequential I/O)。不会涉及到随机读写(random I/O),因为这会杀死性能。现在的问题是,什么信息会写入数据和德尔塔文件对?内存中OLTP数据文件包含插入到内存优化表的记录。因为插入只发生在文件末尾,顺序读写很容易实现。当你在内存优化表删除指定记录时,记录只在对应的德尔塔文件逻辑上标记为删除。这个信息也是加在德尔塔文件末尾,这样又是真正的在存储里顺序读写。UPDATE语句只是新记录和老记录副本INSERT语句和DELETE语句的组合。很简单,是不是?下图展示了这个重要概念。

配置内存中OLTP文件组提高性能 

如果你想进一步了解内存中OLTP如何实现持久性的,我强烈推荐Tony Rogerson写的文章How Hekaton (XTP) achieves Durability for “Memory Optimised” Tables。

配置内存中OLTP文件组

内存优化表的故障恢复以你数据和德尔塔文件对存储的速度进行。因此当你创建数据库,当考虑并决定配置存储文件对的内存中OLTL文件组,仔细对待就非常重要。首先你要包含内存优化数据的存储增加文件组,如下代码所示: 

-- Add a new memory optimized file groupALTER DATABASE InMemoryOLTPADD FILEGROUP InMemoryOLTPFileGroup CONTAINS MEMORY_OPTIMIZED_DATAGO

原标题:配置内存中OLTP文件组提高性能

关键词:内存

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。