使用SQL Server 2014内存数据库时需要注意的问题

本文从产品设计和架构角度分享了Microsoft内存数据库方面的使用经验,希望你在阅读本文之后能够了解这些新的对象、概念,从而更好地设计你的架构。

内存数据库,指的是将数据库的数据放在内存中直接操作。相对于存放在磁盘上,内存的数据读写速度要高出很多,故可以提高应用的性能。微软的SQL Server 2014已于2014年4月1日正式发布,SQL 2014一个主要的功能即为内存数据库。

下面,我将着重介绍使用SQL Server 2014内存数据库时需要注意的地方。

关于内存数据库

SQL Server 2014内存数据库针对传统的表和存储过程引入了新的结构: memory optimized table(内存优化表)和native stored procedure(本地编译存储过程)。

默认情况下Memory optimized table是完全持久的(即为durable memory optimized table),如传统的基于磁盘的表上的事务一样,并且完全持久的事务也是支持原子、一致、隔离和持久 (ACID) 的。所不同的是内存优化表的整个表的主存储是在内存中,即为从内存读取表中的行,和更新这些行数据到内存中。 并非像是传统基于磁盘的表按照数据库数据库页面装载数据库。内存优化表的数据同时还在磁盘上维护着另一个副本,但仅用于持续性目的。 在数据库恢复期间,内存优化的表中的数据再次从磁盘装载。 创建持久的内存优化表方法如下:

CREATE TABLE DurableTbl
(AccountNo     INT	    NOT NULL  PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713)
,CustName      VARCHAR(20)  NOT NULL
,Gender        CHAR         NOT NULL   /* M or F */
,CustGroup     VARCHAR(4)   NOT NULL   /* which customer group he/she belongs to */
,Addr          VARCHAR(50)  NULL       /* No address supplied is acceptable */
,Phone         VARCHAR(10)  NULL       /* Phone number */
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_AND_DATA)

除了默认持久的内存优化表之外,还支持non-durable memory optimized table(非持久化内存优化表),不记录这些表的日志且不在磁盘上保存它们的数据。 这意味着这些表上的事务不需要任何磁盘 IO,但如果服务器崩溃或进行故障转移,则无法恢复数据。创建非持久化内存优化表方法如下:

CREATE TABLE NonDurableTbl
(AccountNo     INT	    NOT NULL  PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713)
,CustName      VARCHAR(20)  NOT NULL
,Gender        CHAR         NOT NULL   /* M or F */
,CustGroup     VARCHAR(4)   NOT NULL   /* which customer group he/she belongs to */
,Addr          VARCHAR(50)  NULL       /* No address supplied is acceptable */
,Phone         VARCHAR(10)  NULL       /* Phone number */
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY)

Native compiled stored procedure(本地编译存储过程)是针对传统的存储过程而言的,是本机编译存储过程后生成DLL,由于本机编译是指将编程构造转换为本机代码的过程,这些代码由处理器指令组成,无需进一步编译或解释。与传统TSQL 相比,本机编译可提高访问数据的速度和执行查询的效率。故通过本机编译的存储过程,可在存储过程中提高查询和业务逻辑处理的效率。创建方法本地编译存储过程方法如下:

CREATE PROCEDURE dbo.usp_InsertNonDurableTbl
@AccountNo int,
@CustName nvarchar(20),
@Gender	char(1),
@CustGroup	varchar(4),
@Addr	varchar(50),
@Phone	varchar(10)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
BEGIN
	INSERT INTO [dbo].[DurableTbl]
           ([AccountNo]
           ,[CustName]
           ,[Gender]
           ,[CustGroup]
           ,[Addr]
           ,[Phone])
     VALUES (@AccountNo
           ,@CustName
           ,@Gender
           ,@CustGroup
           ,@Addr
           ,@Phone)
END
END
GO

内存数据库既可以包含内存优化表和本地编译存储过程,又可以包含基于磁盘的表和传统存储过程,各个对象之间数据存储、和访问的架构如下所示:

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库
, 内存
, 编译
, sql server 2014
, 存储过程
, 磁盘
, sql2014
, 内存表
, non native
本机
sqlserver 内存数据库、sql server内存数据库、支持sql的内存数据库、sqllite 内存数据库、sql内存数据库,以便于您获取更多的相关知识。

时间: 2024-09-04 03:10:57

使用SQL Server 2014内存数据库时需要注意的问题的相关文章

sql server 2014 安装时出现ScenarioEngine停止错误

问题描述 sql server 2014 安装时出现ScenarioEngine停止错误 如上图这个怎么解决啊现在sql根本装不上.......还有我是win10专业版系统 解决方案 ArcSDE9.2 for SQL Server安装出现不能打开giomgr错误安装 SQL Server 2012/2014 vc_red.msi出现错误怎样解决?假如您在安装SQL Server 2005时出现计数器错误

谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

原文:谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 篡写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源调控器: 第二部分:SQL Server中资源调控器: 第三部分:SQL Server资源调控器运用场景-CPU: 第四部分:SQL Server资源调控器运用场景-IO: 第五部分:总结: 第六部分:作者简介:

安装sql server 2014 express安装问题,求助

问题描述 安装sql server 2014 express安装问题,求助 安装sql server 2014 express 时没有弹出错误,但是完成以后没有sql server management studio 是怎么回事呀图片说明](http://img.ask.csdn.net/upload/201605/06/1462534775_367645.jpg)csdn.net/upload/201605/06/1462534803_991472.png) 解决方案 SQL Server 2

揭秘SQL Server 2014有哪些新特性(1)-内存数据库_MsSql

简介    SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQL PASS Summit 2012的开幕式时,微软就宣布了将在下一个SQL Server版本中附带代号为Hekaton的内存数据库引擎.现在随着2014CTP1的到来,我们终于可以一窥其面貌. 内存数据库     在传统的数据库表中,由于磁盘的物理结构限制,表和索引的结构为B-Tree,这就使得该类索引在大并发的OLTP环境中显得非常乏力,虽然有很多办法

揭秘SQL Server 2014有哪些新特性(1)-内存数据库

简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQL PASS Summit 2012的开幕式时,微软就宣布了将在下一个SQL Server版本中附带代号为Hekaton的内存数据库引擎.现在随着2014CTP1的到来,我们终于可以一窥其面貌. 内存数据库 在传统的数据库表中,由于磁盘的物理结构限制,表和索引的结构为B-Tree,这就使得该类索引在大并发的OLTP环境中显得非常乏力,虽然有很多办法来解决这类问题

微软-在与 SQL Server 2014 建立连接时出现与网络相关的或特定于实例的错误

问题描述 在与 SQL Server 2014 建立连接时出现与网络相关的或特定于实例的错误 解决方案 1.打开Sql server 管理配置器 ? ?? ? ? ? ?或者在命令行输入:SQLServerManager10.msc ? ? 2.点击MSSQLSERVER的协议,在右侧的页面中选择TCP/IP协议 ? ?? ? ? 3.右键点击TCP/IP协议,选择"属性",需要修改连接数据库的端口地址 ? ?? ? ? 4.跳出来的对话框,里面有好多TCP......答案就在这里:与

sql server 2014附加数据库时出错,有关详细信息,请单击“消息”列中的超链接

问题描述 sql server 2014附加数据库时出错,有关详细信息,请单击"消息"列中的超链接 百度上改属性权限之类的都试了,还是不行! 请大神些帮帮忙呀.. 解决方案 他说要你点击超链接,你将附加的左右滚动条滑到最右边,点击就会有错误原因,一般附加报错一个是没有权限,还有可能是版本不兼容,微软都是向下兼容的,比如用2012版本的文件附加到2014就会报错 解决方案二: 标题: Microsoft SQL Server Management Studio -------------

SQL Server 2014 数据内存优化表详解

不同于disk-based table,内存优化表驻留在内存中,使用 Hekaton 内存数据库引擎实现.在查询时,从内存中读取数据行:在更新时,将数据的更新直接写入到内存中.内存优化表能够在disk上维护一个副本,用于持久化数据集. Memory-optimized tables reside in memory. Rows in the table are read from and written to memory. The entire table resides in memory.

SQL Server 2014的可更新列存储聚集索引新特性探秘

简介 列存储索引其实在在SQL Server 2012中就已经存在,但SQL Server 2012中只允许建立非聚集列索引,这意味着列索引是在原有的行存储索引之上的引用了底层的数据,因此会消耗更多的存储空间,但2012中的限制最大的还是一旦将非聚集列存储索引建立在某个表上时,该表将变为只读,这使得即使在数据仓库中使用列索引,每次更新数据都变成非常痛苦的事.SQL Server 2014中的可更新聚集列索引则解决了该问题. 可更新聚集列存储索引? 聚集列存储索引的概念可以类比于传统的行存储,聚集