首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在什么情况下,大型数据库的恢复会被延迟,在SQL server 2016中,托管在VM上?

在什么情况下,大型数据库的恢复会被延迟,在SQL server 2016中,托管在VM上?
EN

Database Administration用户
提问于 2018-10-05 11:14:56
回答 1查看 149关注 0票数 1

我有一个系统,我的数据库每天晚上都会被恢复,而且从过去的几天到很晚,恢复时间要长得多。

以下是服务器配置:

  • ES 2637 XEON @ 3.5 Ghz
  • Windows虚拟服务器2012 R2托管在超级V环境中
  • 内存: 128 GB
  • 8个CPU
  • 以太网: 500 Kps吞吐量
  • 虚拟内存
    • 最大尺寸:132,096 MB
    • 提供: 39,395 MB
    • 使用中: 92,701 MB

版本:

2018年5月19日微软Server 2016 (SP2-CU1) (KB4135048) - 13.0.5149.0 (X64) 09:41:57版权(c)微软公司企业版(64位)在Windows 2012 R2标准6.3 (Build 9600:) (Hypervisor)

  • Diff :还原数据库在825.165秒(36.896 MB/秒)内成功处理了3897077页。
  • 完整:还原数据库在3174.184秒(125.735 MB/秒)内成功地处理了51085865页。

更多信息:

  • 修复工作在3个小时内完成;现在,他们所花费的时间从5到9个小时不等,大约是原来的2-3倍。
  • 备份文件的大小没有改变。
  • 我们目前正在备份一个文件。
  • 据我所知,这一制度没有发生任何变化。

有什么办法可以提高恢复速度吗?

EN

回答 1

Database Administration用户

发布于 2018-10-05 13:27:06

当我看到有人抱怨备份“突然”发生变化时,通常有三件事是我一开始看的。根据我的经验,这三件事之一通常是原因。

1:哎呀,有一个硬件更改

也许一个虚拟机被调到了另一个主机。也许您要备份的NAS/设备上的存储配置发生了变化。可能是网络配置发生了变化。

找出备份性能更改的日期,并与您的服务器/硬件团队合作,找出这里是否有任何变化。

2: DB大小

的更改

这个通常很容易找到。如果您使用的是某种类型的数据库监视软件,您应该能够回头查看历史数据,并看到数据库大小发生了重大变化。(坦白地说,我为SentryOne工作,他生产数据库监控软件。)

如果没有监视数据,可以在源服务器上查询msdb,查看数据库备份大小随时间的变化,并查看备份增长是否与您注意到RESTORE脚本减慢的时间相关:

代码语言:javascript
复制
SELECT database_name, backup_finish_date, backup_size
FROM msdb.dbo.backupset
WHERE [type] = 'd'
AND database_name = 'AdventureWorks2014' --Your database name here
ORDER BY backup_finish_date;

3: VLFs

事务日志号的变化

如果不是前两个,很可能是这个。Server将事务日志分解为"Virtual“--这些只是.ldf文件中的逻辑桶。在恢复时,Server会按顺序处理每个VLFs,这意味着更多的VLFs会减慢您的恢复速度。高VLF计数是不好的。

下面是如何使用AdventureWorks演示数据库再现问题。我恢复干净的数据库,并测试备份/恢复。然后增加VLF计数并重复相同的备份/还原:

代码语言:javascript
复制
--
-- RESTORE AdventureWorks from a pristine copy from Github
--      https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks
-- 
USE master;
RESTORE DATABASE AdventureWorks2014
FROM DISK = 'C:\SQL\AdventureWorks2014.bak'
WITH MOVE 'AdventureWorks2014_Data' TO 'C:\SQL\AdventureWorks2014_Data.mdf'
    ,MOVE 'AdventureWorks2014_Log' TO 'C:\SQL\AdventureWorks2014_Log.ldf'
    ,REPLACE;
GO
--
-- Now do a backup & restore.
-- 
PRINT '----- BACKUP  1 -----';
BACKUP DATABASE AdventureWorks2014 TO DISK = 'C:\temp\ADVW2014.bak'     WITH INIT, COMPRESSION;
PRINT '----- RESTORE 1 -----';
RESTORE DATABASE AdventureWorks2014_RestoreTest FROM DISK = 'C:\temp\ADVW2014.bak'      WITH REPLACE, NORECOVERY
        , MOVE 'AdventureWorks2014_Data' TO 'C:\SQL\AdventureWorks2014_RestoreTest_Data.mdf' 
        , MOVE 'AdventureWorks2014_Log' TO 'C:\SQL\AdventureWorks2014_RestoreTest_Log.ldf' ;
GO
--
-- Lets really jack up the VLFs on this DB. Grow log file to 2GB in 1MB increments.
-- 
GO
USE AdventureWorks2014
DBCC SHRINKFILE (N'AdventureWorks2014_Log' , 1)
GO

DECLARE @i int = 51;
DECLARE @sql nvarchar(max);
WHILE @i <= 2000
BEGIN
    SET @sql = N'ALTER DATABASE [AdventureWorks2014] MODIFY FILE ( NAME = N''AdventureWorks2014_Log'', SIZE = ' + CONVERT(nchar(4),@i) + N'MB );';
    EXEC sp_executesql @sql;
    SET @i +=1;
END;
DBCC LOGINFO;
GO
--
-- Now do a backup & restore.
-- 
PRINT '----- BACKUP  2 -----';
BACKUP DATABASE AdventureWorks2014 TO DISK = 'C:\temp\ADVW2014.bak'     WITH INIT, COMPRESSION;
PRINT '----- RESTORE 2 -----';
RESTORE DATABASE AdventureWorks2014_RestoreTest FROM DISK = 'C:\temp\ADVW2014.bak'      WITH REPLACE, NORECOVERY
        , MOVE 'AdventureWorks2014_Data' TO 'C:\SQL\AdventureWorks2014_RestoreTest_Data.mdf' 
        , MOVE 'AdventureWorks2014_Log' TO 'C:\SQL\AdventureWorks2014_RestoreTest_Log.ldf' ;
GO

第一个备份/还原将生成这样的输出。注意备份(299.826 MB/秒)和恢复(403.587 MB/秒)的速度:

代码语言:javascript
复制
----- BACKUP  1 -----
Processed 24328 pages for database 'AdventureWorks2014', file 'AdventureWorks2014_Data' on file 1.
Processed 4 pages for database 'AdventureWorks2014', file 'AdventureWorks2014_Log' on file 1.
BACKUP DATABASE successfully processed 24332 pages in 0.634 seconds (299.826 MB/sec).
----- RESTORE 1 -----
Processed 24328 pages for database 'AdventureWorks2014_RestoreTest', file 'AdventureWorks2014_Data' on file 1.
Processed 4 pages for database 'AdventureWorks2014_RestoreTest', file 'AdventureWorks2014_Log' on file 1.
RESTORE DATABASE successfully processed 24332 pages in 0.471 seconds (403.587 MB/sec).

第二个备份/恢复将生成这样的输出。注意备份(144.220 MB/秒)和恢复(89.114 MB/秒)的速度:

代码语言:javascript
复制
----- BACKUP  2 -----
Processed 24328 pages for database 'AdventureWorks2014', file 'AdventureWorks2014_Data' on file 1.
Processed 3 pages for database 'AdventureWorks2014', file 'AdventureWorks2014_Log' on file 1.
BACKUP DATABASE successfully processed 24331 pages in 1.318 seconds (144.220 MB/sec).
----- RESTORE 2 -----
Processed 24328 pages for database 'AdventureWorks2014_RestoreTest', file 'AdventureWorks2014_Data' on file 1.
Processed 3 pages for database 'AdventureWorks2014_RestoreTest', file 'AdventureWorks2014_Log' on file 1.
RESTORE DATABASE successfully processed 24331 pages in 2.133 seconds (89.114 MB/sec).

要解决这个问题,您实际上需要收缩&在更合适的块中重新增长日志文件。您可以在此这里(我的雇主的站点)、这里这里这里上看到更多信息。

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

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

复制
相关文章

相似问题

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