是否可以在SQL Server中创建快速(内存中,非ACID等)表/数据库?

时间:2011-01-19 22:17:35

标签: sql-server performance

在Sqlite中,有一个选项可以创建in-memory database,另一个选项可以创建not wait for things to be written to the filesystemput the journal in memory or disable it。 SQL Server有这样的设置吗?

我的用例是存储数据,在正常使用中应该持续大约一天,但如果丢失则不会有什么大不了的。我会使用像memcached这样的东西,但我希望能够控制缓存时间,而不仅仅是希望我有足够的内存。

5 个答案:

答案 0 :(得分:3)

没有

tempdba bit less logging比常规数据库,因为它不需要在交易的酸和重做中支持“D”,但这就是它。

答案 1 :(得分:2)

不是真的。您可以通过SQL Server通过SQLCLR实现自定义解决方案来执行此类操作。您也可以使用临时表或表变量,但这些仍将写入磁盘。您可以通过使用不同的ISOLATION LEVEL(例如READ_UNCOMMITTED)来提高性能(通过减少阻塞)但打破一致性。

简而言之,如果你真的想要你所要求的,SQLCLR就是解决方案。

答案 2 :(得分:2)

从MSSQL 2014开始是。

MSSQL 2014中有一项名为内存中OLTP 的新功能。

详细功能介绍: http://technet.microsoft.com/en-us/library/dn133186(v=sql.120).aspx

答案 3 :(得分:1)

您可以将表存储在ramdisk上。这样它总是在记忆中。

但是,我会首先尝试普通表。 SQL Server在缓存内存中的表方面做得非常好。

答案 4 :(得分:1)

表变量:

DECLARE @name TABLE (id int identity(1,1), ...);

表变量保存在内存中而不记录。在内存压力下,它们可以溢出到tempdb。但是,由于它们仅限于批量执行的范围,因此将数据存储在“大约一天”中将很困难(但并非不可能)。我绝对不会推荐基于SQL Server表变量的内存非酸解决方案。但是,正如Martin已经指出的那样,tempdb中的真实表是改善延迟的可行替代方案。通过适当的事务管理(批量提交)和文件放置(专用高吞吐量日志磁盘),您也可以在持久DB上获得类似的结果。