join the MSSQLTips community

Today's Site Sponsor


 

SQL Compare quickly and easily compares and synchronizes SQL Server database schemas
 



What's slowing you down?

SQL Server Database Mail Cleanup Procedures

Written By: Ken Simmons -- 4/17/2009 -- read/post comments -- print -- Bookmark and Share

Rating: (not rated yet) Rate

Problem
I have been using Database Mail for a while and it is causing a lot of growth in my msdb database. What is the best way to delete the excess data stored in the msdb due to Database Mail?

Solution
There are two system stored procedures you can take advantage of in order to clean up Database Mail messages, attachments and log entries stored in the msdb database.   These two system stored procedures are sysmail_delete_mailitems_sp and sysmail_delete_log_sp.

You can execute the sysmail_delete_mailitems_sp stored procedure located in the msdb database to:

  • delete all mail messages
  • delete messages older than a given date
  • delete messages with a given status or
  • delete messages older than a given date with a certain status.

The complete syntax is shown below. If you execute the sysmail_delete_mailitems_sp stored procedure without any parameters, all mail messages will be deleted.

sysmail_delete_mailitems_sp
   [ [ @sent_before = ] 'sent_before' ] -- '1/1/2009'
   [ , [ @sent_status = ] 'sent_status' ] -- sent, unsent, retrying, failed

You can execute the sysmail_delete_log_sp stored procedure located in the msdb database to:

  • delete all log entries
  • delete all log entries prior to a given date
  • delete log entries for a certain event type or
  • delete delete log entries prior to a given date for a certain event type.

The complete syntax is shown below. If you execute the sysmail_delete_log_sp stored procedure without any parameters, all log entries will be deleted.

sysmail_delete_log_sp
   [ [ @logged_before = ] 'logged_before' ] --'1/1/2009'
   [, [ @event_type = ] 'event_type' ] --success, warning, error, informational

You should come up with a retention policy and schedule a job to run periodically to clean up the Database Mail history. For example, the following script will delete all mail entries older than thirty days.

DECLARE @DeleteBeforeDate DateTime = (Select DATEADD(d,-30, GETDATE()))
EXEC sysmail_delete_mailitems_sp @sent_before = @DeleteBeforeDate
EXEC sysmail_delete_log_sp @logged_before = @DeleteBeforeDate

Note: the syntax above in the first line is new for SQL 2008 where you can declare and set a value at the same time.  For SQL 2005 you would need to do this with two lines, first the DECLARE and then setting the value as follows:

DECLARE @DeleteBeforeDate DateTime 
SELECT @DeleteBeforeDate = DATEADD(d,-30, GETDATE())
EXEC sysmail_delete_mailitems_sp @sent_before = @DeleteBeforeDate
EXEC sysmail_delete_log_sp @logged_before = @DeleteBeforeDate

Next Steps
There is a lot of information logged in the msdb that requires your attention in order to prevent excessive growth such as backup and restore history and Maintenance Plan history. You should review the following tips to help you maintain a clean, manageable msdb database.

Readers Who Read This Tip Also Read Free Live Webcast Comment or Ask Questions About This Tip


Sponsor Information
Free SQL Server performance monitoring dashboard – Idera SQL check

Try SQL Object Level Recovery Native from Red Gate to save time and disk space. Download a free trial.

You don't know, what you don't know about SQL Server... Customized Consulting and Training

Become a member of the MSSQLTips community

Free whitepaper - Top 10 Things You Should Know About Optimizing SQL Server Performance


Get Our Tips Newsletter

We keep 50,000+ SQL Server professionals informed.



Red Gate Software - SQL Data Generator

Test your database until it cries… “Red Gate’s SQL Data Generator has overnight become the principal tool we use for loading test data to run our performance and load tests.” Grant Fritchey, FM Global.

Download now!

More SQL Server Tools
SQL Refactor

SQL Compare

SQL secure

SQL Prompt

SQL compliance manager




Copyright (c) 2006-2010 Edgewood Solutions, LLC All rights reserved
privacy statement | disclaimer | copyright | advertise | write for mssqltips | feedback | about
Some names and products listed are the registered trademarks of their respective owners.


CareerQandA.com | MSSharePointTips.com | MSSQLTips.com