SQL Server2014新特性之内存优化表
方勇
【摘要】
2013年6月25 日微软发布了SQLServer 2014 CTP1。本文将为您介绍SQLServer 2014的重点新特性——内存优化表。
【正文】
如果说SQL Server 2012 的数据库引擎最大的亮点是Always On的话那么SQL Server 2014最大的亮点就是内存优化表Memory-optimized tables 了。
1. 内存表的背景
在SQLServer 2000的年代我们还可以通过这种方式将表驻留在内存中
DB CC PINTABLE(database_id, table_id)
DBCC PINTABLE会导致将表读入到内存中。 当表中的页由普通的Transact-SQL语句读入到高速缓存中时这些页将标记为内存驻留页。当 SQL Server需要空间以读入新页时不会清空内存驻留页。
但是这种方式在SQL Server 2005 已经不被支持了 内存表这种概念消失了直到SQL Server 2014。
2.文件和存储
内存优化表必须存储到文件流文件组中 SQL Server 提供了一种MEMORY_OPTIMIZ ED_DATA文件组类型专门用于指定内存优化表的逻辑存储位置。
内存优化表的文件流文件组可以包含一个或多个容器每个容器有可以包含一个或多个文件。文件包含了三种类型的文件
根文件Root File 包含了数据文件和增量文件的元数据
数据文件Data File 存储内存优化表的记录和新插入的记录
增量文件Delta File 按照事务日志顺序存储从内存优化表中删除的记录的
最小信息行号 每个数据文件对应一个增量文件
内存优化表会使用到事务日志同样任何增删改等操作都会写入日志这可能是导致即使使用内存优化表性能也无法显著提升的最大原因可以考虑使用闪存或者SSD来解决该问题
3.原理和机制
SQL Server 2014新增的内存优化表让我们眼前一亮可以改善基于磁盘的表的低性能。通过以下的原理和机制让我们获得更好的性能和可扩缩性
通过数据页和索引页驻留在内存减少IO瓶颈
采用乐观并发控制 消除了逻辑锁提高了并发性
本机编译存储过程执行效率更高
我们一定会担心使用内存优化表会不会导致因为驻留在内存中系统宕机或者断电的时候导致数据无法及时写回内存而丢失。内存优化表保留了关系型数据库的事务所有ACID 特征原子性、一致性、 隔离性和持久性。 SQL Server和内存优化表的持久化上下文提供了以下保证
事务持久化提交DDL或DML更改内存优化表的事务更改是永久性的(不
丢失)
重启持久化在系统崩溃恢复或计划重新启动后内存优化表重新实例化以恢
复到关闭或崩溃时的状态
介质失败持久化 当磁盘损坏时我们可以通过数据库的备份和还原来恢复内
存优化表到新存储
当然 内存优化表有两种持久化选项其中有一种是不保证持久化的
S CHEMA_ONLY非持久化表 只持久化表结构和索引重启后所有数据丢
失
SCHEMA_AND_DATA持久化表 持久化结构和数据类似于基于磁盘的表接下来我们来分析一下增删改操作的流程
增、删、 改操作执行先写入事务
插入操作先插入到内存中在CheckPoint的时才写回数据文件
删除操作先在内存中删除并记录行号到D elta文件随后D elta文件中记录的删除会合并到数据文件
更新操作更新操作在SQL Serer 中以先删除、然后插入执行
可以看到 SQL Server的内存表主要改善的是查询性能和IO瓶颈。
4.硬件和软件要求
在SQL Server 2014 x64版中 因为x64版可以直接使用更多的内存空间 服务器必须有足够的内存 内存优化表不能使用超过最大服务器内存的80%
5. 内存优化表使用和语法
内存优化表也不是可以随便使用的也有着其限制条件或越发约束。
1) 创建数据库需要有一个内存优化表文件组
CREATE DATABASE CanwayDemo
ON
PRIMARY(NAME=[hekaton_demo_data],
='C:\DATA\hekaton_demo_data.mdf', size=500MB)
, [hekaton_demo_fg]CONTAINS MEMORY_OPTIMIZED_DATA(
N AM E=[h e k a to n_d e m o_dir],
='C:\DATA\hekaton_demo_dir')
LOG ON (name = [hekaton_demo_log], 'C:\DATA\hekaton_demo_log.ldf',size=500MB)
COLLATE Latin1_General_100_BIN2;
GO
2) 创建表时必须创建一个非空的主键 并且必须建立非聚集的 Hash 索引和BUCKET_COUNT参数
Use CanwayDemo
Go
CREATE TABLE Destination
(col1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=100000),col2 INT NOT NULL,col3 INT NOT NULL
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY =S CHEMA_AND_DATA)
GO
3) 创建一个本机编译存储过程访问内存优化表
Use CanwayDemo
Go
CREATE PROCEDURE SelectTable_Destination
WITH NATIVE_COMPILATION,SCHEMABINDING,EXECUTE AS OWNER AS
BEGIN ATOMIC WITH(TRANSACTION ISOLATION LEVEL=SNAPSHOT,LANGUAGE=N'us_english')
SELECT col1,col2, col3 FROM dbo.Destination;
END
GO
昨天,有在"阿里云秋季促销活动 轻量云服务器2G5M配置新购年60元"文章中记录到阿里云轻量服务器2GB内存、5M带宽一年60元的活动,当然这个也是国内机房的。我们很多人都清楚备案是需要接入的,如果我们在其他服务商的域名备案的,那是不能解析的。除非我们不是用来建站,而是用来云端的,是可以用的。这不看到其对手腾讯云也有推出两款轻量服务器活动。其中一款是4GB内存、8M带宽,这个比阿里云还要狠。这个真...
菠萝云国人商家,今天分享一下菠萝云的广州移动机房的套餐,广州移动机房分为NAT套餐和VDS套餐,NAT就是只给端口,共享IP,VDS有自己的独立IP,可做站,商家给的带宽起步为200M,最高给到800M,目前有一个8折的优惠,另外VDS有一个下单立减100元的活动,有需要的朋友可以看看。菠萝云优惠套餐:广州移动NAT套餐,开放100个TCP+UDP固定端口,共享IP,8折优惠码:gzydnat-8...
Virtono最近推出了夏季促销活动,为月付、季付、半年付等提供9折优惠码,年付已直接5折,而且下单后在LET回复订单号还能获得双倍内存,不限制付款周期。这是一家成立于2014年的国外VPS主机商,提供VPS和服务器租用等产品,商家支持PayPal、信用卡、支付宝等国内外付款方式,可选数据中心包括罗马尼亚、美国洛杉矶、达拉斯、迈阿密、英国和德国等。下面列出几款VPS主机配置信息,请留意,下列配置中...