Не удалось очистить очередь sysmail SQL Server

Прошлой ночью из-за плохого кода мой SQL Server попытался отправить миллион писем. После 10к письма начали идти в очередь. Я немедленно остановил службу sysmail, используя exec sysmail_stop_sp.

Затем я удалил все записи из sysmail_allitems, sysmail_faileditems, sysmail_send_retries, sysmail_senditems а также sysmail_unsentitems.

Я также очистил sysmail_event_log.

Предполагая, что это очистит мою очередь почты, я запустил службы sysmail, используя

exec sysmail_start_sp

Но, к моему удивлению, sysmail все еще пытается отправлять электронные письма, но не может их найти в sysmail_allitems.

Я проверил почтовую очередь с помощью msdb.dbo.sysmail_help_queue_sp и он показывает очередь с queue_type 'mail', показывающую очередь из миллиона писем.

Я перепроверил все таблицы, и все они пусты. Где эта очередь выбирается?

Хотя электронное письмо не было отправлено, сервер все равно проверял каждое письмо, которое длилось несколько часов.

Есть идеи, откуда берется очередь?

1 ответ

  1. Остановить агент SQL Server
  2. Настройте запуск вручную (с помощью диспетчера конфигурации SQL Server)
  3. По возможности перезапустите SQL Server.
  4. Попробуйте выполнить:
DECLARE @GETDATE datetime  
SET @GETDATE = GETDATE();  
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @GETDATE;  
GO 

Это должно удалить их все. Причина, по которой я упомянул об остановке агента, заключается в том, что он не заблокирует их и не остановит их удаление.

  1. Верните агенту автозапуск.
  2. Перезапустить агент

И, надеюсь, писем не будет. Вам также нужно будет проверить все, что находится в очереди на почтовом сервере.

Надеюсь, это поможет.

Другие вопросы по тегам