Fehler #: 119532 (Content Maintenance)
VSTS Fehler Nummer: 344705
VSTS Fehler Nummer: 365477
VSTS Fehler Nummer: 365476

Microsoft stellt Updates für Microsoft SQL Server 2005 als downloadbare Datei. Da Updates sind kumulativ, jede neue Version alle Hotfixes enthält und alle Sicherheitsupdates, die mit früheren SQL Server 2005 wurden. Microsoft stellt Updates für Microsoft SQL Server 2008 als downloadbare Datei. Da Updates sind kumulativ, jede neue Version alle Hotfixes enthält und alle Sicherheitsupdates, die mit früheren SQL Server 2008 wurden.

Problembeschreibung

SQL Server 2005-Mergereplikation bzw. SQL Server 2008 Mergereplikation mit einer Synchronisierung von Abonnenten basiert. Ein Speicherverlust tritt nach wiederholten Synchronisationen und möglicherweise Fehlermeldungen "nicht genügend Arbeitsspeicher" nach einiger Zeit. Dadurch bemerkbar beim Neustart des Hostprozess nicht lange, wie wenn der Merge-Agent (Replmerg.exe) mit dem kontinuierlichen Schalter verwendet wird oder wenn der kontinuierliche Parameter im Profil Agenten, der auf den Agenten angewendet wird. Außerdem kann hierdurch beeinträchtigt ein RMO Anwendung oder ein Dienst, die Sie entwickelt, das bei der Anwendung für mehrere Tage ohne Synchronisierung in einer Schleife ausgeführt.

Ursache

Bei jeder Synchronisierung werden mehrere interne Objekte einen Speicherverlust.

Problemlösung

SQL Server 2005 Servicepack 3


Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 6 für SQL Server 2005 Service Pack 3 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

974648 kumulative Updatepaket 6 für SQL Server 2005 Service Pack 3Hinweis Da diese Builds kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die in früheren SQL Server 2005 enthalten waren. Microsoft empfiehlt, dass Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

960598 der SQL Server 2005 erstellt, die nach der Freigabe von SQL Server 2005 Service Pack 3 veröffentlicht wurden.
Microsoft SQL Server 2005-Hotfixes sind für bestimmte SQL Server Servicepacks erstellt. Sie müssen SQL Server 2005 Service Pack 3-Hotfix eine Installation von SQL Server 2005 Service Pack 3 anwenden. Standardmäßig ist jeder Hotfix, der in einem SQL Server Servicepack bereitgestellt wird, in einem nächsten Servicepack für SQL Server enthalten.

Die Version von SQL Server 2008

Wichtig Wenn Sie die Version von SQL Server 2008 ausführen, müssen Sie dieses Update installieren.

Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 8 veröffentlicht. Weitere Informationen zu diesem kumulativen Updatepaket für SQL Server 2008 finden Sie im folgenden Artikel der Microsoft Knowledge Base:

975976 kumulative Updatepaket 8 für SQL Server 2008Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Wir empfehlen Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

956909 die SQL Server 2008 builds, die nach der Freigabe von SQL Server 2008

SQL Server 2008 Servicepack 1

Wichtig Wenn Sie SQL Server 2008 Service Pack 1 ausführen, müssen Sie dieses Update installieren.


Die Fehlerbehebung für dieses Problem wurde zuerst im kumulativen Update 5 für SQL Server 2008 Service Pack 1 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

975977 kumulative Updatepaket 5 für SQL Server 2008 Service Pack 1Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Microsoft empfiehlt, dass Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

970365 die SQL Server 2008 builds, die nach der Freigabe von SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008-Hotfixes sind für bestimmte SQL Server Servicepacks erstellt. Sie müssen SQL Server 2008 Service Pack 1-Hotfix eine Installation von SQL Server 2008 Service Pack 1 anwenden. Standardmäßig ist jeder Hotfix, der in einem SQL Server Servicepack bereitgestellt wird, in einem nächsten Servicepack für SQL Server enthalten.

Status

Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden:

Methode 1

Bei Verwendung einen Merge-Agent im kontinuierlichen Modus regelmäßig den Merge-Agent-Prozess beenden und erneut starten.

Beispielsweise Fehlermeldungen "nicht genügend Arbeitsspeicher" nach fünf Tagen und der Merge-Agent als Auftrag geplant ist. Dann planen Sie eine neue SQL Server-Agent-Auftrag Aufrufen Sp_stop_job Sp_start_job Angabe der Merge-Agent Auftrag, die betroffenen Prozess alle fünf Tage Zyklus gefolgt. Beim Abbrechen der Merge-Agent (Replmerg.exe) werden verlorene Speicher im Prozessspeicherplatz freigegeben.

Weitere Informationen zur Verwendung von dem kontinuierlichen Schalter auf der Merge-Agent finden Sie im Microsoft Developer Network (MSDN)-Website:

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

Methode 2

Bei Verwendung den Merge-Agent von einem Auftrag konnte Sie manuelle Schleifenlogik in den Auftrag mithilfe zusätzliche Schritte statt fortlaufende Parameter konfigurieren. Statt intern Schleifen ein Merge-Agent-Prozess immer, Planen der Merge-Agent als ein regelmäßig, beispielsweise einmal pro Minute wiederholt Auftragsschritt. Zwischen Wiederholungsversuchen wird der Prozess beendet und das verlorene Speicher frei.
Bearbeiten der Merge-Agent Auftrag, in einer Schleife mit einer Pause zwischen die Schritte wiederholen wiederholt.

  1. Nach Schritt [3] "Erkennt nicht protokollierte Agent Herunterfahren" Hinzufügen eines neuen Schritts [4] mit dem Namen "Unbegrenzten Wiederholungsschleife." TSQL und der Befehl festlegen "Waitfor Delay" 0: 00:05'", diese Verzögerung TSQL bieten eine 5 Sek. Pause die können als ein Abrufintervall so, dass der Merge-Agent zwischen Pause und nicht ständig ausgeführt wird. Geben Sie auf der Registerkarte Erweitert "Auf erfolgreiche Aktion" als "Gehe zu [2] ausführen Agent" und "Aktion bei Fehler" als "Go to Run Agent Schritt [2]".

  2. Bearbeiten Sie Schritt [2]-Agent ausführen um sicherzustellen, dass die Schleife Schritt [4] erreicht wird. Legen Sie auf der Registerkarte Erweitert des Schritts [2] Aktion erfolgreich auf "Gehe zu Schritt: [4] unbegrenzten Schleife" und die Aktion bei Fehler "Gehe zum nächsten Schritt".

  3. Schritt [3] bearbeiten "Erkennen nicht protokollierte Agent Herunterfahren" sicherstellen, dass die Schleife in Schritt [4] erreicht wird. Legen Sie auf der Registerkarte Erweitert des Schritts [3] auf erfolgreiche Aktion "Gehe zum nächsten Schritt". Sie können auch, wenn der Schritt [3] auf Fehler festgelegt werden soll "Zum nächsten Schritt gehen" oder "Beenden des Auftrags mit Fehler." Wenn es zum Beenden konfiguriert ist, werden die Auftragsfehler Replication Monitor und der Auftrag angezeigt. Bei einem Fehler im vierten Schritt Schleife zu konfiguriert ist, der Merge-Agent kann unbegrenzt erneut und Fehler protokolliert unbegrenzt.

Methode 3

Auch wenn Sie ein RMO die Abonnentendatenbank in einer Schleife synchronisiert die MergeSynchronizationAgent.Synchronize() -Methode aufrufen Anwendung, beenden Sie und starten Sie den Prozess in regelmäßigen Abständen, um Speicher freizugeben, der wegen dieses Problems offengelegt werden.
Weitere Informationen zu diesem Objekt und die Methode finden Sie im Microsoft Developer Network (MSDN)-Website: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx

Weitere Informationen

Aufruflisteninformationen

Speicherverlust 1


Dieser Speicherverlust tritt in dem Standardheap. Kleine 32 Byte Zeichenfolge Verluste wird dem Standardheap sehr fragmentiert.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

In diesem Beispiel hinzufügen Umlagen 32 Byte bis zu 27 MB übergeben. Dem Standardheap hat jedoch eine große Reservierung, weil diese verlorene Objekte im Heap verteilt und Platz zwischen Fragment.



Die meisten dieser 32 Byte Umlagen SysAllocString Aufrufe im Code stammen, es keine SysFreeString oder löschen gibt.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

Zweite Leck in der C-Laufzeitbibliothek mit Replikation im Zusammenhang mit COM-Objekten. Dieser Verlust von Heaps für Objekte innerhalb der replrov.dll-Bibliothek mit der Erweiterung MDACExts auf Vftable Scannen sehen! 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'

Wenn Sie keinen scan Tabelle dieser Verlust basierend auf der Größe angegeben (24,8,1144, 4008) angezeigt. Führen Sie hierzu den folgenden Typ von Befehl für Heaps: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...


Das übergeordnete Objekt ist der CReplicationProvider. Die drei untergeordneten Objekte besitzen Back Zeiger auf das übergeordnete Objekt. Daher sind diese Objekte mit Verweis auf. Um diese Objekte zu zerstören, müssen alle Verweiszähler 0 verringern. Ist eines der Verweiszähler nicht korrekt im Code verringert, die vier Objekte nicht immer zerstört Objekte instanziiert werden.



Hinweise

Wenn Sie Speicherverluste-Programme verwenden, ist die Methode die 3 4 verlorene Objekte reserviert "Replprov! CReplicationProvider::InitInstance".



Der Aufruf auf dem CReplicationProvider selbst ist das 4. Objekt.



Speicherverlust 2


Andere Speicherverluste, die mit dieser Version behoben Heap-Blöcke Größe 32 Bytes und 48 Byte verwendet und enthält die Spaltennamen aus replizierten Artikel. Folgendes ist Teil dieses Stapels:xmlsub!CXMLSubscriberCommon::ReadNodexmlsub!CXMLSubscriberCommon::FindNamedNodeInList

Referenzen

Weitere Informationen zur Verwendung der kontinuierlichen Option auf der Merge-Agent finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

http://msdn.microsoft.com/en-us/library/ms147839.aspx
Weitere Informationen zu Sp_stop_job gespeicherten Prozedur finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
Weitere Informationen zu Sp_start_job gespeicherten Prozedur finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
Weitere Informationen zum Beziehen von SQL Server 2005 Service Pack 3 finden im folgenden Artikel der Microsoft Knowledge Base:

913089 so erhalten Sie das neueste Servicepack für SQL Server 2005

Weitere Informationen zu den neuen Features in SQL Server 2005 Service Pack 3 (SP3) und die Verbesserung der SQL Server 2005 SP3 finden Sie auf der folgenden Microsoft-Website:

http://go.microsoft.com/fwlink/?LinkId=131442Weitere Informationen zum Benennungsschema für SQL Server-Updates klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:

Neues Benennungsschema für Microsoft SQL Server-Software 822499 Pakete aktualisieren

Um weitere Informationen zur Terminologie für Softwareupdates zu erhalten, klicken Sie auf die folgende Artikelnummer, um den Artikel der Microsoft Knowledge Base anzuzeigen:

824684 Beschreibung der Standardterminologie, die zum Beschreiben von Microsoft-Softwareupdates verwendet wird.

Autor: Jasonh
Ersteller: V-jayc
Technische Überprüfung: Jasonh;
Redaktion: V-stepce

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Übersetzungsqualität?
Was hat Ihre Erfahrung beeinflusst?

Vielen Dank für Ihr Feedback!

×