内存中,16倍性能提升?

时间:2013-09-04 10:04:31

标签: sql sql-server sql-server-2014 memory-optimized-tables

我尝试在内存中取消...

我得到了CTP1并尝试了In-Memory。白皮书描述了内存表的语法。 我写了一些查询以找出性能提升。

一个包含100万个条目的普通表与内存优化表相同?

只有插入,删除和更新才会快得多......

我也尝试使用native_compilation程序,但现在,同时。

如何通过查询达到较低的延迟? 查询如何通过select获得性能?

create table dbo.Ord (
  OrdNo integer not null primary key 
    nonclustered hash with (bucket_count=1000000), 
  OrdDate datetime not null, 
  CustCode nvarchar(5) not null
) 
with (memory_optimized=on) 
go

此表填充了1个Mio条目。和一个普通的表

create table dbo.Ordnormal (
  OrdNo integer not null primary key nonclustered , 
  OrdDate datetime not null, 
  CustCode nvarchar(5) not null
) 
go 

这张表也是。

选择第一个表与第二个表的时间相同。用设定的统计时间测量时间。

3 个答案:

答案 0 :(得分:3)

您还没有描述您正在测量的SELECT语句的性质(例如,您正在执行查找或聚合),也没有描述您正在测量的内容(经过时间,CPU时间等) 。)因此很难提供直接的答案。例如,如果您将这100万行发送到客户端,那么您的性能极有可能受到网络限制,并且就执行时间而言,您不太可能从内存中看到太多优势。性能优化是一个充满细微差别的主题。

无论如何,这个paper详细描述了Hekaton,应该有助于您理解SQL Server的内存实现。

答案 1 :(得分:1)

不同的操作具有不同的性能特征。这应该是一个非常明显的陈述。

Hekaton并没有将 <10>加速 。这也应该非常明显。

要了解Hekaton可以做什么和不能做什么,请衡量不同的操作和工作量。例如,让自己熟悉各个DML操作的速度。当你了解单个基元的速度有多快时,你已经建立了一个Hekaton表现的心理模型。这使您可以估计更复杂的工作负载的行为,以及原因。

此方法是您了解任何系统的性能特征的方法。重要的是要理解,为什么事情的行为与他们一样。

没有人有时间测试和测量一切。您经常需要估计不同方法在您的头脑中的表现。对于这种情况,您需要了解性能模型。

答案 2 :(得分:-1)

如果(并且仅当)您的查询需要较少的IO到磁盘,InMemory可以帮助您,因为数据可以在内存中找到。在您的情况下,我希望花费时间将生成的1 mio行传输到客户端。

记忆中的很多东西都可能出错。首先,这是一个巨大的营销炒作。如果你有太多的数据它不适合内存,除非你有大量的内存(巨额资金)可用。有时一种更智能的方法,有三个或更多级别的访问将是更好的方式:内存,SSD,快速磁盘,慢速磁盘,......

我知道的唯一能够处理这种级别的数据库是Teradata。但也许其他人也可以这样做。欢迎提出意见: - )