Nr błędu: 119532 (Obsługa zawartości)
Błąd programu VSTS numer: 344705
Błąd programu VSTS numer: 365477
Błąd programu VSTS numer: 365476

Microsoft rozpowszechnia poprawki programu Microsoft SQL Server 2005 jako jeden plik do pobrania. Ponieważ poprawki są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2005 Release. Microsoft rozpowszechnia poprawki programu Microsoft SQL Server 2008 jako jeden plik do pobrania. Ponieważ poprawki są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 Release.

Objawy

Użyj replikacji scalania programu SQL Server 2005 lub SQL Server 2008 scalania replikacji z synchronizacji sieci Web na podstawie subskrybenta. Występuje przeciek pamięci po synchronizacji powtarzające się i "Brak pamięci" błędy mogą się pojawić po upływie pewnego czasu. To staje się zauważalne podczas procesu hosta nie zostanie ponownie uruchomiony przez długi czas, na przykład gdy używany jest Agent korespondencji seryjnej (Replmerg.exe) z przełącznikiem ciągłe lub gdy określono parametr ciągły w profilu agenta, który jest stosowany do agenta. Ten problem może również wpływać na RMO aplikacja lub usługa, która zostanie opracowany uruchamiana synchronizacja w pętli, gdy aplikacja zostanie uruchomiona przez kilka dni bez zamykania okna.

Przyczyna

Podczas każdej synchronizacji są przecieku kilka wewnętrzne obiekty.

Rozwiązanie

SQL Server 2005 z dodatkiem Service Pack 3


Poprawkę dotyczącą tego problemu został wydany w zbiorczej aktualizacji 6 dla dodatku Service Pack 3 dla programu SQL Server 2005. Aby uzyskać więcej informacji na temat tego pakietu aktualizacji zbiorczej kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

974648 skumulowany pakiet 6 aktualizacji dla dodatku Service Pack 3 dla programu SQL Server 2005Uwaga Ponieważ są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2005 ustalić wersji. Firma Microsoft zaleca, aby rozważyć zastosowanie najnowszej wersji poprawki, zawierający tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

960598 SQL Server 2005 tworzy wydane po wydaniu dodatku Service Pack 3 dla programu SQL Server 2005.
Microsoft SQL Server 2005 poprawki są tworzone dla określonych dodatków service Pack dla programu SQL Server. Do instalacji dodatku Service Pack 3 dla programu SQL Server 2005, należy zastosować poprawkę dodatku Service Pack 3 dla programu SQL Server 2005. Domyślnie wszystkie poprawki, która jest dostępna w dodatku service pack dla programu SQL Server znajduje się w następnym dodatku service pack dla programu SQL Server.

Wersja programu SQL Server 2008

Ważne Jeśli używasz wersji programu SQL Server 2008, należy zainstalować tę poprawkę.

Poprawkę dotyczącą tego problemu został wydany 8 aktualizacja zbiorcza. Aby uzyskać więcej informacji dotyczących sposobu uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2008 kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

975976 skumulowany pakiet 8 aktualizacji dla programu SQL Server 2008Uwaga Ponieważ są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 Release. Firma Microsoft zaleca, aby rozważyć zastosowanie najnowszej wersji poprawki, zawierający tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

956909 program SQL Server 2008 buduje wydane po wydaniu programu SQL Server 2008

Dodatek Service Pack 1 dla programu SQL Server 2008

Ważne Jeśli używasz dodatku Service Pack 1 dla programu SQL Server 2008, należy zainstalować tę poprawkę.


Poprawkę dotyczącą tego problemu został wydany w zbiorczej aktualizacji 5 dla programu SQL Server 2008 z dodatkiem Service Pack 1. Aby uzyskać więcej informacji na temat tego pakietu aktualizacji zbiorczej kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

975977 skumulowany pakietu aktualizacji 5 dla programu SQL Server 2008 z dodatkiem Service Pack 1Uwaga Ponieważ są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniego programu SQL Server 2008 Release. Firma Microsoft zaleca, aby rozważyć zastosowanie najnowszej wersji poprawki, zawierający tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

970365 SQL Server 2008 buduje wydane po wydaniu dodatku Service Pack 1 dla programu SQL Server 2008
Microsoft SQL Server 2008 poprawki są tworzone dla określonych dodatków service Pack dla programu SQL Server. Do instalacji programu SQL Server 2008 z dodatkiem Service Pack 1, należy zastosować poprawkę dodatku Service Pack 1 dla programu SQL Server 2008. Domyślnie wszystkie poprawki, która jest dostępna w dodatku service pack dla programu SQL Server znajduje się w następnym dodatku service pack dla programu SQL Server.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Obejście problemu

Aby obejść ten problem, użyj jednej z następujących metod:

Metoda 1

Jeśli używasz agenta korespondencji seryjnej w trybie ciągłym, okresowo zatrzymania procesu agenta korespondencji seryjnej i uruchom go ponownie.

Na przykład otrzymujesz błędy "Brak pamięci" po pięciu dniach i scalić agenta jest zaplanowane jako zadanie. Następnie możesz zaplanować nowe zadanie agenta programu SQL Server w celu wywołania sp_stop_job następuje sp_start_job , określając nazwę zadania agenta korespondencji seryjnej cyklu procesu usterce co pięć dni. Po zatrzymaniu procesu agenta korespondencji seryjnej (Replmerg.exe), ukaże się wszelkie przecieku pamięci w obszarze pamięci procesu.

Aby uzyskać więcej informacji na temat użycia - ciągłego przełącznika na scalanie agenta, zobacz następującą witrynę Microsoft Developer Network (MSDN) w sieci Web:

http://msdn.microsoft.com/en-us/library/ms147839.aspx

sp_stop_job http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx

sp_start_job http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx

Metoda 2

Jeśli korzystasz z zadania agenta korespondencji seryjnej, może skonfigurować ręczne logiki pętli wewnątrz zadania za pomocą dodatkowych kroków, zamiast polegać na ciągłe parametr. Zamiast procesu scalania jednego agenta, zapętlenie wewnętrznie na zawsze w sposób ciągły należy zaplanować agenta korespondencji seryjnej jako krok zadanie, który powtarza się na częste takich jak raz na minutę. Proces zakończy działanie między ponownymi próbami, i zwalnia wszelkie przecieku pamięci.
Edytuj zadanie tak, aby kroki należy powtórzyć w pętli z pauzę między powtarza agenta korespondencji seryjnej.

  1. Po wykonaniu kroku [3] "Wykrywać zamknięcia nonlogged agenta," Dodaj nowy etap [4] o nazwie "Nieokreślony pętla ponawiania." Ustaw typ TSQL i polecenie "waitfor opóźnienie ' 0: 00:05" ", to opóźnienie TSQL zapewni 5 pauza drugiego, który można skonfigurować jako interwał sondowania w taki sposób, że agent korespondencji seryjnej będzie Zatrzymaj się na chwilę między wykonania i nie ciągłej pracy. Na karcie Zaawansowane określić "Na sukces akcję" jako "Przejdź do kroku [2] Uruchom agenta" i "Na akcja po niepowodzeniu" jako "Przejdź do kroku [2] Uruchom agenta."

  2. Edytuj etap [2] uruchamiania agenta do upewnij się, że zostanie osiągnięty pętli krok [4]. Na karcie Zaawansowane w kroku [2], należy ustawić na powodzenie akcji "Przejdź do kroku: [4] nieokreślony pętli ponownych prób" i ustawić akcję On awarii "Przejdź do następnego kroku."

  3. Edytuj etap [3] "Shutdown agenta nonlogged Wykryj" Aby upewnić się, że osiągnięciu pętli w kroku [4]. Na karcie Zaawansowane w kroku [3] należy ustawić na powodzenie akcji "Przejdź do następnego kroku". Można również zdecydować, czy ma krok [3] na niepowodzenie działania można ustawić jako "Przejdź do następnego kroku" lub "Zamknij zadania raportowania błędu." Jeśli jest ono skonfigurowane do Zamknij, pokaże zadania awarii w replikacji i monitorze zadania. Jeśli jest skonfigurowany w przypadku awarii, aby przejść do kroku czwartego pętli, agent korespondencji seryjnej może ponownie przez czas nieokreślony, a błędy są rejestrowane przez czas nieokreślony.

Metoda 3

Podobnie jeśli aplikacja RMO umożliwia wywołanie metody MergeSynchronizationAgent.Synchronize() , która synchronizuje baza danych subskrybenta w pętli, Zatrzymaj i uruchom ponownie proces okresowo, aby zwolnić wszystkie pamięci, która jest przecieku z powodu tego problemu.
Aby uzyskać więcej informacji na temat tego obiektu i metoda, zobacz następującą witrynę Microsoft Developer Network (MSDN) w sieci Web: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx

Więcej informacji

Informacje stosu wywołań

Przeciek pamięci 1


Ten przeciek pamięci w domyślnej sterty. Domyślnej sterty staje się bardzo pofragmentowane z powodu przecieków ciąg małych 32 bajtów.0:000> !heapstats 0 -sHeap=0x00140000 BusyCount=1380235 BusyBytes=55115099
Found allocations in range of 0->151496 bytes.
Largest count is 850531 for memory blocks of size 32
Largest bytes used is 27216992 bytes for memory blocks of size 32

Size Count Total Percent Of Maximum Allocation Size In Range
------ ------ -------- ----------------------------------------------------------------------------------------------------
32 850531 27216992 ****************************************************************************************************
48 306892 14730816 ******************************************************
64 100583 6437312 ***********************
16 93995 1503920 *****
80 11068 885440 ***
151496 3 454488 *
256 1386 354816 *
160 1866 298560 *
904 131 118424

W tym przykładzie alokacje 32 bajtów dodać zobowiązała się do 27 MB. Jednak domyślnej sterty ma duże rezerwacji, częściowo, ponieważ obiekty te przecieku są rozmieszczone na stercie i fragment miejsca między blokami.



Większość tych przydziałów 32 bajtów pochodzą z SysAllocString w wywołaniach kodu w przypadku, gdy nie ma żadnych SysFreeString lub Usuń wywołania.0:000> kLChildEBP RetAddr
0012b878 4c0a2f7b xmlsub!CXMLSubscriber::ReadAgentProfileParameter+0x1dd
0012b8b4 4e67a7e4 msgprox!CProxyMessageDatasource::ReadAgentProfileParameter+0x5b
0012bc18 4e6a65fe replrec!CDatabaseReconciler::UpdateAgentProfileCache+0x384
0012bda8 4e6a9281 replrec!CDatabaseReconciler::MoveChangesToDest+0x219e
0012cff8 4e6aae46 replrec!CDatabaseReconciler::CoreReconcile+0x1b01
0012d9ec 4e6ab388 replrec!CDatabaseReconciler::MessageReconcile+0x1206
0012ed90 4d1b651d replrec!CDatabaseReconciler::Reconcile+0x398
0012edd0 4dbf6331 sqlmergx!CSQLMerge::Run+0x18d
0012ede0 4de729b8 Microsoft_SqlServer_Replication!SQLMERGXLib::ISQLMerge::Run+0x11
0012ee70 4de70ed1 Microsoft_SqlServer_Replication_ni!Microsoft.SqlServer.Replication.MergeSynchronizationAgent.Run()+0x14c
0012eef8 00d2862b Microsoft_SqlServer_Replication_ni!Microsoft.SqlServer.Replication.MergeSynchronizationAgent.Synchronize()+0x71

Występuje przeciek drugiego w bibliotece C runtime sterty z replikacji powiązane obiekty COM. Ten przeciek są widoczne przez skanowanie wszystkich stert dla vftable, wskazując obiekty znajdujące się w bibliotece replrov.dll przy użyciu rozszerzenia MDACExts! tablescan.0:000> !tablescan 'x replprov!*vftable*' 0Count Total Bytes Size Address Function
-------- ----------- ------ ---------- ----------------------------------------------------------------------------------------------------
1806 43344 24 0x4c9d1868 replprov!CReplicationProvider::`vftable'
1719 13752 8 0x4c9d1858 replprov!CSupportErrorInfo::`vftable'
1806 2066064 1144 0x4c9d1ba0 replprov!CMergePublisher::`vftable'
1806 7238448 4008 0x4c9d6250 replprov!CMergeDatasource::`vftable'
1806 7238448 4008 0x4c9d61a8 replprov!CMergeDatasource::`vftable'

Jeśli nie masz skanowanie tabeli, można wyświetlić ten przeciek na podstawie rozmiarów zauważyć (24,8,1144, 4008). Aby to zrobić, uruchom następujący typ polecenia przeciwko sterty:0:000> !heapstats 0x003e0000 -s
Heap=0x003e0000 BusyCount=9363 BusyBytes=12555368
Found allocations in range of 4->8192 bytes.
Largest count is 1897 for memory blocks of size 8
Largest bytes used is 7238448 bytes for memory blocks of size 4008

Size Count Total Percent Of Maximum Allocation Size In Range
----- ----- ------- ----------------------------------------------------------------------------------------------------
4008 1806 7238448 ****************************************************************************************************
3128 900 2815200 **************************************
1144 1806 2066064 ****************************
etc...


Obiekt nadrzędny jest CReplicationProvider. Obiekty podrzędne trzy mają wskaźnikami wstecz do obiektu nadrzędnego. W związku z tym obiekty te istnieją z liczbą odwołania do siebie. Zniszczenie tych obiektów, wszystkie zliczanie odwołań należy zmniejszyć do 0. Ponieważ jeden z liczbą odwołania nie jest zmniejszany poprawnie w kodzie, cztery obiekty nie są niszczone każdym razem, gdy są tworzone wystąpienia obiektów.



Uwagi

Jeśli używasz programów do śledzenia przeciek metodę, która jest przydzielona 3 4 przecieku obiekty jest "replprov! CReplicationProvider::InitInstance".



Wywołanie nowy na CReplicationProvider, sama jest obiektem 4.



Przeciek pamięci 2


Inne przeciek pamięci, który został rozwiązany w tej wersji używa bloków sterty o wielkości 32 bajtów i 48 bajtów i zawiera nazwy kolumn z replikowanej artykułów. Poniżej przedstawiono część tego stosu:xmlsub!CXMLSubscriberCommon::ReadNodexmlsub!CXMLSubscriberCommon::FindNamedNodeInList

Powiązane artykuły

Aby uzyskać więcej informacji o sposobach używania - ciągłego przełącznik na agenta korespondencji seryjnej, odwiedź następującą witrynę Microsoft Developer Network (MSDN) w sieci Web:

http://msdn.microsoft.com/en-us/library/ms147839.aspx
Aby uzyskać więcej informacji na temat procedury przechowywane sp_stop_job odwiedź następującą witrynę Microsoft Developer Network (MSDN) w sieci Web:

http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
Aby uzyskać więcej informacji na temat procedury przechowywanej sp_start_job odwiedź następującą witrynę Microsoft Developer Network (MSDN) w sieci Web:

http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
Aby uzyskać więcej informacji dotyczących sposobu uzyskiwania dodatku Service Pack 3 dla programu SQL Server 2005, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

913089 jak uzyskać najnowszy dodatek service pack dla programu SQL Server 2005

Aby uzyskać więcej informacji na temat nowych funkcji w dodatku Service Pack 3 (SP3) dla programu SQL Server 2005 i ulepszenia w dodatku SP3 dla programu SQL Server 2005 odwiedź następującą witrynę firmy Microsoft w sieci Web:

http://go.microsoft.com/fwlink/?LinkId=131442Aby uzyskać więcej informacji dotyczących schematu nazewnictwa dla aktualizacji programu SQL Server kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

Pakiety aktualizacji 822499 nowy schemat nazewnictwa dla oprogramowania Microsoft SQL Server

Aby uzyskać więcej informacji dotyczących terminologii aktualizacji oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft

Autor: jasonh
Scenariusz: v-jayc
Weryfikacja tech.: jasonh;
Redaktor: v-stepce

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jak zadowalająca jest jakość tłumaczenia?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×