Bagaimana cara memperbaiki kesalahan optimisasi perakitan SQL Server dan kehabisan memori?

9

.NET Runtime Optimization Service ( mscorsvw) terus menggunakan semua memori workstation saya sejak saya menginstal SQL Server 2012 Paket Layanan 1.

Ini mengkonsumsi sekitar 1,6 GB memori sebelum menghabiskan semua memori yang tersedia:

Layanan .NET Runtime Optimization mengkonsumsi semua memori yang tersedia di workstation saya

Saya bisa mematikan prosesnya, tetapi itu terjadi lagi ketika saya me-restart komputer saya atau menunggu cukup lama.

Techdows menyarankan penggunaan .NET Native Image Generator ( ngen) untuk menyelesaikan masalah.

Saya membuka Command Prompt dan menjalankan perintah seperti ini:

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

Konsumsi memori mscorsvwturun menjadi sekitar 20-30 MB, dan ngenmenghabiskan semua memori yang tersisa.

ngenhanya menghasilkan pesan kesalahan sampai saya menghentikan proses. Beberapa baris pertama output tampak seperti ini:

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)

Semua pesan mengatakan bahwa sistem tidak dapat menemukan rakitan, atau bahwa definisi manifes tidak cocok dengan referensi.

Sebagai solusinya, saya telah menonaktifkan Layanan Windows clr_optimization_v4.0.30319_32dan clr_optimization_v4.0.30319_64.

Ini menyembunyikan masalah daripada menyelesaikannya, dan menghentikan semua .NET majelis agar tidak dioptimalkan.

Apa lagi yang bisa saya coba untuk menyelesaikan masalah ini?

Iain Samuel McLean Elder
sumber
Sudahkah Anda mencoba menginstal ulang .Net runtime?
Max Vernon
@ MaxVernon Belum. Itu bisa memakan waktu cukup lama. Saya akan mencobanya minggu depan jika tidak ada solusi lain yang muncul.
Iain Samuel McLean Elder
Ternyata, tidak selama mendapat jawaban lain. Apakah Anda mencoba menginstal ulang?
Max Vernon

Jawaban:

9

Masalah ini dijelaskan pada Connect (lihat proses msiexec.exe tetap berjalan setelah instalasi SQL Server 2012 SP1 ) dan perbaikan terbaru tersedia di KB2793634 . Ada komentar tentang penyelesaian di Connect dan blog ini jika Anda tidak dapat segera menginstal perbaikan terbaru.

Saya memilih untuk menyiapkan 2 skrip. Skrip 1 beroperasi setiap hari pada jam 1 pagi, dan ditetapkan untuk berakhir setelah 1 jam eksekusi

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

Skrip ke-2 berjalan setiap hari pada jam 3 pagi (dan kapan pun komputer dinyalakan kembali):

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

Dengan cara ini saya masih mendapatkan kompilasi pekerjaan optimasi (hanya berjalan selama jam sibuk), tetapi proses mscorsvw/ msiexecdijinakkan.

Paul
sumber
Saya belum menguji skrip Anda. Di workstation saya, saya dapat menginstal perbaikan terbaru segera, dan itu telah memecahkan masalah saya! Terima kasih untuk referensi.
Iain Samuel McLean Penatua