简介

SQL Server 2014提供了许多激动人心的新功能,但其中最可取的特点,我认为是内存数据库。去年我在西雅图参加峰会的SQL通过2012开幕式上,微软宣布它将在未来版本的SQL Server数据库存储引擎的Hekaton。现在,随着2014ctp1的到来,我们终于可以一睹它。

内存数据库

在传统的数据库的表和索引B树结构的磁盘的物理结构的限制,使得这类指标很弱,在OLTP环境复杂,虽然有解决这类问题的方法很多,例如,乐观并发控制,分布式应用程序的缓存,等。但成本仍略高。这些年随着硬件的发展,服务器现在有几百G内存并不罕见,因为NUMA架构的成熟,也消除了多CPU访问内存的瓶颈问题,所以内存数据库可以出现。

访问存储器的存储器称为随机(RAM),因此,如特征,随机存取,所以内存,对应的数据结构将哈希索引,而且相应的并行隔离模式为MVCC,所以内存数据库可以在相同的硬件资源,处理更多的并发请求。而不会被锁定,SQL Server 2014集成的强大功能,并与Oracle TimesTen需要支付额外的费用,所以SSD的组合作为缓冲池,将产生的影响是值得等待的。

SQL Server内存数据库的形式

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



图1。客户端应用程序不感知的Hekaton引擎的存在

第一内存优化表完全没有锁的概念(虽然快照隔离的概念,以前的版本这个乐观并发控制但仍需要修改的快照隔离当数据锁)此外,内存优化表的哈希索引结构使得随机读写速度大大提高,也可以设置为非内存优化表持续的内存优化,所以不会有日志(适合ETL中间结果,但有数据丢失的风险)

让我们来看一下内存优化表的创建:

首先,在数据库表中存储的优化需要一个特殊的文件组,对内存优化的表的检查点文件的存储,不同于传统的中密度纤维板或ldf文件,该文件是一个目录而不是文件,因为检查点文件只会被添加,无需修改,如图2所示。



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

让我们看看内存优化文件组是什么样子,如图3所示。



图3。内存优化文件组

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



图4。创建内存优化表

目前,问题不在UI界面的一个内存优化表的创新支持,所以内存优化表只能通过T-SQL创建,如图5所示。



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

创建表时,可以查询数据。值得注意的是,查询内存优化表需要快照隔离级别或提示。此隔离级别不同于快照隔离,如图6所示。



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

另外,从创建表的语句中可以看出,目前SQL Server 2014内存优化表的哈希索引只支持固定的桶大小,不支持桶大小的动态分配,因此我们需要注意这一点。

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

目前,数据库镜像和复制不与内存优化表,兼容但AlwaysOn,航海日志、备份和恢复是完全支持。

性能测试

有一堆的理论,每个人都看起来很沮丧。接下来,我会做一个简单的性能测试比较内存优化表和本地编译存储过程与传统的B树表。B表如图7所示。内存优化表+本地编译存储过程如图8所示。



图7。传统的B树表



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

因此,不难看出内存优化表+本地编译存储过程几乎是性能改进的几倍。