3

我试图理解内存中......

我得到了 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 

这张桌子也是。

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

4

3 回答 3

3

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

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

于 2013-09-04T12:12:36.980 回答
1

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

Hekaton并没有将每一次加速都精确10 倍。这也应该很明显。

要了解 Hekaton 能做什么和不能做什么,请测量不同的操作和工作负载。例如,让您自己熟悉各个 DML 操作的速度。当您了解各个基元的速度有多快时,您就已经在脑海中建立了 Hekaton 性能的心智模型。这使您可以估计更复杂的工作负载的行为方式以及原因。

这种方法是您了解任何系统的性能特征的方式。重要的是要了解为什么事情会以它们的方式运行。

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

于 2013-09-04T11:20:15.603 回答
-1

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

inMemory 周围的很多事情都可能出错。首先,这是一个巨大的营销炒作。如果您有太多数据,除非您有大量可用内存(用于巨额资金),否则它不适合内存。有时,具有三个或更多访问级别的更智能的方法会是更好的方法:内存、SSD、快速磁盘、慢速磁盘......

我知道的唯一能够处理此类级别的数据库是 Teradata。但也许其他人也可以这样做。欢迎评论:-)

于 2013-09-04T11:13:07.760 回答