Jak naprawić błędy optymalizacji zestawu SQL Server i wyczerpanie pamięci?

9

Usługa optymalizacji środowiska uruchomieniowego .NET ( mscorsvw) zużywa całą pamięć mojej stacji roboczej od czasu zainstalowania dodatku Service Pack 1 dla programu SQL Server 2012.

Zużywa około 1,6 GB pamięci przed wyczerpaniem całej dostępnej pamięci:

Usługa optymalizacji środowiska uruchomieniowego .NET zużywa całą dostępną pamięć na mojej stacji roboczej.

Mogę zabić proces, ale zdarza się to ponownie, gdy ponownie uruchamiam komputer lub czekam wystarczająco długo.

Techdows sugeruje użycie .NET Native Image Generator ( ngen) do rozwiązania problemu.

Wysunąłem wiersz polecenia i uruchomiłem następujące polecenia:

cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319.1
ngen executeQueuedItems

Zużycie pamięci mscorsvwspadło do około 20-30 MB i ngenzużyło całą pozostałą pamięć.

ngengenerowałem tylko komunikaty o błędach, dopóki nie zabiłem procesu. Pierwsze kilka wierszy wyniku wyglądało tak:

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)

Wszystkie komunikaty mówią, że system nie mógł znaleźć zestawu lub że definicja manifestu nie pasuje do odwołania.

Aby obejść ten problem, wyłączyłem Usługi Windows clr_optimization_v4.0.30319_32i clr_optimization_v4.0.30319_64.

To ukrywa problem, zamiast go rozwiązać, i powstrzymuje optymalizację wszystkich zestawów .NET.

Co jeszcze mogę spróbować rozwiązać ten problem?

Iain Samuel McLean Elder
źródło
Czy próbowałeś ponownie zainstalować środowisko uruchomieniowe .Net?
Max Vernon,
@MaxVernon Jeszcze nie. To może chwilę potrwać. Spróbuję tego w przyszłym tygodniu, jeśli żadne inne rozwiązanie się nie pojawi.
Iain Samuel McLean Starszy
Najwyraźniej nie tak długo, jak uzyskanie kolejnej odpowiedzi. Czy próbowałeś ponownie zainstalować?
Max Vernon,

Odpowiedzi:

9

Ten problem jest opisany w programie Connect (patrz Procesy msiexec.exe nadal działają po instalacji programu SQL Server 2012 z dodatkiem SP1 ), a poprawka jest dostępna pod adresem KB2793634 . Istnieje komentarz dotyczący obejścia problemu w Connect i tym blogu, jeśli nie możesz natychmiast zainstalować poprawki.

Zdecydowałem się skonfigurować 2 skrypty. Pierwszy skrypt jest uruchamiany codziennie o 1 w nocy i ustawiony na zakończenie po 1 godzinie wykonania

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

Drugi skrypt jest uruchamiany codziennie o 3 nad ranem (i przy każdym ponownym uruchomieniu komputera):

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

W ten sposób nadal otrzymuję zadania optymalizacji kompilacji (uruchamiane tylko poza godzinami szczytu), ale proces mscorsvw/ msiexecjest oswojony.

Paweł
źródło
Nie testowałem twoich skryptów. Na mojej stacji roboczej byłem w stanie natychmiast zainstalować poprawkę i to rozwiązało mój problem! Dzięki za referencje.
Iain Samuel McLean Starszy