SQL Server 代理启动自我终止

SQL*_*DBA 9 sql-server sql-server-2012 sql-server-agent

在过去的一个月里,我的一台服务器遇到了 SQL Server 代理问题。它会自动停止并出现以下错误,这是随机发生的:

Sql 代理输出文件
[097] 检测到内存泄漏 [204 字节]
在文件 e:\sql9_sp2_t\sql\komodo\src\core\sqlagent\src\alerter.cpp 的第 403 行捕获到异常 5。SQLServerAgent 启动自我终止

我用谷歌搜索了这个错误,但没有得到太多关于它的信息。SQL Server 和代理都使用相同的域帐户运行;但是,问题仅与 SQL Server 代理服务有关。

我也无法在 SQL Server 配置管理器中看到 SQL Server 代理服务。我检查了 SQL Server 错误日志和 Windows 事件查看器日志,但没有看到任何可疑活动。

我的内存设置配置正确。服务器有 32GB RAM,SQL Server 被分配使用 26GB 的最大内存。

系统详情:

  • SQL Server 2012 SP2 标准版 11.0.5058 64 位
  • Windows Server 2008 R2 Ent Edition 64 位
  • 专用于 SQL Server(服务器上没有运行其他应用程序)
  • 服务器几个月前从 SQL Server 2005 EE 升级到 2012 SE。
  • 我们没有使用事件转发服务器

我也检查了msdb数据库。运行 checkdb 并成功完成,没有任何错误。我需要你的帮助来解决两件事:

  1. 修复 SQL Server 代理服务随机停止的问题
  2. 在 SQL Server 配置管理器中添加 SQL Server 代理服务

我们有第三方软件进行监控,因此如果代理服务停止,我们会立即收到通知。现在我们只是重新启动服务。但我们想找到根本原因。

我运行了 Sean Gallardy 建议的以下查询并返回了 95 行。我不知道如何解释结果。

select * 
from sys.dm_os_loaded_modules 
where name not like '%microsoft%'
Run Code Online (Sandbox Code Playgroud)

不幸的是,出于安全原因,我无法发布结果。

在找到此问题的解决方案之前,我已向 SQL Server 代理添加了重试尝试,以便它在停止时可以自动重新启动。

sta*_*ray 1

由于您最近几个月前从 SQL Server 2005 EE 升级到 2012 SE,因此您应该保存并清除事件日志,因为 SqlAgent 在看到来自较旧版本 SQL Server 的事件日志 ID 时可能会崩溃。例如,代理可能会崩溃,因为它读取了早于当前版本的 SQL Server 版本记录的事件,该事件仅包含具有一个插入字符串的数据,并且代理将尝试使用需要两个字符串的最新资源信息对其进行格式化。这会导致在关闭之前发生短暂的内存泄漏,因为为崩溃发生时尝试打印到的字符串分配了一个缓冲区。

至于配置管理器中未列出的代理服务,有多种可能性: https: //support.microsoft.com/en-us/kb/941823

确保您正在运行 2012 Configuration Manager

您可以尝试重建 WMI 存储库: https://blogs.technet.microsoft.com/askperf/2009/04/13/wmi-rebuilding-the-wmi-repository/