首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速从快照恢复数据库

加速从快照恢复数据库
EN

Database Administration用户
提问于 2021-10-15 16:04:40
回答 2查看 481关注 0票数 2

若要将测试数据库还原到初始状态(在运行测试之后),我希望从快照恢复数据库。我正在使用下面的脚本来实现这个目标。

但是,脚本执行现在大约需要7-8秒,因为它首先断开了所有用户与数据库的连接(通过将DB设置为SINGLE_USER模式)。

是否有任何方法可以加快恢复过程,以便在每个自动化(E2E)测试之前最好地调用脚本?

代码语言:javascript
复制
ALTER DATABASE [MyDb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE [MyDb] FROM DATABASE_SNAPSHOT = @snapshotName;
ALTER DATABASE [MyDb] SET MULTI_USER;

每个命令经过的时间:

  1. 3065毫秒
  2. 2766毫秒
  3. 2ms

此技术用于端到端的UI测试,因此在测试期间没有对事务的直接控制。

我正在Docker中运行SQL Server。这能在花费多长时间的过程中发挥重要作用吗?

EN

回答 2

Database Administration用户

发布于 2021-10-20 09:42:44

我可以为类似的数据库用于自动测试的场景提出两点建议,这两件事是我们在过去使用过的,以提高恢复时间:

  1. 在进行备份之前,收缩日志文件,以绝对最小化备份的大小。在我们的例子中,这产生了惊人的巨大差异。
  2. 确保您正在进行压缩备份。我刚刚对我们的DB (Approx 12 DB)做了一个快速测试,并在41秒和58秒之间恢复了一个压缩备份,用于未压缩的备份。您的里程可能有所不同,取决于您的特定还原是CPU还是IO绑定。
票数 1
EN

Database Administration用户

发布于 2023-04-11 07:14:07

我将第一个ALTER DATABASE (将DB设置为单用户模式)命令替换为一个新的命令,该命令简单地杀死了所有会话。它要快得多,我想说它是即时的(毫不拖延)。也就是说,也不需要另一个ALTER DATABASE (将DB设置为多用户模式)命令。

代码语言:javascript
复制
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上之外,对此您无能为力。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/301242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档