7

我有一个针对 SQL Server 2012 集群中的数据库运行的测试套件。我希望这个测试套件尽可能快地运行。我愿意为性能牺牲每一个持久性和可用性保证。每次测试运行期间都会重新创建数据库,因此它甚至不必在服务器重新启动后继续存在。

更改恢复模型ALTER DATABASE [dbname] SET RECOVERY SIMPLE没有明显的区别。

似乎是一个不错的选择DELAYED_DURABILITY,但这是 2014 年的新选项,因此我无法使用。

我该怎么做才能在这个集群上创建一个疯狂的快速数据库?我尝试寻找内存数据库,但找不到任何选项。集群不允许我在本地磁盘上创建数据库,坚持它必须位于集群磁盘上。

更新: 该应用程序使用高级 SQL Server 功能,所以我很可能被 MS SQL Server 卡住了。数据库本身很小,因为它用于测试(8MB mdf,1MB ldf)。集群节点是网络中最快的服务器,所以如果我可以将其中一个节点误用于内存数据库,那肯定是最快的。但是怎么做?

4

4 回答 4

3

如果由于某种原因你被困在一个集群的 sql server 实例上但你不想要持久性,也许你可以在 tempdb 上运行你的应用程序。Tempdb 可以放在本地存储上以避免集群开销。

另请注意,存储在 tempdb 上的数据最初将保留在缓冲池中,即 RAM 内存,并且只会在 sql server 引擎找到更好地使用该内存空间时异步溢出到磁盘。

您可以通过编写所有数据库对象的脚本并使用文本编辑器将数据库名称替换为“tempdb”来实现此解决方案。然后执行此脚本以在 tempdb 上创建所有对象。还将运行应用程序的用户的初始目录设置为 tempdb 和/或编辑所需的连接字符串。请记住,每次重新启动实例时都会重新生成 tempdb。因此,您将丢失所有数据和 ddl 更改。

这无疑是“牺牲每一个耐用性和可用性保证”的最大努力。

于 2014-09-26T21:04:44.423 回答
2

像这样的东西可以工作(doc)吗?

CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = 'R:\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )

RAM驱动器R:在哪里

于 2014-09-27T23:02:43.087 回答
1

使用一种称为 Continuous Attach-Detach 的技术来制作快速的近乎即时的数据库:

我敢打赌您知道如何分离数据库,但作为提醒,请运行以下内容:

执行 sp_detach_db

在这个阶段,SQL 服务器假定您已经删除了它。现在使用以下内容附加到现有文件:EXEC sp_attach_db @dbname = N'myD',@filename1=N'myCurrentPath',@filename2=N'pathToNewFile'</p>

好的。这很容易,但是我附加数据库的这些新文件是如何创建的?通过一个非常小且极其简单的 .NET CSharp 控制台应用程序,该应用程序已将 .mdf 和 .ldf 的内容一次读入内存并将其写入您选择的文件:

读取和写入新创建的数据文件

整个局势是如何触发的?使用DDL 触发器附加数据库触发器,如中所述

附加数据库触发器

关键点是附加到已经存在的文件,该文件已被读取(一次)-写入[多次]到内存中[使用您选择的程序,例如 CSharp],因此您可以附加数据库而无需额外开销。

于 2014-09-28T02:14:13.367 回答
1

如果要在本地磁盘上创建数据库,可以通过在共享上创建数据库来绕过集群限制。

您必须为集群创建一个放在本地磁盘上的共享文件夹;然后使用 UNC 补丁创建您的数据库(例如:\\share\DATA\data.mdf);2012 年不应该对此有任何限制,2008 年您必须使用 Trace 标志 1807;

于 2014-09-26T09:04:00.913 回答