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 😀