SQL Server 是不是支持内存数据库?
Posted
技术标签:
【中文标题】SQL Server 是不是支持内存数据库?【英文标题】:Does SQL Server support in-memory database?SQL Server 是否支持内存数据库? 【发布时间】:2019-07-30 06:00:45 【问题描述】:我基本上有一个测试场景,我
-
创建数据库
用一些数据填充它
执行要测试的业务逻辑,修改数据。我不拥有业务逻辑实现或数据库模式。我必须测试已经存在的内容。
断言数据已按预期更改
删除数据库
SQL Server 是否仅在内存中支持类似的东西,以便我可以通过删除 #1 和 #5 来加速它?显然我不需要坚持。
【问题讨论】:
我不知道 SQL Server 是否只有内存版本。但是,您可能会考虑在 SQL Server 之上使用缓存层。或者,对于纯内存数据库,请阅读 H2 之类的内容。 H2 没有帮助,因为我不拥有业务逻辑的现有实现 这是个错误的问题。 SQL Server 自 SQL Server 2014 起就有内存表。所有版本都有临时表和表变量。所有这些都将涵盖要点。这些都与 testing 无关(可能除了临时表) @PanagiotisKanavos 我不同意我之前的评论,但是对于 integration 测试,实际的 SQL Server 实例正好与 OP 应该运行这些测试的内容相矛盾。对于 unit 测试,可以模拟数据库。 @Liero 另一种可能性是创建测试数据库,分离它并将文件用作模板。每次您想要一个新的测试数据库时,将它们复制到一个新位置,后跟一个ATTACH DATABASE
。这将比 RESTORE 更快,因为它没有恢复阶段
【参考方案1】:
SQL Server 具有内存中 OLTP。此功能非常接近您正在研究的内容。从 SQL Server 2016 SP1 开始,所有版本都可以使用,包括 sql express。
显然我不需要坚持
选项DURABILITY=SCHEMA_ONLY
仅保留元数据。这种情况对于暂存表可能是最佳的,因为它导致数据加载的锁/闩锁/日志免费方式。显然,该表将无法在实例/服务重新启动后继续存在。
CREATE DATABASE [Test]
GO
-- Memory Optimized FG
ALTER DATABASE [Test] ADD FILEGROUP [MemoryOptimizedFG] CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE [Test] ADD FILE (name='Test1', filename='D:\SQLData\TestInMemory') TO FILEGROUP [MemoryOptimizedFG]
GO
CREATE TABLE dbo.[TestTable] (
ID int NOT NULL IDENTITY (1, 1) PRIMARY KEY NONCLUSTERED,
ColumnID int NOT NULL,
Description varchar(100) NOT NULL,
dateAndTime datetime NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY)
GO
参考文献:
https://www.red-gate.com/simple-talk/sql/database-administration/in-memory-oltp-understanding-memory-optimized-tables/ https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/in-memory-oltp-in-memory-optimization?view=sql-server-2017【讨论】:
这几乎是我要找的,但它并不能帮助我在测试完成后清理数据,所以我还是需要删除并重新创建数据库 @Liero,对于删除和重新创建,您在原始测试场景中有步骤 1 和 5 ;) @Liero 那有什么问题?你想避免什么? DROP & CREATE 不需要那么长时间。为什么你需要一个临时数据库呢? 也许,你会想要保留一个空的数据库,但在其中删除/重新创建内存中的对象 @PanagiotisKanavos:不是真的问题,但如果有真正的内存数据库,它会变得更简单和更快(有很多测试)因为没有我会去这些方法大概。但是,给出了数据库脚本,我不想修改它们。让我检查一下我是否可以使用 MEMORY_OPTIMIZED=ON 更改表以上是关于SQL Server 是不是支持内存数据库?的主要内容,如果未能解决你的问题,请参考以下文章
在sql server 2000中进行内存的自动释放怎么实现?拜托各位了 3Q
windows server2012R2 64位系统中安装SQL server2008 32位最大使用内存是多少?