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:

[code lang=”sql”]
use msdb
EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before=’2020-10-25 00:00:00′
[/code]

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

[code lang=”sql”]
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))
[/code]

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

[code lang=”sql”]
SELECT count(*)
FROM [msdb].[dbo].[sysmail_attachments] (nolock)
[/code]

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:

[code lang=”sql”]
use msdb
declare @data datetime = getdate()-10
EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @data
[/code]

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

Leonardo Pedroso

Leonardo Pedroso

Profissional de TI experiência em administração de banco de dados: SQL Server 2000 a 2019, Oracle 11g a 19c, PostgreSQL, MySQL, MongoDB, Cassandra. Atua realizando análise de desempenho, DR e HA, implantação, administração de banco de dados em cluster e implementação de projetos de banco de dados NoSQL (MongoDB, Cassandra), bem como automação de processos utilizando Shell script, Powershell (dbatools), e players de Cloud: Azure e Aws.