SQL Server 2014 新特性——内存数据库

9/1/2015来源:SQL技巧人气:2438

SQL Server 2014 新特性——内存数据库

SQL Server 2014 新特性——内存数据库

目录

SQL Server 2014 新特性——内存数据库... 1

简介:... 1

设计目的和原因:... 1

专业名词... 1

In-Memory OLTP不同之处... 2

内存优化表... 2

内存优化表的索引... 2

并发能力的提升... 3

和竞争对手相比几点... 3

Getting Start. 3

内存数据库的使用... 3

存储... 5

TSQL支持... 7

简介:

内存数据库(In-Memory OLTP),代号Hekaton

设计目的和原因:

1.将请求的负荷放到内存中

2.减少数据延迟

3.来适应特殊的负荷类型

如果数据都是在内存中,那么当前的数据库优化器产生的执行计划是没什么意义的,因为现在的优化器默认数据在磁盘中而不是在内存中,所以不从磁盘中读取数据,优化器应该使用新的执行计划和新的开销算法。

In-Memory OLTP 减少了锁等待问题,使用基于行版本来优化同步的控制,改善了写入等待的延迟,写入日志变少,写入次数变少。

专业名词

Memory-optimized tables索引优化表:引入了新的结构,被加入到in-memory oltp的新表

Disk-Based tables(磁盘表):基础磁盘存放的表,就是我们一直使用的表。

Natively complied原生编译存储过程:用于索引优化表的访问,也可以使用tsql访问,通过原生编译存储过程访问速度会更快一点

嵌套事务:可以在优化表中使用,也可以在磁盘表中使用

interop:可以让tsql访问索引优化表

In-Memory OLTP不同之处

通过图可以发现,原生编译存储过程只能使用在内存优化表上,而query interop用户tsql访问内存优化表的桥梁

内存优化表

1.内存优化表和硬盘表不同,不需要把数据从硬盘上读取放入cache中,

2.checkpoint只是用户恢复的目的

3.和硬盘表一样,使用事务日志,当服务重启后,使用checkpoint的文件和日志,对内存优化表进行重建

4.内存优化表可以通过选项来设置表的持久性:SCHEMA_ONLY只保存表的结构,不保存数据,当服务重启后数据就会丢失

内存优化表的索引

1.内存优化表中的索引不再以btree方式存储,而是以hash 表的方式

2.内存优化表必须有一个索引,并没有堆表的概念

3.索引,不会被保存在文件或者事务日志,并会根据内存优化表的修改自动维护,在所有重启时,根据表的文件和日志重建索引

并发能力的提升

1.以行版本的方式存储表数据,修改数据时会请求锁,但是在内存优化表中不会

2.虽然没有写入锁,但是还是有等待比如log write,比硬盘表高效,写入的日志少,速度快

和竞争对手相比几点

1.内存表和硬盘表通过interop集成,有利于过渡

2.原生编译存储过程,效率高

3.hash索引,提高内存访问效率

4.没有page,不会出现page latch的等待

5.通过行版本实现,不需要lock和latch

Getting Start内存数据库的使用创建数据库

CREATE DATABASE HKDB

ON

PRIMARY(NAME = [HKDB_data],

FILENAME = 'Q:\data\HKDB_data.mdf', size=500MB),

FILEGROUP [SampleDB_mod_fg] CONTAINS MEMORY_OPTIMIZED_DATA

(NAME = [HKDB_mod_dir],

FILENAME = 'R:\data\HKDB_mod_dir'),

(NAME = [HKDB_mod_dir],

FILENAME = 'S:\data\HKDB_mod_dir')

LOG ON (name = [SampleDB_log], Filename='L:\log\HKDB_log.ldf', size=500MB)

COLLATE Latin1_General_100_BIN2;

在创建库时需要制定 MEMORY_OPTIMIZED_DATA文件组,用来保存checkpoint和delta文件,

创建的数据库只能使用BIN2排序规则,原生编译存储过程只能支持在这些规则上比较,排序,分组

添加MEMORY_OPTIMIZED_DATA到已有数据库

ALTER DATABASE AdventureWorks2012 ADD FILEGROUP hk_mod CONTAINS MEMORY_OPTIMIZED_DATA;

GO

ALTER DATABASE AdventureWorks2012 ADD FILE (NAME='hk_mod', FILENAME='c:\data\hk_mod')

TO FILEGROUP hk_mod;

GO

创建表

CREATE TABLE T1 (

[Name] varchar(32) not null PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1024),

[City] varchar(32) null,

[LastModified] datetime not null,

) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);

1.创建内存优化表是需要注明,MEMORY_OPTIMIZED=ON,并设置持久性

2.bit,tinyint,smallint,int,bigint,money,smallmoney,float,real,datetime,smalldatetime,datetime2,date,t