Sunteți pe pagina 1din 27

SQL Restore:

Optimizing Your Data Recovery


November 3rd – 8th in Seattle, WA
http://www.pass.org/summit/2019
Richmond SQL Server Users Group

http://rva.sqlpass.org/

Second Thursday at Markel Plaza (Glen Allen)


Personal Details
Work

Photography

Education

Community
Agenda

• Disasters & The Recovery Process

• Performance Tuning Database Restore


Psychology of Disaster Planning

Emphasis on backups in planning & operations


• Backups taken every ___ minutes/hrs/days
• Retention
• Performance tuning
• Encryption
• Access permission
• Offsite copies
Data Recovery

What you don’t want to see…


'blue_cevals_20180306_085000_Full_1of3.bak'
is incorrectly formed. SQL Server cannot
process this media family.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.

Backup <> Restore


Test Your Backups!
Types of Disasters
Severity
Data Level
• Deleted/Incorrect Data
Low
• Corrupt Table or Data File
Database Level
• Corrupt or Deleted Database(s) Medium
System Level
• System (Master or MSDB) Database
• Multiple Databases
High
• OS Corruption & Server Hardware
Environment Level
• Authentication (Domain Controller)
Critical
• Networking
• Server Room / Data Center
Disasters in the News

Additional Costs:
10 days lost revenue
Damaged company reputation
Recovery Objectives
Recovery Point (RPO)
Backup Strategy
Management Operations
How much data can be lost? What type(s) of backups are
taken?
How often are backups taken?

Recovery Time (RTO)


Restore Strategy
Management Operations
How long for restoration to Can restoration be completed in
complete? the time allotted?
What is the priority of systems? What are the dependencies?

How do you know?


Preparing For Recovery
Information required to successfully recover at:

The Data & Database Level


• Objects to be restored
Schema & Object names
RowID
• Recovery point date/time
• Backup media
Backup repository path
Backup filenames (Full, Diff, Log)
• Recovery location
Original file paths (overwrite)
New file paths (restoring individual objects or row data)
• Database file size(s)
Preparing For Recovery
Information required to successfully recover at:

The System Level


• Server build documentation
• Database details
Names & File sizes
Backup media (Path & Filenames – Full, Diff, Log)
Dependencies / Priority
• Recovery point date/time (database synchronization?)
• Recovery location
Disk characteristics, sizes & paths
• SQL Agent Job dependencies (external scripts, files, etc.)
• Logins - name, SID & password
Preparing For Recovery
Information required to successfully recover at:

The Environment Level


• Documentation & Specs for all servers & databases
• Contact information for
Networking
Storage / Hardware
User Communications

(optional)
• Tenant in Azure or AWS
• Phone number for pizza delivery
• Updated resume or CV
Other Recovery Considerations
• Server activity (online/offline)
• Bandwidth between backup repository & restore point
• Virtual Log Files
DBCC LOGINFO
SELECT * FROM sys.dm_db_log_stats(database_id)
• Logins
Active Directory maintains domain account SIDs
SQL account SIDs managed by SQL Instance
CREATE LOGIN [] WITH SID = 0x.....

USE [master] Server SQL01


GO Login TestUser1
SELECT *
SID 0xF018610322E97D41AD2A673194B84978
FROM sys.sql_logins

USE [dbname] Database TestDB1


GO User TestUser1
SELECT *
SID 0xF018610322E97D41AD2A673194B84978
FROM sys.sysusers
Recovery Optimization (Part 1)
1. Documentation Repository
• Emergency contact information & procedures
• Server build process & scripts
• Databases on each instance
Recovery priority
Dependencies
Database version
File path & size
• Server logins, SIDs & passwords (hashed or vaulted)
• Agent job dependencies
• Encryption certificate locations & passwords

2. Automate Data Collection


• Management database
Performance Tuning Database Restore
T-SQL Parameters
RESTORE DATABASE [dbname] FROM <backup_device> WITH

• BUFFERCOUNT
Total # of I/O buffers (3MB)
‘Out of Memory’ Error

• MAXTRANSFERSIZE
Unit of Transfer between backup media and SQL Server
Multiples of 65536 (64kb) – 4194304 (4MB)

• BLOCKSIZE (512 – 65536 bytes)


Auto selects based on device
SQL Server Log
DBCC traceon(3605, 3004, 3014, 3213, -1)
Restore Performance 65GB Database

BUFFER TRANSFER BLOCK 1 File 3 Files


6 1048576 512 2528 seconds 2572 seconds
(1024KB) (26.53 MB/sec) (26.07 MB/sec)
300 2511 seconds
(26.71 MB/sec)
1000 2240 seconds
(29.94 MB/sec)
2000
Insufficient Memory
1000 65536 1234 seconds
(54.35 MB/sec)

1000 3145728 533 seconds 545 seconds


(125.82 MB/sec) (123.05 MB/sec)
1000 4194304 589 seconds
(113.86 MB/sec)
1000 3145728 512 549 seconds
(122.15 MB/sec)
1000 3145728 32768 687 seconds
(97.62 MB/sec)
1000 3145728 65536 549 seconds
(122.15 MB/sec)
Backup Performance Tuning
BACKUP DATABASE [dbname] TO
DISK=<backup_file1>,
DISK=<backup_file2>,
DISK=<backup_file3>
WITH
BUFFERCOUNT = 7 – (system max)
MAXTRANSFERSIZE = <Multiples of 65536 (64kb) – 4194304 (4MB)>
BLOCKSIZE = <512 – 65536 bytes>

BUFFER TRANSFER BLOCK 1 File 3 Files


7 1048576 1024 127.577 MB/sec 197.329 MB/sec
300 3145728 1024 493.063 MB/sec 555.466 MB/sec
Recovery Optimization (Part 2)
1. Additional documentation
• Backup information
Filename, path, backup type
Encryption certificate
• Performance tuning information
Server, database, parameters
• Restore history
Audit compliance & baselines

2. Automate creation of restore statements


Database info + Backup info + Perf Tuning = Restore Stmt

3. Review restore performance


Future Improvements

Accelerated Database Recovery (ADR)

• SQL 2019 Public Preview (Oct 2018)


https://blogs.msdn.microsoft.com/sqlserverstorageengine/2018/10/16/accelerated-database-recovery/

• Instantaneous Transaction Rollback


• Aggressive Log Truncation
MSDB Tables For Backup & Restore Information

• BackupFile
• BackupFileGroup
• BackupMediaFamily
• BackupSet

• RestoreFile
• RestoreFileGroup
• RestoreHistory

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/backup-history-
and-header-information-sql-server?view=sql-server-2017
MSDB Information
Last Restore
SELECT restore_date, destination_database_name, restore_type, replace, recovery, stop_at,
destination_phys_name
FROM msdb.dbo.RestoreHistory h
LEFT JOIN msdb.dbo.RestoreFile f ON h.restore_history_id = f.restore_history_id;

Database Files
SELECT logical_name, physical_name, file_type, source_file_block_size
FROM msdb.dbo.backupfile;

Backups
SELECT bs.machine_name, bs.database_name, bs.type, bs.database_version,
bs.backup_start_date, bs.backup_finish_date, bs.is_copy_only, ms.is_encrypted
FROM msdb.dbo.backupset bs
LEFT JOIN msdb.dbo.backupmediaset ms ON bs.media_set_id = ms.media_set_id;

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/backup-history-and-header-
information-sql-server?view=sql-server-2017
Last Backup Set – All Databases (msdb)
SELECT bs.machine_name, bs.database_name, bs.type, bs.database_version, bs.backup_start_date, bs.backup_finish_date,
ms.is_encrypted, c.name AS certname, b.logical_name, b.physical_name, bm.physical_device_name
FROM msdb.dbo.backupset bs
LEFT JOIN msdb.dbo.backupmediaset ms ON bs.media_set_id = ms.media_set_id
LEFT JOIN master.sys.certificates c ON bs.encryptor_thumbprint = c.thumbprint
LEFT JOIN msdb.dbo.backupfile b ON bs.backup_set_id = b.backup_set_id
LEFT JOIN msdb.dbo.backupmediafamily bm ON bs.media_set_id = bm.media_set_id
JOIN (SELECT MAX(backup_start_date) AS backup_start_date, database_name
FROM msdb.dbo.backupset
WHERE type = 'D' --Full Backup
GROUP BY database_name) AS F ON bs.database_name = f.database_name
AND bs.backup_start_date = f.backup_start_date
UNION --Diff Backup
SELECT bs.machine_name, bs.database_name, bs.type, bs.database_version, bs.backup_start_date, bs.backup_finish_date,
ms.is_encrypted, c.name AS certname, b.logical_name, b.physical_name, bm.physical_device_name
FROM msdb.dbo.backupset bs
LEFT JOIN msdb.dbo.backupmediaset ms ON bs.media_set_id = ms.media_set_id
LEFT JOIN master.sys.certificates c ON bs.encryptor_thumbprint = c.thumbprint
LEFT JOIN msdb.dbo.backupfile b ON bs.backup_set_id = b.backup_set_id
LEFT JOIN msdb.dbo.backupmediafamily bm ON bs.media_set_id = bm.media_set_id
JOIN (SELECT MAX(backup_start_date) AS backup_start_date, database_name
FROM msdb.dbo.backupset
WHERE type = 'I' --Diff Backup
GROUP BY database_name) AS D ON bs.database_name = d.database_name
AND bs.backup_start_date = d.backup_start_date
UNION --Log Backup
SELECT bs.machine_name, bs.database_name, bs.type, bs.database_version, bs.backup_start_date, bs.backup_finish_date,
ms.is_encrypted, c.name AS certname, b.logical_name, b.physical_name, bm.physical_device_name
FROM msdb.dbo.backupset bs
LEFT JOIN msdb.dbo.backupmediaset ms ON bs.media_set_id = ms.media_set_id
LEFT JOIN master.sys.certificates c ON bs.encryptor_thumbprint = c.thumbprint
LEFT JOIN msdb.dbo.backupfile b ON bs.backup_set_id = b.backup_set_id
LEFT JOIN msdb.dbo.backupmediafamily bm ON bs.media_set_id = bm.media_set_id
JOIN (SELECT MAX(backup_start_date) AS backup_start_date, database_name
FROM msdb.dbo.backupset
WHERE type = 'I' --Diff Backup
GROUP BY database_name) AS D ON bs.database_name = d.database_name
AND bs.backup_start_date >= d.backup_start_date
ORDER BY database_name, backup_start_date
Last Backup Set – All Databases (msdb)

Type
D – Full Backup
I – Differential Backup
L – Transaction Log Backup
Questions?

S-ar putea să vă placă și