如何修复SQL Server程序集优化错误和内存耗尽?


9

mscorsvw自从我安装SQL Server 2012 Service Pack 1以来,.NET运行时优化服务()一直消耗着我所有工作站的内存。

在耗尽所有可用内存之前,它将消耗约1.6 GB的内存:

.NET Runtime Optimization Service占用了我工作站上的所有可用内存。

我可以取消该过程,但是当我重新启动计算机或等待足够长的时间后,它会再次发生。

Techdows建议使用.NET本机图像生成器(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_32clr_optimization_v4.0.30319_64

这隐藏了问题而不是解决了问题,并阻止了所有.NET程序集的优化。

我还能尝试解决什么问题?


您是否尝试过重新安装.Net运行时?
Max Vernon

@MaxVernon尚未。可能要花一些时间。如果没有其他解决方案,我将在下周尝试。
伊恩·塞缪尔·麦克莱恩

显然,只要没有其他答案。您是否尝试过重新安装?
Max Vernon

Answers:


9

在Connect上描述了此问题(请参阅msiexec.exe进程在安装SQL Server 2012 SP1后保持运行),并且在KB2793634上提供了修补程序。如果您无法立即安装此修补程序,则在Connect此博客上有关于变通办法的评论。

我选择设置2个脚本。第一个脚本每天凌晨1点运行,并设置为在执行1小时后终止

c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executequeueditems
c:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executequeueditems
c:\windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executequeueditems 
c:\windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executequeueditems

第二个脚本每天凌晨3点运行(每当计算机重新启动时):

c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe queue pause
c:\windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe queue pause

这样,我仍然可以获得编译优化作业(仅在非高峰时段运行),但是mscorsvw/ msiexec进程被驯服了。


我还没有测试过您的脚本。在我的工作站上,我能够立即安装此修复程序,它已经解决了我的问题!感谢您的参考。
伊恩·塞缪尔·麦克莱恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.