sqlserver2014内存数据库特性介绍

2019-10-07 18:30:18于海丽

在这篇文章中,我想着重引用如下两个信息:

(1)内存数据库其实就是将指定的表放到内存中,而不是整个数据库;

(2)内存数据库用文件流的方式组织磁盘中的数据文件;

我再补充一个信息

(3)内存数据库的数据文件分data file和delta file,而且是成对出现;

1、内存数据库其实就是将指定的表放到内存中,而不是整个数据库;

内存数据库的创建过程其实就是将表存放到内存中,而不是整个数据库。下图展示 了创建内存优化表的语法,红色框标注了内存与传统表创建时语法不相同的地方。

内存优化表不仅仅是把数据存放到内存中,要不然跟传统数据的缓存没有区别。在内存数据库中,内存优化表也叫为" natively compile memory-optimized tables",翻译过来就是本地编译内存优化表,内存优化表在创建的同时被编译成本地机器代码装载到内存中,本地机器代码包含了能被CPU直接执行的机器指令,所以对内存优化表的访问和操作将非常快。

内存优化表分两类,持久性表和非持久性表,对持久性表的改动会记录日志,即使数据库重启,数据也不会丢失;对非持久性表的操作不会记录日志,这些操作结果只保留在内存中,数据库重启后数据会丢失。

上文只是介绍了新建一张表的情况,在正常的业务环境中我们不可能对一个业务系统数据库的每张表都去create,那对于已经存在的表,有没有配置方法呢?答案恐怕不太令人满意,目前SQL暂不支持迁移现有表到内存中,因此要想使用内存数据库,现有的业务数据表必须重新创建。

2、内存数据库用文件流的方式组织磁盘中的数据文件

在内存数据库中,磁盘上存储的数据文件不在是区、页的存储方式,而是基于文件流存储。文件流存储的一个特点之一就是支持快速的读操作,这在数据库重启时将文件流中的数据load到内存中时很能提高效率。

3、内存数据库的数据文件分data file和delta file,而且是成对出现;

内存数据库中插入、更新的数据和删除的数据物理分开存储的,分别用data file和delta file保存。

(1)Data file

Data file用来保存"插入"或者"更新"的数据行,data file中数据行的存储顺序严格按照事务执行的顺序组织,比如data file中第一行的数据来自于事务1,第二行数据来自于事务2,这两行可以是同一个表的数据,也可以是不同表的数据,取决于这两个连续的事务操作的内存优化表是否相同。 这种方式的好处是保证了磁盘IO的连续性,避免随机IO。

相关文章 大家在看