译者注:

这篇文章转自英文的SQL Server Blog:Breakthrough in Performance with In-Memory Technologies。原文作者是Dave Campbell,刊载于2012年11月8日。

--------------------

在今年早些时候的
一个博客文章里,我提到了微软在一些内存数据库技术方面的投资。这个星期,在SQL PASS大会上,微软公布了我们在内存数据库方面的一个新发展:代号“Hekaton”[1]Hekaton将和下一个SQL Server主要版本一起发布。

Hekaton
将大幅提升SQL Server在事务处理方面的吞吐量,而且会大量降低事务的处理延迟,从而使SQL Server的事务处理性能得到飞跃性的提高。Hekaton是为了能够达到最严格的事务处理系统性能要求而设计的。为此,我们在和一些公司密切合作来证明这些性能提升。现在正在试用Hekaton的公司包括财经服务公司、在线游戏公司和其他在事务处理方面有严格要求的公司。Hekaton最让人吃惊的地方是,它不是一个独立的数据管理产品或一个新的编程模式。它还是SQL Server

在那个博客文章中提到,很多在内存数据管理系统方面的投资是围绕着列式数据库和分析处理方面展开的。微软已经推出了在这方面的产品:xVelocity analytics enginexVelocity columnstore indexXVelocity columnstore index将在SQL Server 2012并行数据仓库 (PDW v2) 中支持可更新的聚集列索引。对比之下,Hekaton是一个基于行存储上的,注重于事务处理工作的技术发展。它将和其他xVelocity技术一起提供一个在SQL Server上面与众不同的内存数据库体验。

Hekaton
xVelocity columnstore indexSQL Server自带而不是外加产品,这个是有意的设计选择。其他的提供商或是提供完全分开的内存优化缓存,或是将一层基于不同技术上面的总和层当成一个新的产品销售。这些办法迫使用户部署和管理一个全新的产品。更糟糕的是,这些办法很可能迫使用户为了他们的热数据管理一个“内存优化”产品,然后为了他们不能放在内存里的数据管理另外一个“存储优化”产品。

Hekaton
在设计上遵循四个原则:

1. 优化主内存数据存取

“存储优化”的引擎(比如说现在
SQL Server里面的事务处理引擎)会基于读写频率在内存缓冲区中缓冲热数据,但是在数据读取与修改能力上,它们是在“数据会随时从磁盘读到内存或者从内存写回磁盘”的基础上而设计的。这个观点需要在缓冲池里一层又一层的迂回、需要更多的代码实现复杂的存储配给算法和碎片整理功能,外加记录每一个有可能影响已存储数据的微小操作。您可以利用Hekaton将您需要很高事务处理要求的数据表放在主内存里经过内存优化的数据结构中。剩下的数据表(比如说历史数据或者是参照数据)可以留在传统的经过存储优化的数据结构中。这个办法能让您利用内存优化数据库系统中的工作热点,同时省却管理多个数据引擎的麻烦。

Hekaton的主内存结构摒去了存储优化中不必要的迂回和系统开销,但是还是提供数据库系统所应有的ACID属性。拿持久性来说,Hekaton利用高效率的顺序I/O进行流线化的事务记录和检查点操作。

2.
大幅加快商业逻辑处理

因为现在的
CPU频率已经不再上涨,所以Hekaton必须高效利用每一个CPU核心。现在SQL Server的查询处理器先把数据库查询和存储过程编译成一套执行计划,然后这套执行计划被查询处理器中的一个解释器阅读并执行。Hekaton可以在编译时利用积极的优化办法将存储过程中的数据库查询和过程逻辑直接编译成机器码,从而使存储过程以和本机代码相媲美的速度执行。

3.
提供无摩擦向上扩大

现在就算是一个拥有两个
CPU插座的服务器中,16或是32CPU核心也是很正常的事情。“存储优化”数据引擎依靠很多办法提供并发控制,其中包括闩锁和级锁。当向上扩大服务器硬件的时候,闩锁与级锁争用是一个很大的问题。Hekaton利用一个有高可扩放性的算法提供并发控制和一系列的无锁数据结构来排除传统意义上的闩锁与级锁,与此同时保证数据的一致性和正确性。

4. 内置于SQL Server
之中

就像我之前提到过的,
HekatonSQL Server的一个新组件。经过我们客户的测试,这种设计能够为提供一个非常强大的客户问题解决方案打下基础。很多现有的事务处理系统有一些事务和算法能够利用Hekaton的极高事务处理效率,譬如财经交易所用的匹配算法、生产组装工业所用的资源配给或是时间计划算法、或者是在线娱乐中的配组算法等等。Hekaton可以利用内存数据库技术优化这些算法,而把冷一些的数据放在SQL Server的其它部分去处理。

为了使您更容易使用
Hekaton,我们开发了一个分析工具。它能分析您现有的数据库系统,指出数据库系统里面的包括数据表和存储过程的热点。

使用
Hekaton的第一步是将您的热数据表移动到内存优化数据表Memory-Optimized Table)。如下所示,这一步仅仅需要以下这个语句[2]



虽然内存优化数据表一定要全部在内存里面,但是整个数据库系统不需要全部在主内存中。您可以使用普通的
T-SQL数据查询来查询这些内存优化数据表。在这一阶段,内存优化数据表提供一个优化过的无争用数据存储结构。

把表移动到内存优化数据表以后,您可以告诉
Hekaton将对这些表实行操作的存储过程重新编译成为本机代码存储过程Natively-Compiled Stored Procedure)执行。这将大幅度提高数据库里逻辑的执行速度。

如下所示,重新编译一个存储过程需要这些
T-SQL语句:



那么
Hekaton可以带来什么样的效率提升呢?我们在客户测试中看到,虽然他们的硬件和以前是一样的中端服务器,但是他们的事务处理系统的吞吐量能够增加5倍到50倍。实际上的效率提升量受很多方面的影响,比如说有多少数据处理逻辑可以直接移动到Hekaton上,或者是Hekaton可以免除多少事务间的争用,或者是能够利用多少其他的Hekaton优化。

一小组非公开的客户现在正在试用
Hekaton。如果想要知道Hekaton以后的发展和关于未来的公开技术预览,请继续密切关注我们的产品博客。


Dave Campbell
Technical Fellow
Microsoft SQL Server

注[1]:
Hekaton”的辞源是希腊语“ἑκατόν”,意思是“百”。Hekaton第一个原型的设计目标是一些事务处理操作可以快一百倍。

注[2]:
这些操作的语法很有可能会改变。这个例子仅仅是为了展示到底有多容易能利用Hekaton的强大性能。