我尝试在内存中取消...
我得到了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
这张表也是。
选择第一个表与第二个表的时间相同。用设定的统计时间测量时间。
答案 0 :(得分:3)
您还没有描述您正在测量的SELECT语句的性质(例如,您正在执行查找或聚合),也没有描述您正在测量的内容(经过时间,CPU时间等) 。)因此很难提供直接的答案。例如,如果您将这100万行发送到客户端,那么您的性能极有可能受到网络限制,并且就执行时间而言,您不太可能从内存中看到太多优势。性能优化是一个充满细微差别的主题。
无论如何,这个paper详细描述了Hekaton,应该有助于您理解SQL Server的内存实现。
答案 1 :(得分:1)
不同的操作具有不同的性能特征。这应该是一个非常明显的陈述。
Hekaton并没有将 <10>加速 。这也应该非常明显。
要了解Hekaton可以做什么和不能做什么,请衡量不同的操作和工作量。例如,让自己熟悉各个DML操作的速度。当你了解单个基元的速度有多快时,你已经建立了一个Hekaton表现的心理模型。这使您可以估计更复杂的工作负载的行为,以及原因。
此方法是您了解任何系统的性能特征的方法。重要的是要理解,为什么事情的行为与他们一样。
没有人有时间测试和测量一切。您经常需要估计不同方法在您的头脑中的表现。对于这种情况,您需要了解性能模型。
答案 2 :(得分:-1)
如果(并且仅当)您的查询需要较少的IO到磁盘,InMemory可以帮助您,因为数据可以在内存中找到。在您的情况下,我希望花费时间将生成的1 mio行传输到客户端。
记忆中的很多东西都可能出错。首先,这是一个巨大的营销炒作。如果你有太多的数据它不适合内存,除非你有大量的内存(巨额资金)可用。有时一种更智能的方法,有三个或更多级别的访问将是更好的方式:内存,SSD,快速磁盘,慢速磁盘,......
我知道的唯一能够处理这种级别的数据库是Teradata。但也许其他人也可以这样做。欢迎提出意见: - )