Korriger: Du får meldinger om for lite minne når du bruker flettereplikasjon med Web-synkronisering i SQL Server 2005 eller SQL Server 2008

Feil #: 119532 (Innholdsvedlikehold)
VSTS feil nummer: 344705
VSTS feil nummer: 365477
VSTS feil nummer: 365476

Microsoft distribuerer hurtigreparasjoner for Microsoft SQL Server 2005 som én nedlastbar fil. Fordi reparasjonene er kumulative, inneholder hver nye utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i tidligere SQL Server 2005-løse utgivelsen. Microsoft distribuerer hurtigreparasjoner for Microsoft SQL Server 2008 som én nedlastbar fil. Fordi reparasjonene er kumulative, inneholder hver nye utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i den forrige SQL Server 2008 reparere utgivelsen.

Symptomer

Du bruker Flettereplikasjon for SQL Server 2005 eller SQL Server 2008-flettereplikasjon med synkronisering et Web-basert abonnent. Det oppstår en minnelekkasje etter gjentatte synkroniseringer, og du kan få feil "ikke nok minne" etter en viss tid. Dette blir merkbart når vertsprosessen ikke startes for lenge, for eksempel når den flettes Agent (Replmerg.exe) brukes med bryteren-kontinuerlig eller når kontinuerlig parameteren er angitt i profilen Agent som brukes til agenten. Dette problemet kan også påvirke et RMO program eller tjeneste som du utviklet som kjører synkronisering i en løkke når programmet kjører på flere dager uten å avslutte.

Årsak

Flere interne objekter er lekket ved hver synkronisering.

Oppløsning

SQL Server 2005 Service Pack 3


Hurtigreparasjonen for dette problemet ble først utgitt i Kumulativ oppdatering 6 for SQL Server 2005 Service Pack 3. Hvis du vil ha mer informasjon om denne kumulative oppdateringen, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

974648 kumulativ sikkerhetsoppdateringspakke 6 for SQL Server 2005 Service Pack 3Obs! Fordi versjoner er kumulative, inneholder hver nye fix-utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i tidligere SQL Server 2005-Løs utgivelsen. Microsoft anbefaler at du vurderer å bruke den nyeste versjonen av hurtigreparasjonen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

960598 for SQL Server 2005 bygger som ble gitt ut etter at SQL Server 2005 Service Pack 3 ble utgitt.
Hurtigreparasjoner for Microsoft SQL Server 2005 opprettes for bestemte oppdateringspakker for SQL Server. Du må bruke en hurtigreparasjon for SQL Server 2005 Service Pack 3 for en installasjon av SQL Server 2005 Service Pack 3. En hurtigreparasjon som finnes i en SQL Server service pack er som standard inkludert i neste oppdateringspakke for SQL Server.

Den opprinnelige versjonen av SQL Server 2008

Viktig Hvis du kjører den opprinnelige versjonen av SQL Server 2008, må du installere denne reparasjonen.

Hurtigreparasjonen for dette problemet ble først utgitt i kumulative oppdateringen 8. Hvis du vil ha mer informasjon om hvordan du får tak i denne kumulative oppdateringen for SQL Server 2008, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

975976 kumulativ oppdateringspakke 8 for SQL Server 2008Obs! Fordi versjoner er kumulative, inneholder hver nye fix-utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i den forrige SQL Server 2008 Løs utgivelsen. Vi anbefaler at du vurderer å bruke den nyeste versjonen av hurtigreparasjonen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

956909 for SQL Server 2008 bygger som ble gitt ut etter at SQL Server 2008 ble utgitt

SQL Server 2008 Service Pack 1

Viktig Hvis du kjører SQL Server 2008 Service Pack 1, må du installere denne reparasjonen.


Hurtigreparasjonen for dette problemet ble først utgitt i 5 for kumulativ oppdatering for SQL Server 2008 Service Pack 1. Hvis du vil ha mer informasjon om denne kumulative oppdateringen, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

975977 kumulativ sikkerhetsoppdateringspakke 5 for SQL Server 2008 Service Pack 1Obs! Fordi versjoner er kumulative, inneholder hver nye fix-utgivelse alle hurtigreparasjonene og sikkerhetsreparasjonene som var inkludert i den forrige SQL Server 2008 Løs utgivelsen. Microsoft anbefaler at du vurderer å bruke den nyeste versjonen av hurtigreparasjonen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

970365 for SQL Server 2008 bygger som ble gitt ut etter at SQL Server 2008 Service Pack 1 ble utgitt
Hurtigreparasjoner for Microsoft SQL Server 2008 opprettes for bestemte oppdateringspakker for SQL Server. Du må bruke en hurtigreparasjon for SQL Server 2008 Service Pack 1 til en installasjon av SQL Server 2008 Service Pack 1. En hurtigreparasjon som finnes i en SQL Server service pack er som standard inkludert i neste oppdateringspakke for SQL Server.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Løsningen

Hvis du vil omgå dette problemet, bruker du én av følgende metoder:

Metode 1

Hvis du bruker en agent for fletting i kontinuerlig modus, Stopp agent Fletteprosessen med jevne mellomrom, og start programmet på nytt.

Hvis du for eksempel får du feil "ikke nok minne" etter fem dager, og den flettes Agent er planlagt som en jobb. Deretter kan du planlegge en ny jobb for SQL Server Agent å kalle sp_stop_job etterfulgt av sp_start_job flette Agent-jobbnavn, som vil kretse berørte prosessen etter fem dager du angir. Når du stopper prosessen flette Agent (Replmerg.exe), vil det bli utgitt en minnelekkasje i prosessens minneområde.

Hvis du vil ha mer informasjon om bruk av - kontinuerlig bryteren på Flett-Agent, kan du se følgende webområde for Microsoft Developer Network (MSDN):

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

Metode 2

Hvis du bruker utskriftsfletting-agent fra en jobb, kan du konfigurere manuell løkker logikken i prosjektet ved hjelp av flere trinn i stedet for å stole på kontinuerlig-parameteren. I stedet for en agent Fletteprosessen løkker kontinuerlig internt kontinuerlig, planlegge fletting-Agent som jobben trinn som gjentas hyppig for eksempel én gang hvert minutt. Prosessen avsluttes mellom nye forsøk, og dette frigjør en minnelekkasje.
Rediger flette agenten jobben slik at Gjenta trinnene i en løkke med en pause mellom gjentas.

  1. Etter trinn [3] "Søk etter avslutning av nonlogged agent," Legg til et nytt trinn [4] kalt "Uendelig Retry løkke." Angi type TSQL og kommando til "waitfor forsinkelse 0: 00:05'", TSQL forsinkelsen vil gi en 5 andre pause der du kan konfigurere som et avspørringsintervall på en slik måte at flettingen agenten en kort pause mellom kjøringer og ikke kjøre hele tiden. I kategorien Avansert angi "På vellykket handlingen" som "Gå til trinn [2] Kjør Agent" og "På feil handling" som "Gå til trinn [2] Kjør agenten."

  2. Rediger trinn [2] kjører Agent for å sikre at løkken trinn [4] er nådd. I kategorien Avansert i trinn [2] satt på vellykket handlingen, "går du til trinn: [4] uendelig løkke for nye forsøk" og satt handlingen på feil "Gå til neste trinn."

  3. Rediger trinn [3] "Finn nonlogged agent shutdown" å sørge for at løkken i trinn [4] er nådd. Angi på vellykket handlingen "Gå til neste trinn" i kategorien Avansert i trinn [3]. Du kan også bestemme Hvis du vil ha trinn [3] ved feil handling som skal angis som "Gå til neste trinn" eller "Avslutt jobb rapporterer om feil." Hvis den er konfigurert for å avslutte, vil den vises jobb-feil i replikering skjerm og jobb-skjerm. Hvis det er konfigurert ved feil å gå til det fjerde trinnet i løkke, fletting-agent kan kjøre i det uendelige, og feilene logget i det uendelige.

Metode 3

På samme måte hvis du bruker et RMO program for å kalle metoden MergeSynchronizationAgent.Synchronize() som synkroniserer abonnentdatabase i en løkke, stoppe og starte på nytt med jevne mellomrom for å frigjøre et minne som er lekket på grunn av dette problemet.
Hvis du vil ha mer informasjon om dette objektet og metoden, kan du se følgende webområde for Microsoft Developer Network (MSDN): http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx

Hvis du vil ha mer informasjon

Kallstakk

Minnelekkasje 1


Denne Minnelekkasje oppstår i standard heap. Standard heap blir svært fragmentert på grunn av liten 32 byte streng lekkasje.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

I dette eksemplet legger fordelingene 32 byte opptil 27 MB utført. Standard heap har imidlertid en stor reservasjon, delvis fordi disse objektene lekket spredt over heap og fragmentere plass mellom blokker.



De fleste av disse tildelingene 32 byte kommer fra SysAllocString-kall i koden der det ikke er noen SysFreeString eller slette anrop.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

En annen lekkasje som oppstår i C runtime heap med replikasjon relatert COM-objekter. Denne lekkasje kan ses ved å skanne alle heap for vftable som peker til objekter i replrov.dll-bibliotek ved å bruke filtypen 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'

Hvis du ikke har tabellen skanne, kan du vise denne lekkasje basert på noterte (24,8,1144, 4008). Hvis du vil gjøre dette, kjører du følgende type kommando mot heap: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...


Det overordnede objektet er på CReplicationProvider. De tre underordnede objektene har tilbake pekere til det overordnede objektet. Disse objektene finnes derfor med referanseantall til hverandre. Hvis du vil fjerne disse objektene, må alle referanseantall redusere til 0. Fordi en av referanseantall ikke reduseres riktig i koden, er de fire objektene ikke ødelegges hver gang objektene er instansiert.



Notater

Hvis du bruker lekkasje sporing av programmer, er metoden som tilordnes 3 av 4 lekket objektene som "replprov! CReplicationProvider::InitInstance".



Kallet til ny på CReplicationProvider seg selv er 4-objekt.



Minnelekkasje 2


Andre minnelekkasje som er løst i denne versjonen bruker heap blokker av 32 byte for størrelse og 48 byte og inneholder kolonnenavn fra replikerte artikler. Det følgende er en del av denne bunken:xmlsub!CXMLSubscriberCommon::ReadNodexmlsub!CXMLSubscriberCommon::FindNamedNodeInList

Referanser

Hvis du vil ha mer informasjon om hvordan du bruker - kontinuerlig bryteren på Flett-Agent, kan du gå til følgende webområde for Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms147839.aspx
Hvis du vil ha mer informasjon om sp_stop_job lagret prosedyren, kan du gå til følgende webområde for Microsoft Developer Network (MSDN):

http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
Hvis du vil ha mer informasjon om sp_start_job lagret prosedyren, kan du gå til følgende webområde for Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
Hvis du vil ha mer informasjon om hvordan du får tak i SQL Server 2005 Service Pack 3, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

913089 hvordan du får tak i den nyeste oppdateringspakken for SQL Server 2005

Hvis du vil ha mer informasjon om de nye funksjonene i SQL Server 2005 Service Pack 3 (SP3) og forbedringene i SQL Server 2005 SP3, kan du gå til følgende Microsoft-webområde:

http://go.microsoft.com/fwlink/?LinkId=131442Hvis du vil ha mer informasjon om navngivingspraksis for SQL Server-oppdateringer, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

822499 Ny navngivingspraksis for Microsoft SQL Server-programvare for oppdateringspakker

Hvis du vil ha mer informasjon om terminologi for programvareoppdatering, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

824684 Beskrivelse av standardterminologien som brukes til å beskrive oppdateringer av Microsoft-programvare

Forfatter: jasonh
Tekstforfatter: v-jayc
Teknisk redaktør: jasonh;
Redaktør: v-stepce

Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Insiders

Var denne informasjonen nyttig?

Hvor fornøyd er du med kvaliteten på oversettelsen?

Hva påvirket opplevelsen din?

Har du ytterligere tilbakemeldinger? (valgfritt)

Takk for tilbakemeldingen!

×