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

 更新时间:2014年08月14日 09:40:24   投稿:hebedich  
微软SQL Server 2014提供了众多激动人心的新功能,但其中最让人期待的特性之一就是代号为” Hekaton”的内存数据库了,内存数据库特性并不是SQL Server的替代,而是适应时代的补充,现在SQL Server具备了将数据表完整存入内存的功能。那么今天我们就先来看看内存数据库

简介

   SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了。去年我再西雅图参加SQL PASS Summit 2012的开幕式时,微软就宣布了将在下一个SQL Server版本中附带代号为Hekaton的内存数据库引擎。现在随着2014CTP1的到来,我们终于可以一窥其面貌。

内存数据库

    在传统的数据库表中,由于磁盘的物理结构限制,表和索引的结构为B-Tree,这就使得该类索引在大并发的OLTP环境中显得非常乏力,虽然有很多办法来解决这类问题,比如说乐观并发控制,应用程序缓存,分布式等。但成本依然会略高。而随着这些年硬件的发展,现在服务器拥有几百G内存并不罕见,此外由于NUMA架构的成熟,也消除了多CPU访问内存的瓶颈问题,因此内存数据库得以出现。

    内存的学名叫做Random Access Memory(RAM),因此如其特性一样,是随机访问的,因此对于内存,对应的数据结构也会是Hash-Index,而并发的隔离方式也对应的变成了MVCC,因此内存数据库可以在同样的硬件资源下,Handle更多的并发和请求,并且不会被锁阻塞,而SQL Server 2014集成了这个强大的功能,并不像Oracle的TimesTen需要额外付费,因此结合SSD AS Buffer Pool特性,所产生的效果将会非常值得期待。

SQL Server内存数据库的表现形式

    在SQL Server的Hekaton引擎由两部分组成:内存优化表和本地编译存储过程。虽然Hekaton集成进了关系数据库引擎,但访问他们的方法对于客户端是透明的,这也意味着从客户端应用程序的角度来看,并不会知道Hekaton引擎的存在。如图1所示。

图1.客户端APP不会感知Hekaton引擎的存在

    首先内存优化表完全不会再存在锁的概念(虽然之前的版本有快照隔离这个乐观并发控制的概念,但快照隔离仍然需要在修改数据的时候加锁),此外内存优化表Hash-Index结构使得随机读写的速度大大提高,另外内存优化表可以设置为非持久内存优化表,从而也就没有了日志(适合于ETL中间结果操作,但存在数据丢失的危险)

    下面我们来看创建一个内存优化表:

    首先,内存优化表需要数据库中存在一个特殊的文件组,以供存储内存优化表的CheckPoint文件,与传统的mdf或ldf文件不同的是,该文件组是一个目录而不是一个文件,因为CheckPoint文件只会附加,而不会修改,如图2所示。

图2.内存优化表所需的特殊文件组

我们再来看一下内存优化文件组的样子,如图3所示。

图3.内存优化文件组

    有了文件组之后,接下来我们创建一个内存优化表,如图4所示。

图4.创建内存优化表

   目前SSMS还不支持UI界面创建内存优化表,因此只能通过T-SQL来创建内存优化表,如图5所示。

图5.使用代码创建内存优化表

    当表创建好之后,就可以查询数据了,值得注意的是,查询内存优化表需要snapshot隔离等级或者hint,这个隔离等级与快照隔离是不同的,如图6所示。

图6.查询内存优化表需要加提示

    此外,由创建表的语句可以看出,目前SQL Server 2014内存优化表的Hash Index只支持固定的Bucket大小,不支持动态分配Bucket大小,因此这里需要注意。

与内存数据库不兼容的特性

    目前来说,数据库镜像和复制是无法与内存优化表兼容的,但AlwaysOn,日志传送,备份还原是完整支持。

性能测试

   上面扯了一堆理论,大家可能都看郁闷了。下面我来做一个简单的性能测试,来比对使用内存优化表+本地编译存储过程与传统的B-Tree表进行对比,B-Tree表如图7所示,内存优化表+本地编译存储过程如图8所示。

图7.传统的B-Tree表

图8.内存优化表+本地编译存储过程

   因此不难看出,内存优化表+本地编译存储过程有接近几十倍的性能提升。

相关文章

  • Sql 语句学习指南

    Sql 语句学习指南

    为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。
    2008-12-12
  • sql server性能调优 I/O开销的深入解析

    sql server性能调优 I/O开销的深入解析

    这篇文章主要给大家介绍了关于sql server性能调优 I/O开销的相关资料,文中通过示例代码以及图片介绍的非常详细,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • SQL数据查询之DQL语言介绍

    SQL数据查询之DQL语言介绍

    首先对于数据库有一定的了解,会对于数据库的学习有一定的帮助; 数据库主要分为 DB(数据库),DBMS(数据库管理系统),SQL(结构化查询语言,用于和DBMS通信的语言);这篇要讲的DQL(数据查询语句)是属于SQL语言中的一种语言,因此是必学的语言,希望可以有一定的帮助
    2022-08-08
  • sql 2000 无法执行查询,因为一些文件缺少或未注册"的解决方法

    sql 2000 无法执行查询,因为一些文件缺少或未注册"的解决方法

    在SQL server 2000中打开表查看数据的时候,提示说无法执行查询,因为一些文件缺少或未注册用查询分析器可以查看数据,重装了sql2000也没有用,这里分享下解决方法
    2014-01-01
  • sql中的常用的字符串处理函数大全

    sql中的常用的字符串处理函数大全

    这篇文章主要介绍了sql中的常用的字符串处理函数,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • SQL Server 2012 安装与启动图文教程

    SQL Server 2012 安装与启动图文教程

    本文通过图文并茂的形式给大家介绍了sqlserver2012的安装步骤,本文分步骤给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2016-11-11
  • sql 触发器使用例子

    sql 触发器使用例子

    触发器里没有updated ,只有inserted 和deleted两个临时表。
    2009-07-07
  • SQL Server2012数据库备份和还原的教程

    SQL Server2012数据库备份和还原的教程

    这篇文章主要为大家详细介绍了SQL Server2012数据库备份和还原的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • SQL Server的死锁说明

    SQL Server的死锁说明

    死锁是导致数据库中的竞争性并发锁,通常在多步骤事务中。当两个或多个任务永久相互阻止时,每个任务都锁定了其他任务尝试锁定的资源,就会发生死锁。本文主要介绍了SQL Server的死锁,感兴趣的朋友可以参考阅读
    2023-04-04
  • SQL SERVER数据库的作业的脚本及存储过程

    SQL SERVER数据库的作业的脚本及存储过程

    本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用
    2015-10-10

最新评论