Oprava: Zobrazí sa pamäte chybové hlásenia pri použití zlučovacia replikácia Web synchronizácii SQL Server 2005 alebo SQL Server 2008

BUG #: 119532 (údržby)
VSTS chyba číslo: 344705
VSTS chyba číslo: 365477
VSTS chyba číslo: 365476

Microsoft distribuuje Microsoft SQL Server 2005 opravy ako jeden súbor na prevzatie. Keďže opravy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúcej SQL Server 2005 opraviť uvoľnenia. Microsoft distribuuje Microsoft SQL Server 2008 opravy ako jeden súbor na prevzatie. Keďže opravy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho SQL Server 2008 opraviť uvoľnenia.

Príznaky

Používate SQL Server 2005 zlúčením alebo SQL Server 2008 replikácia s Web synchronizáciu systémom účastníka. Po opakovanom synchronizácie dôjde k pretečeniu pamäte a zobrazí "nedostatok pamäte" chybové hlásenie po dobu. To sa výraznejšie prejavuje pri hostiteľský proces nereštartuje dlhšiu dobu, napríklad pri - priebežná prepínač používa Zlúčiť Agent (Replmerg.exe) alebo keď nepretržité parameter je Agent profilu, ktorý používa agenta. Tento problém sa môže ovplyvniť aj RMO aplikácie alebo služby, ktoré ste vytvorili, spustený synchronizácia slučku, keď aplikácia spustí niekoľko dní bez ukončenia.

Príčina

Niektoré vnútorné objekty sú pretečeniu pri každej synchronizácii.

Riešenie

SQL Server 2005 Service Pack 3


Fix pre tento problém bol prvýkrát vydaný v kumulatívnej aktualizácii 6 pre SQL Server 2005 Service Pack 3. Ďalšie informácie o tomto Kumulatívna aktualizácia, po kliknutí na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:

974648 Kumulatívna aktualizácia balíka 6 pre SQL Server 2005 Service Pack 3Poznámka: Keďže tieto zostavy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúcej SQL Server 2005 opraviť uvoľnenia. Odporúčame vám zvážiť použitie Najaktuálnejšieho vydania opravy túto rýchlu opravu obsahuje. Ďalšie informácie získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

960598 SQL Server 2005 zostavy, ktoré boli vydané po bola vydaná SQL Server 2005 Service Pack 3.
Microsoft SQL Server 2005 rýchlych sú vytvorené pre konkrétne SQL Server service pack. Musíte použiť SQL Server 2005 Service Pack 3 rýchlu opravu inštalácie SQL Server 2005 Service Pack 3. Predvolene rýchlu opravu, ktorá je súčasťou balíka SQL Server service pack je zahrnutá v ďalšej SQL Server service pack.

Verzia SQL Server 2008

Dôležité upozornenie: Ak používate verziu SQL Server 2008, musíte nainštalovať túto opravu.

Fix pre tento problém bol prvýkrát vydaný v Kumulatívna aktualizácia 8. Ďalšie informácie o možnostiach získania tento balík Kumulatívna aktualizácia pre SQL Server 2008, po kliknutí na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:

975976 Kumulatívna aktualizácia balíka 8 pre SQL Server 2008Poznámka: Keďže tieto zostavy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho SQL Server 2008 opraviť uvoľnenia. Odporúčame vám zvážiť použitie Najaktuálnejšieho vydania opravy túto rýchlu opravu obsahuje. Ďalšie informácie získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

956909 SQL Server 2008 zostavy, ktoré boli vydané po bola vydaná SQL Server 2008

SQL Server 2008 Service Pack 1

Dôležité upozornenie: Ak používate SQL Server 2008 Service Pack 1, musíte nainštalovať túto opravu.


Fix pre tento problém bol prvýkrát vydaný v kumulatívnej aktualizácii 5 pre SQL Server 2008 Service Pack 1. Ďalšie informácie o tomto Kumulatívna aktualizácia, po kliknutí na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:

975977 Kumulatívna aktualizácia balíka 5 pre SQL Server 2008 Service Pack 1Poznámka: Keďže tieto zostavy sú kumulatívne, každé nové vydanie obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho SQL Server 2008 opraviť uvoľnenia. Odporúčame vám zvážiť použitie Najaktuálnejšieho vydania opravy túto rýchlu opravu obsahuje. Ďalšie informácie získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

970365 SQL Server 2008 zostavy, ktoré boli vydané po bola vydaná SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 rýchlych sú vytvorené pre konkrétne SQL Server service pack. Rýchla oprava SQL Server 2008 Service Pack 1 musíte použiť na inštaláciu balíka SQL Server 2008 Service Pack 1. Predvolene rýchlu opravu, ktorá je súčasťou balíka SQL Server service pack je zahrnutá v ďalšej SQL Server service pack.

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.

Alternatívne riešenie

Ak chcete vyriešiť tento problém, použite jeden z nasledujúcich postupov:

Metóda 1

Ak používate korešpondencie agent v režime nepretržitej, zastaviť agenta korešpondencie pravidelne a znova.

Napríklad zobrazí "nedostatok pamäte" chyby po päť dní a vaše zlúčiť Agent je naplánovaná ako úlohu. Potom môžete naplánovať novú úlohu SQL Server Agent call sp_stop_job nasleduje sp_start_job svoje zlúčiť Agent úloha názov, ktorý bude cyklus príslušného procesu každých päť dní. Keď ukončíte proces zlúčiť Agent (Replmerg.exe), bude vydaná prezradený pamäť do priestoru pamäte procesu.

Ďalšie informácie o používaní - priebežná prepínač zlúčenie agenta, nájdete na nasledujúcej webovej lokalite 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

Metóda 2

Používate korešpondencie agent úlohy môže nakonfigurovať manuálne looping logiky v práci pomocou ďalších krokov namiesto neustále parametra. Namiesto jedného korešpondencie agent cyklické interne navždy, plánovanie korešpondencie Agent ako úloha krok opakuje pravidelne ako raz za minútu. Proces ukončí medzi opakovaniami a to uvoľní prezradený pamäť.
Úprava zlúčiť Agent úlohu tak, že postup opakujte slučku s pauza medzi zopakuje.

  1. Po dokončení kroku [3] "Zistiť nonlogged agenta vypnutie" Pridať nový krok [4] s názvom "Neobmedzenú opakovania slučky." Nastavenie typu a TSQL príkaz "waitfor oneskorenie 0: 00:05" ", TSQL oneskorenia poskytne 5 sekundy pauza, ktoré môžete nakonfigurovať ako interval vzorkovania tak, že korešpondencie agent bude pauza krátko medzi spustení a spustiť neustále. Na karte Rozšírené "Na úspech akcie" ako "Prejdite na krok [2] spustiť agenta" a "zlyhanie akcie" ako zadať "Prejdite na krok [2] spustiť agenta."

  2. Upraviť zabezpečenie slučky krok [4] je Agent spustiť krok [2]. Na karte Rozšírené kroku [2] nastavené na úspešnú akciu "prejdite na krok: [4] neobmedzenú opakovania slučky" a o zlyhanie činnosti "Prejsť na ďalší krok."

  3. Úpravy kroku [3] "Zistiť nonlogged agenta vypnutie" Uistite sa, že dosiahne slučky v kroku [4]. Na karte Rozšírené kroku [3] nastavené na úspešnú akciu "Prejdite na ďalší krok". Môžete, ak chcete krok [3] na zlyhanie akcie sa ako "Prejdite na ďalší krok" alebo "Ukončiť úlohu zlyhanie." Ak je nastavený na ukončenie, zobrazí úlohy zlyhania Replication Monitor a sledovanie úloh. Ak je nakonfigurovaný pri zlyhaní zobrazíte Štvrtý krok slučky, korešpondencie agent môže spustiť natrvalo a chyby prihlásený natrvalo.

Metóda 3

Podobne, používate aplikáciu RMO volať metódu MergeSynchronizationAgent.Synchronize() , ktorá synchronizuje prijímajúca databáza slučku, zastavte a reštartujte proces pravidelne pamäť, ktorá je pretečeniu tento problém.
Ďalšie informácie o tento predmet a metódy, nájdete na nasledujúcej webovej lokalite Microsoft Developer Network (MSDN): http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx

Ďalšie informácie

Informácie o zásobníku volaní

Pretečenie pamäte 1


V predvolenej haldy sa vyskytne pretekanie pamäte. Predvolenej haldy sa stáva veľmi fragmentovaný, pretože pretečenia reťazec malých 32 bajtov.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

V tomto príklade pridajte 32 bajtov rozdelenie našich 27 MB. Avšak predvolenej haldy má veľké čiastočne, pretože tieto prezradený sú rozložené haldy a fragment priestor medzi blokmi.



Väčšina balíkmi 32 bajtov pochádza z volania jazyk kódu v prípade, že nie je SysFreeString alebo odstrániť.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

Druhý pretečeniu C runtime haldy s replikácie súvisiace objekty COM. Pretekanie vidia kontroluje všetky zhromaždenia za vftable ukazuje objektov v knižnici replrov.dll pomocou prípony 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'

Ak nemáte tabuľku skenovanie, vidíte pretekanie na základe veľkosti uvedené (24,8,1144, 4008). Vykonáte to nasledovné príkaz spúšťať zhromaždenia: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...


Nadradený objekt je CReplicationProvider. Tri podradené objekty majú späť odkazy na nadradenom objekte. Preto tieto objekty existujú odkaz počíta navzájom. Zničiť tieto objekty, musíte zmenšiť všetky odkaz počíta 0. Keďže odkaz počíta nie je smerovaní znížená správne v kóde, štyri objekty nie sú zničené pri každom vytvorí inštanciu objektov.



Poznámky

Pretečenie sledovanie programov, metóda pridelené 3 4 prezradený objektov sa "replprov! CReplicationProvider::InitInstance".



Vyzýva na nové CReplicationProvider, sám je 4 objektu.



Pretečenie pamäte 2


Memory leak, ktoré riešia Táto verzia používa haldy blokov 32 bajtov veľkosť 48 bajtov a obsahuje názvy stĺpcov z paralelných článkov. Časť tohto zásobníka je:xmlsub!CXMLSubscriberCommon::ReadNodexmlsub!CXMLSubscriberCommon::FindNamedNodeInList

Odkazy

Ďalšie informácie o používaní - priebežná prepínač zlúčenie agenta, nájdete na nasledujúcej webovej lokalite Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms147839.aspx
Ďalšie informácie o postupe sp_stop_job uložené, nájdete na nasledujúcej webovej lokalite Microsoft Developer Network (MSDN):

http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
Ďalšie informácie o postupe sp_start_job uložené, nájdete na nasledujúcej webovej lokalite Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
Ďalšie informácie o možnostiach získania SQL Server 2005 Service Pack 3, kliknite na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:

913089 ako získať najnovší balík service pack pre program SQL Server 2005

Ďalšie informácie o nových funkciách v SQL Server 2005 Service Pack 3 (SP3) a vylepšeniach v balíku SQL Server 2005 SP3, nájdete na webovej lokalite spoločnosti Microsoft:

http://go.microsoft.com/fwlink/?LinkId=131442Ďalšie informácie o schéme pomenúvania pre aktualizácie aplikácie SQL Server, po kliknutí na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:

822499 nové pomenovania schém pre SQL Server aktualizácie balíkov

Ďalšie informácie o terminológii z oblasti aktualizácií softvéru získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:

824684 Popis štandardnej terminológie používanej na popis aktualizácií softvéru od spoločnosti Microsoft

Autor: jasonh
Writer: v-jayc
Tech Reviewer: jasonh;
Editor: v-stepce

Potrebujete ďalšiu pomoc?

Rozšírte svoje zručnosti
Preskúmať školenie
Buďte medzi prvými, ktorí získajú nové funkcie
Pripojiť k Microsoft insiderov chcú

Považujete poskytnuté informácie za užitočné?

Ďakujem za vaše pripomienky!

Ďakujeme vám za pripomienky. Pravdepodobne vám pomôže, ak vás spojíme s pracovníkom podpory pre Office.

×