我有一个系统,我的数据库每天晚上都会被恢复,而且从过去的几天到很晚,恢复时间要长得多。
以下是服务器配置:
版本:
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)
更多信息:
有什么办法可以提高恢复速度吗?
发布于 2018-10-05 13:27:06
当我看到有人抱怨备份“突然”发生变化时,通常有三件事是我一开始看的。根据我的经验,这三件事之一通常是原因。
也许一个虚拟机被调到了另一个主机。也许您要备份的NAS/设备上的存储配置发生了变化。可能是网络配置发生了变化。
找出备份性能更改的日期,并与您的服务器/硬件团队合作,找出这里是否有任何变化。
的更改
这个通常很容易找到。如果您使用的是某种类型的数据库监视软件,您应该能够回头查看历史数据,并看到数据库大小发生了重大变化。(坦白地说,我为SentryOne工作,他生产数据库监控软件。)
如果没有监视数据,可以在源服务器上查询msdb,查看数据库备份大小随时间的变化,并查看备份增长是否与您注意到RESTORE脚本减慢的时间相关:
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;事务日志号的变化
如果不是前两个,很可能是这个。Server将事务日志分解为"Virtual“--这些只是.ldf文件中的逻辑桶。在恢复时,Server会按顺序处理每个VLFs,这意味着更多的VLFs会减慢您的恢复速度。高VLF计数是不好的。
下面是如何使用AdventureWorks演示数据库再现问题。我恢复干净的数据库,并测试备份/恢复。然后增加VLF计数并重复相同的备份/还原:
--
-- 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/秒)的速度:
----- 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/秒)的速度:
----- 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).要解决这个问题,您实际上需要收缩&在更合适的块中重新增长日志文件。您可以在此这里(我的雇主的站点)、这里、这里和这里上看到更多信息。
https://dba.stackexchange.com/questions/219348
复制相似问题