自从我安装 SQL Server 2012 Service Pack 1 以来,.NET 运行时优化服务 ( mscorsvw
) 一直占用我所有工作站的内存。
在耗尽所有可用内存之前,它会消耗大约 1.6 GB 的内存:
我可以终止该进程,但是当我重新启动计算机或等待足够长的时间时,它会再次发生。
Techdows建议使用 .NET Native Image Generator ( ngen
) 来解决这个问题。
我打开了一个命令提示符并运行了如下命令:
cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319.1
ngen executeQueuedItems
内存消耗mscorsvw
下降到大约 20-30 MB,并ngen
消耗了所有剩余的内存。
ngen
在我终止进程之前只生成错误消息。输出的前几行如下所示:
Microsoft (R) CLR Native Image Generator - Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Failed to load dependency Microsoft.DataWarehouse of assembly
Microsoft.SqlServer.MaintenancePlanTasks, Version=11.0.0.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91 because of the following error : The system
cannot find the file specified. (Exception from HRESULT: 0x80070002)
Failed to load dependency Microsoft.VisualStudio.DataTools.Interop of assembly
Microsoft.DataWarehouse, Version=11.0.0.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91 because of the following error : The system
cannot find the file specified. (Exception from HRESULT: 0x80070002)
Failed to load dependency Microsoft.Data.ConnectionUI of assembly
Microsoft.DataWarehouse, Version=11.0.0.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91 because of the following error : The located
assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)
所有消息都说系统找不到程序集,或者清单定义与引用不匹配。
作为一种解决方法,我禁用了 Windows 服务clr_optimization_v4.0.30319_32
和clr_optimization_v4.0.30319_64
.
这隐藏了问题而不是解决问题,并阻止了所有 .NET 程序集的优化。
我还能尝试什么来解决这个问题?
此问题在 Connect 上进行了描述(请参阅安装 SQL Server 2012 SP1 后 msiexec.exe 进程继续运行),并且在KB2793634中提供了修补程序。如果您无法立即安装修补程序, Connect 帖子和此博客中列出了解决方法。
我选择设置 2 个脚本。第一个脚本每天凌晨 1 点运行,并设置为在执行 1 小时后终止
第二个脚本每天凌晨 3 点运行(以及每当计算机重新启动时):
这样我仍然可以获得编译优化作业(仅在非高峰时间运行),但
mscorsvw
/msiexec
过程被驯服。