2

昨晚由于一些错误的代码,我的 SQL Server 尝试发送一百万封电子邮件。10k 之后,电子邮件开始进入队列。我立即使用 exec sysmail_stop_sp 停止了 sysmail 服务。

sysmail_allitems然后我从、sysmail_faileditemssysmail_send_retriessysmail_senditems中删除了所有条目sysmail_unsentitems

我也清零了sysmail_event_log

假设它会清除我的邮件队列,我使用启动 sysmail 服务

exec sysmail_start_sp

但令我惊讶的是,sysmail 仍在尝试发送电子邮件,但在sysmail_allitems.

我使用检查了邮件队列msdb.dbo.sysmail_help_queue_sp,它显示了队列类型为“邮件”的队列,显示了那百万封电子邮件队列。

我重新检查了所有的桌子,它们都是空的。这个队列在哪里被提取?

虽然没有发送电子邮件,但服务器仍然尝试了持续几个小时的每一封电子邮件。

知道从哪里获取队列吗?

4

1 回答 1

0
  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. 重启代理

并且希望不会有大量电子邮件出现。您还必须检查邮件服务器中排队的任何内容。

希望有帮助。

于 2019-09-22T11:29:01.510 回答