{"id":16093,"date":"2021-04-22T19:46:11","date_gmt":"2021-04-22T17:46:11","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/"},"modified":"2025-10-01T11:52:38","modified_gmt":"2025-10-01T09:52:38","slug":"sql-server-how-to-delete-the-msdb-backup-history-kindly","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/","title":{"rendered":"SQL Server: How to delete the msdb backup history kindly"},"content":{"rendered":"<p>This week I noticed some slowness on queries related to backup history. The instance had a huge msdb database (more than 10GB size), the backup history had never been purged.<\/p>\n<p>I already wrote <a href=\"https:\/\/www.dbi-services.com\/blog\/sql-server-quickly-clean-backup-history-with-dbatools\/\">a post<\/a> on this topic and provided a small PowerShell script using <a href=\"https:\/\/dbatools.io\/\">dbatools<\/a> to clean the backup history.<br \/>\nThe issue with sp_delete_backuphistory or Remove-DbaDbBackupRestoreHistory is that the operation is done as one transaction and this could badly impact the msdb transaction log file.<\/p>\n<p>Remember you can have a look at the code behind a system stored procedure using <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-stored-procedures\/sp-helptext-transact-sql?view=sql-server-ver15\">sp_helptext<\/a>.<\/p>\n<div>\n<div id=\"highlighter_896629\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">use msdb<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">go<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">sp_helptext sp_delete_backuphistory<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The code for sp_delete_backuphistory looks like this:<\/p>\n<div>\n<div id=\"highlighter_565713\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1 highlighted\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql keyword\">CREATE<\/code>&nbsp;&nbsp; <code class=\"sql keyword\">PROCEDURE<\/code> <code class=\"sql plain\">sp_delete_backuphistory&nbsp; <\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql plain\">@oldest_date datetime&nbsp; <\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"sql keyword\">AS<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">BEGIN<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">SET<\/code> <code class=\"sql plain\">NOCOUNT <\/code><code class=\"sql keyword\">ON<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">DECLARE<\/code> <code class=\"sql plain\">@backup_set_id <\/code><code class=\"sql keyword\">TABLE<\/code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class=\"sql plain\">(backup_set_id <\/code><code class=\"sql keyword\">INT<\/code><code class=\"sql plain\">)&nbsp; <\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">DECLARE<\/code> <code class=\"sql plain\">@media_set_id <\/code><code class=\"sql keyword\">TABLE<\/code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class=\"sql plain\">(media_set_id <\/code><code class=\"sql keyword\">INT<\/code><code class=\"sql plain\">)&nbsp; <\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">DECLARE<\/code> <code class=\"sql plain\">@restore_history_id <\/code><code class=\"sql keyword\">TABLE<\/code> <code class=\"sql plain\">(restore_history_id <\/code><code class=\"sql keyword\">INT<\/code><code class=\"sql plain\">)&nbsp; <\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql keyword\">INTO<\/code> <code class=\"sql plain\">@backup_set_id (backup_set_id)&nbsp; <\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql keyword\">DISTINCT<\/code> <code class=\"sql plain\">backup_set_id [...]<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql keyword\">INTO<\/code> <code class=\"sql plain\">@media_set_id (media_set_id)&nbsp; <\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql keyword\">DISTINCT<\/code> <code class=\"sql plain\">media_set_id [...] <\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">INSERT<\/code> <code class=\"sql keyword\">INTO<\/code> <code class=\"sql plain\">@restore_history_id (restore_history_id)&nbsp; <\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql keyword\">DISTINCT<\/code> <code class=\"sql plain\">restore_history_id [...]&nbsp; <\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number20 index19 alt1 highlighted\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql keyword\">TRANSACTION<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">DELETE<\/code> <code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">msdb.dbo.backupfile&nbsp; <\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">WHERE<\/code> <code class=\"sql plain\">backup_set_id <\/code><code class=\"sql color1\">IN<\/code> <code class=\"sql plain\">(<\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">backup_set_id&nbsp; <\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">@backup_set_id)&nbsp; <\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql plain\">IF (@@error &gt; 0)&nbsp; <\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">Quit&nbsp; <\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">DELETE<\/code> <code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">msdb.dbo.backupfilegroup&nbsp; <\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql keyword\">WHERE<\/code> <code class=\"sql plain\">backup_set_id <\/code><code class=\"sql color1\">IN<\/code> <code class=\"sql plain\">(<\/code><code class=\"sql keyword\">SELECT<\/code> <code class=\"sql plain\">backup_set_id&nbsp; <\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">FROM<\/code> <code class=\"sql plain\">@backup_set_id)&nbsp; <\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql plain\">IF (@@error &gt; 0)&nbsp; <\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">Quit&nbsp; <\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;<\/code><code class=\"sql plain\">[...]<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>In order to clean up the backup history while minimizing the impact on the size of the transaction log file, the operation should be done in small chunks.<\/p>\n<p>Here is the small T-SQL script that will do the job:<\/p>\n<div>\n<div id=\"highlighter_520920\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">use msdb<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">go<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">declare<\/code> <code class=\"sql plain\">@retentionDate datetime = DATEADD(<\/code><code class=\"sql color2\">MONTH<\/code><code class=\"sql plain\">, -3, getdate())<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql keyword\">declare<\/code> <code class=\"sql plain\">@oldest_date datetime = (<\/code><code class=\"sql keyword\">select<\/code> <code class=\"sql keyword\">min<\/code><code class=\"sql plain\">(backup_start_date) <\/code><code class=\"sql keyword\">from<\/code> <code class=\"sql plain\">msdb.dbo.backupset)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql plain\">while (@oldest_date&nbsp; &lt; @retentionDate)<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql keyword\">begin<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">print <\/code><code class=\"sql string\">'sp_delete_backuphistory '<\/code> <code class=\"sql plain\">+ <\/code><code class=\"sql color2\">CAST<\/code><code class=\"sql plain\">(@oldest_date <\/code><code class=\"sql keyword\">AS<\/code> <code class=\"sql keyword\">varchar<\/code><code class=\"sql plain\">)<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">msdb.dbo.sp_delete_backuphistory @oldest_date<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql comments\">--&nbsp; Delete by 1 week increments<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">set<\/code> <code class=\"sql plain\">@oldest_date = DATEADD(WEEK, 1, @oldest_date)<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql keyword\">checkpoint<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql keyword\">end<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"sql keyword\">exec<\/code> <code class=\"sql plain\">msdb.dbo.sp_delete_backuphistory @retentionDate<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"sql plain\">go<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The sp_delete_backuphistory procedure is called in 1-week increments from the oldest entry in msdb.dbo.backupset until the retention date which I set to 3 months.<br \/>\nAn important point here is the checkpoint command which actually performs a <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/logs\/database-checkpoints-sql-server?view=sql-server-ver15\">manual checkpoint<\/a> and helps to keep the impact on the transaction log size at a minimum when the database is in the SIMPLE recovery model. You can read more about this technic in this <a href=\"https:\/\/sqlperformance.com\/2013\/03\/io-subsystem\/chunk-deletes\">great writing<\/a> from Aaron Bertrand.<\/p>\n<p>If you don&#8217;t already have one, I would recommend creating a Job on your SQL Server instance that will call sp_delete_backuphistory weekly or fortnightly. This can be a standard Job on all your servers.<\/p>\n<p>Here is the script for such a Job with its schedule. The retention is set to 6 months of backup history.<\/p>\n<div>\n<div id=\"highlighter_269421\" class=\"syntaxhighlighter  sql\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<div class=\"line number24 index23 alt1\">24<\/div>\n<div class=\"line number25 index24 alt2\">25<\/div>\n<div class=\"line number26 index25 alt1\">26<\/div>\n<div class=\"line number27 index26 alt2\">27<\/div>\n<div class=\"line number28 index27 alt1\">28<\/div>\n<div class=\"line number29 index28 alt2\">29<\/div>\n<div class=\"line number30 index29 alt1\">30<\/div>\n<div class=\"line number31 index30 alt2\">31<\/div>\n<div class=\"line number32 index31 alt1\">32<\/div>\n<div class=\"line number33 index32 alt2\">33<\/div>\n<div class=\"line number34 index33 alt1\">34<\/div>\n<div class=\"line number35 index34 alt2\">35<\/div>\n<div class=\"line number36 index35 alt1\">36<\/div>\n<div class=\"line number37 index36 alt2\">37<\/div>\n<div class=\"line number38 index37 alt1\">38<\/div>\n<div class=\"line number39 index38 alt2\">39<\/div>\n<div class=\"line number40 index39 alt1\">40<\/div>\n<div class=\"line number41 index40 alt2\">41<\/div>\n<div class=\"line number42 index41 alt1\">42<\/div>\n<div class=\"line number43 index42 alt2\">43<\/div>\n<div class=\"line number44 index43 alt1\">44<\/div>\n<div class=\"line number45 index44 alt2\">45<\/div>\n<div class=\"line number46 index45 alt1\">46<\/div>\n<div class=\"line number47 index46 alt2\">47<\/div>\n<div class=\"line number48 index47 alt1\">48<\/div>\n<div class=\"line number49 index48 alt2\">49<\/div>\n<div class=\"line number50 index49 alt1\">50<\/div>\n<div class=\"line number51 index50 alt2\">51<\/div>\n<div class=\"line number52 index51 alt1\">52<\/div>\n<div class=\"line number53 index52 alt2\">53<\/div>\n<div class=\"line number54 index53 alt1\">54<\/div>\n<div class=\"line number55 index54 alt2\">55<\/div>\n<div class=\"line number56 index55 alt1\">56<\/div>\n<div class=\"line number57 index56 alt2\">57<\/div>\n<div class=\"line number58 index57 alt1\">58<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"sql plain\">USE [msdb]<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"sql plain\">GO<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"sql keyword\">BEGIN<\/code> <code class=\"sql keyword\">TRANSACTION<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"sql keyword\">DECLARE<\/code> <code class=\"sql plain\">@ReturnCode <\/code><code class=\"sql keyword\">INT<\/code> <code class=\"sql plain\">= 0;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"sql keyword\">DECLARE<\/code> <code class=\"sql plain\">@jobId <\/code><code class=\"sql keyword\">BINARY<\/code><code class=\"sql plain\">(16)<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"sql keyword\">EXEC<\/code> <code class=\"sql plain\">@ReturnCode =&nbsp; msdb.dbo.sp_add_job @job_name=N<\/code><code class=\"sql string\">'DBA_MAINTENANCE_BACKUP_HISTORY'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@enabled=1, <\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@notify_level_eventlog=0, <\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@notify_level_email=0, <\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@notify_level_netsend=0, <\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@notify_level_page=0, <\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@delete_level=0, <\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@description=N<\/code><code class=\"sql string\">'Purge backup history'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@category_name=N<\/code><code class=\"sql string\">'Database Maintenance'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@owner_login_name=N<\/code><code class=\"sql string\">'sa'<\/code><code class=\"sql plain\">, @job_id = @jobId <\/code><code class=\"sql keyword\">OUTPUT<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"sql plain\">IF (@@ERROR &lt;&gt; 0 <\/code><code class=\"sql color1\">OR<\/code> <code class=\"sql plain\">@ReturnCode &lt;&gt; 0) <\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">QuitWithRollback<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"sql keyword\">EXEC<\/code> <code class=\"sql plain\">@ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N<\/code><code class=\"sql string\">'DBA_MAINTENANCE_BACKUP_HISTORY_STEP'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@step_id=1, <\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@cmdexec_success_code=0, <\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@on_success_action=1, <\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@on_success_step_id=0, <\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@on_fail_action=2, <\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@on_fail_step_id=0, <\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@retry_attempts=0, <\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@retry_interval=0, <\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@os_run_priority=0, @subsystem=N<\/code><code class=\"sql string\">'TSQL'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@command=N<\/code><code class=\"sql string\">'declare @retentionDate datetime = DATEADD(MONTH, -6, getdate());<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"sql string\">exec msdb.dbo.sp_delete_backuphistory @retentionDate;'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@database_name=N<\/code><code class=\"sql string\">'msdb'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@flags=0<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"sql plain\">IF (@@ERROR &lt;&gt; 0 <\/code><code class=\"sql color1\">OR<\/code> <code class=\"sql plain\">@ReturnCode &lt;&gt; 0) <\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">QuitWithRollback<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><code class=\"sql keyword\">EXEC<\/code> <code class=\"sql plain\">@ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1<\/code><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"sql plain\">IF (@@ERROR &lt;&gt; 0 <\/code><code class=\"sql color1\">OR<\/code> <code class=\"sql plain\">@ReturnCode &lt;&gt; 0) <\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">QuitWithRollback<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"sql keyword\">EXEC<\/code> <code class=\"sql plain\">@ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @<\/code><code class=\"sql keyword\">name<\/code><code class=\"sql plain\">=N<\/code><code class=\"sql string\">'WeeklySchedule_Sunday_10pm'<\/code><code class=\"sql plain\">, <\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@enabled=1, <\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@freq_type=8, <\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@freq_interval=1, <\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@freq_subday_type=1, <\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@freq_subday_interval=0, <\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@freq_relative_interval=0, <\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@freq_recurrence_factor=1, <\/code><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@active_start_date=20210422, <\/code><\/div>\n<div class=\"line number46 index45 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@active_end_date=99991231, <\/code><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@active_start_time=220000, <\/code><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@active_end_time=235959, <\/code><\/div>\n<div class=\"line number49 index48 alt2\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">@schedule_uid=N<\/code><code class=\"sql string\">'f41b6a99-3d5d-49d7-871b-5e8a9ac2c0eb'<\/code><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"sql plain\">IF (@@ERROR &lt;&gt; 0 <\/code><code class=\"sql color1\">OR<\/code> <code class=\"sql plain\">@ReturnCode &lt;&gt; 0) <\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">QuitWithRollback<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"sql keyword\">EXEC<\/code> <code class=\"sql plain\">@ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N<\/code><code class=\"sql string\">'(local)'<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><code class=\"sql plain\">IF (@@ERROR &lt;&gt; 0 <\/code><code class=\"sql color1\">OR<\/code> <code class=\"sql plain\">@ReturnCode &lt;&gt; 0) <\/code><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">QuitWithRollback<\/code><\/div>\n<div class=\"line number53 index52 alt2\"><code class=\"sql keyword\">COMMIT<\/code> <code class=\"sql keyword\">TRANSACTION<\/code><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"sql keyword\">GOTO<\/code> <code class=\"sql plain\">EndSave<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><code class=\"sql plain\">QuitWithRollback:<\/code><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"sql spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"sql plain\">IF (@@TRANCOUNT &gt; 0) <\/code><code class=\"sql keyword\">ROLLBACK<\/code> <code class=\"sql keyword\">TRANSACTION<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"sql plain\">EndSave:<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"sql plain\">GO<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n\n\n<p>Written by <a href=\"https:\/\/www.linkedin.com\/in\/steven-naudet-aa540158\/\">Steven Naudet<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week I noticed some slowness on queries related to backup history. The instance had a huge msdb database (more than 10GB size), the backup history had never been purged. I already wrote a post on this topic and provided a small PowerShell script using dbatools to clean the backup history. The issue with sp_delete_backuphistory [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,99],"tags":[1887,2550,521,533],"type_dbi":[],"class_list":["post-16093","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-sql-server","tag-backup-history","tag-sql-server-2","tag-t-sql","tag-transaction-log"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL Server: How to delete the msdb backup history kindly - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server: How to delete the msdb backup history kindly\" \/>\n<meta property=\"og:description\" content=\"This week I noticed some slowness on queries related to backup history. The instance had a huge msdb database (more than 10GB size), the backup history had never been purged. I already wrote a post on this topic and provided a small PowerShell script using dbatools to clean the backup history. The issue with sp_delete_backuphistory [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-22T17:46:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T09:52:38+00:00\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server: How to delete the msdb backup history kindly\",\"datePublished\":\"2021-04-22T17:46:11+00:00\",\"dateModified\":\"2025-10-01T09:52:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\"},\"wordCount\":305,\"commentCount\":0,\"keywords\":[\"Backup history\",\"SQL Server\",\"T-SQL\",\"transaction log\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\",\"name\":\"SQL Server: How to delete the msdb backup history kindly - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2021-04-22T17:46:11+00:00\",\"dateModified\":\"2025-10-01T09:52:38+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server: How to delete the msdb backup history kindly\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server: How to delete the msdb backup history kindly - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server: How to delete the msdb backup history kindly","og_description":"This week I noticed some slowness on queries related to backup history. The instance had a huge msdb database (more than 10GB size), the backup history had never been purged. I already wrote a post on this topic and provided a small PowerShell script using dbatools to clean the backup history. The issue with sp_delete_backuphistory [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/","og_site_name":"dbi Blog","article_published_time":"2021-04-22T17:46:11+00:00","article_modified_time":"2025-10-01T09:52:38+00:00","author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server: How to delete the msdb backup history kindly","datePublished":"2021-04-22T17:46:11+00:00","dateModified":"2025-10-01T09:52:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/"},"wordCount":305,"commentCount":0,"keywords":["Backup history","SQL Server","T-SQL","transaction log"],"articleSection":["Database Administration &amp; Monitoring","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/","url":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/","name":"SQL Server: How to delete the msdb backup history kindly - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2021-04-22T17:46:11+00:00","dateModified":"2025-10-01T09:52:38+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-how-to-delete-the-msdb-backup-history-kindly\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server: How to delete the msdb backup history kindly"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/16093","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=16093"}],"version-history":[{"count":3,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/16093\/revisions"}],"predecessor-version":[{"id":40607,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/16093\/revisions\/40607"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=16093"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=16093"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=16093"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=16093"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}