若要将测试数据库还原到初始状态(在运行测试之后),我希望从快照恢复数据库。我正在使用下面的脚本来实现这个目标。
但是,脚本执行现在大约需要7-8秒,因为它首先断开了所有用户与数据库的连接(通过将DB设置为SINGLE_USER模式)。
是否有任何方法可以加快恢复过程,以便在每个自动化(E2E)测试之前最好地调用脚本?
ALTER DATABASE [MyDb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE [MyDb] FROM DATABASE_SNAPSHOT = @snapshotName;
ALTER DATABASE [MyDb] SET MULTI_USER;每个命令经过的时间:
此技术用于端到端的UI测试,因此在测试期间没有对事务的直接控制。
我正在Docker中运行SQL Server。这能在花费多长时间的过程中发挥重要作用吗?
发布于 2021-10-20 09:42:44
我可以为类似的数据库用于自动测试的场景提出两点建议,这两件事是我们在过去使用过的,以提高恢复时间:
发布于 2023-04-11 07:14:07
我将第一个ALTER DATABASE (将DB设置为单用户模式)命令替换为一个新的命令,该命令简单地杀死了所有会话。它要快得多,我想说它是即时的(毫不拖延)。也就是说,也不需要另一个ALTER DATABASE (将DB设置为多用户模式)命令。
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = db_id('MyDb');
PRINT "KILL commands to be executed: " + @kill
EXEC(@kill);我仍然感兴趣的是,是否以及如何加快实际的RESTORE。- user240502
快照是“在写上复制”。从快照恢复所需的时间与更改的数据量成正比。如果你改变了很多数据,那就需要时间。- user200
除了将快照存储在快速SSD user220697上之外,对此您无能为力。
https://dba.stackexchange.com/questions/301242
复制相似问题