[Notes from Pinal]: I am working with SQL Server for almost 10 years. I have seen the most ignored databases on any database server is system database. We hardly pay attention to them. Just for the sake of it – try to run queries in your master database and see how many user databases already exists there. I am sure unless and until you have strict policies in the place, there will be a handful of the tables available there. Similarly try to ask DBA question about what is the exact importance of the MSDB database and you will find it that there are so many of the DBA without its knowledge. I often talk about this with my friend Tim. I asked him if he can help us out with the tricks to keep MSDB system database at its optimal settings.
Linchpin People are database coaches and wellness experts for a data driven world. In this 33rd episode of the Notes from the Fields series database expert Tim Radney (partner at Linchpin People) explains in a very simple word how to keep MSDB system database at optimal settings.
When doing a review of a client’s database server, one of the checks I perform is checking to see how much backup history is being kept within MSDB. SQL Server does a fantastic job logging all the backups and restores we perform and depending how your routine is configured you are probably only keeping enough backup files to meet your SLA’s. What most DBA’s or Admins don’t think about is all that backup and restore history being retained with MSDB.
The tables within msdb that hold this history include:
- restorefile
- restorefilegroup
- restorehistory
- backupfile
- backupfilegroup
- backupmediafamily
- backupmediaset
- backupset
Microsoft SQL Server has a system stored procedure that helps us maintain the history however it is not scheduled to run by default. We have to create a process to run the stored procedure on a routine basis. You will need to know how much history is enough to keep for your organization. I have seen this range from 90 days to 14 days.
The stored procedure is sp_delete_backupshistory within the MSDB database.
This stored procedure takes a single parameter of date. This date is the cutoff date of history to keep. Any history past the date provided will be deleted.
Over the years I have found MSDB ranging from several megabytes to nearly 20 GB. I recall one client who had a database server with hundreds of databases that were being log shipped to a secondary with 15 minute log backup and the system had been in place for many years. MSDB had grown to almost 20 GB. The client had complained that if they ever tried to restore a database within the GUI that it would lock up SSMS.
A simple script to execute to purge this history older than 30 days is below.
USE msdb GO DECLARE @CutOffDate DATETIME SET @CutOffDate = CONVERT(VARCHAR(10), DATEADD(dd, -30,GETDATE()), 101) EXEC sp_delete_backuphistory @CutOffDate GO
If you want me to take a look at your server and its settings, or if your server is facing any issue we can Fix Your SQL Server.
Note: Tim has also written an excellent book on SQL Backup and Recovery, a must have for everyone.
Reference: Pinal Dave (https://blog.sqlauthority.com)
1 Comment. Leave new
I didn’t know about this. A hidden way for databases to grow without bound. Thanks for another piece of knowledge to help optimize the operation of my databases.