Не удалось очистить очередь 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 ответ
- Остановить агент SQL Server
- Настройте запуск вручную (с помощью диспетчера конфигурации SQL Server)
- По возможности перезапустите SQL Server.
- Попробуйте выполнить:
DECLARE @GETDATE datetime
SET @GETDATE = GETDATE();
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @GETDATE;
GO
Это должно удалить их все. Причина, по которой я упомянул об остановке агента, заключается в том, что он не заблокирует их и не остановит их удаление.
- Верните агенту автозапуск.
- Перезапустить агент
И, надеюсь, писем не будет. Вам также нужно будет проверить все, что находится в очереди на почтовом сервере.
Надеюсь, это поможет.