Limpando anexos e e-mails do banco de dados MSDB no SQL Server

Pessoal, hoje irei falar como expurgar de forma simples e eficiente os dados da tabela [dbo]. sysmail_attachments] do banco de dados MSDB!

Muitas pessoas utilizam o SQL Server para fazer o envio de e-mail e junto com as mensagens são enviados anexos de todos os tipos: pdf, jpg, doc, ppt, etc. Esses anexos, se não forem expurgados acabam por aumentar o tamanho do banco, conforme visto na imagem abaixo:

Lista dos tamanhos de backups da base MSDB nos últimos 10 dias

Um rápido relatório na base de dados mostrou que a tabela com maior utilização de espaço é a sysmail_attachments com exatos 15.1 GB:

Para fazer a limpeza, vamos utilizar a procedure sysmail_delete_mailitems_sp que já é disponibilizada na instalação do SQL Server e está residente no banco de dados MSDB.

O comando abaixo foi utilizado para realizar a limpeza:

use msdb
EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before='2020-10-25 00:00:00'

E que por “debaixo dos panos” executa esse simples delete na base:

DELETE FROM msdb.dbo.sysmail_allitems
WHERE
((@sent_before IS NULL) OR ( send_request_date < @sent_before))
AND ((@sent_status IS NULL) OR (sent_status = @sent_status))

E o andamento da limpeza pode ser acompanhada através do script:

SELECT count(*)
FROM [msdb].[dbo].[sysmail_attachments] (nolock)

Ao término da execução, foram expurgados 67041 registros:

E a tabela ocupou apenas 284MB de espaço na base MSDB:

Como uma boa prática, sugiro que seja criado um JOB para limpeza dessa tabela passando uma data dinâmica, como por exemplo a query abaixo:

use msdb
declare @data datetime = getdate()-10
EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @data

É isso! Qualquer dúvida, sugestão ou elogio, deixe um comentário 😀

Deixe uma resposta

Seu e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

×