Исправление: Появляется сообщения об ошибке о нехватке памяти при использовании репликации слиянием при веб-синхронизации в SQL Server 2005 или SQL Server 2008

Номер ошибки: 119532 (Content Maintenance)
VSTS номер ошибки: 344705
VSTS номер ошибки: 365477
VSTS номер ошибки: 365476

Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2005 как один загружаемый файл. Так как исправления являются накопительными, каждый выпуск содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2005 исправление выпуска. Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 как один загружаемый файл. Так как исправления являются накопительными, каждый выпуск содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2008 выпуска исправлений.

Симптомы

Использование репликации слиянием SQL Server 2005 или SQL Server 2008 репликации слиянием при веб-синхронизации на базе подписчика. После повторной синхронизации возникает утечка памяти и ошибки «недостаточно памяти» может появиться после определенного периода времени. Это становится заметным, когда хост-процесс не перезапускается в течение длительного времени, например, при использовании агента слияния (Replmerg.exe) непрерывная переключателем или при непрерывной параметр указан в профиле агента, который применяется к агенту. Также эта проблема может повлиять на RMO приложения или службы, разработанные, выполняемой синхронизации в цикле, при запуске приложения в течение нескольких дней, не выходя из.

Причина

При каждой синхронизации произошла утечка несколько внутренних объектов.

Решение

Пакет обновления 3 для SQL Server 2005


Исправление этой уязвимости первого выпуска накопительного обновления 6 для Пакет обновления 3 для SQL Server 2005. Дополнительные сведения о этот накопительный пакет обновления щелкните следующий номер статьи базы знаний Майкрософт:

974648 накопительного обновления пакет обновления 6 для Пакет обновления 3 для SQL Server 2005Примечание. Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2005 исправление выпуска. Корпорация Майкрософт рекомендует учесть применение последний выпуск исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

960598 SQL Server 2005 выполняет построение, выпущенных после Пакет обновления 3 для SQL Server 2005.
Исправления для Microsoft SQL Server 2005 создаются для определенных пакетов обновления SQL Server. Необходимо установить Пакет обновления 3 для SQL Server 2005 исправление установки обновления Пакет обновления 3 для SQL Server 2005. По умолчанию какие-либо исправления, включенный в пакет обновления SQL Server включено в следующий пакет обновления SQL Server.

В версии SQL Server 2008

Важно. Если на компьютере с официальной версией SQL Server 2008 необходимо установить это исправление.

Исправление этой уязвимости первого выпуска накопительного обновления 8. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2008, щелкните следующий номер статьи базы знаний Майкрософт:

975976 накопительного обновления 8 для SQL Server 2008Примечание. Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2008 выпуска исправлений. Мы рекомендуем рассмотреть применение последнего выпуска исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

956909 SQL Server 2008 выполняет построение, выпущенных после выпуска SQL Server 2008

Пакет обновления 1 для SQL Server 2008

Важно. При запуске SQL Server 2008 Пакет обновления 1 необходимо установить это исправление.


Исправление этой уязвимости первого выпуска накопительного обновления 5 для SQL Server 2008 Пакет обновления 1. Дополнительные сведения о этот накопительный пакет обновления щелкните следующий номер статьи базы знаний Майкрософт:

975977 накопительного обновления 5 для SQL Server 2008 Пакет обновления 1Примечание. Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2008 выпуска исправлений. Корпорация Майкрософт рекомендует учесть применение последний выпуск исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

970365 SQL Server 2008 выполняет построение, выпущенных после выпуска SQL Server 2008 Пакет обновления 1
Исправления Microsoft SQL Server 2008 создаются для определенных пакетов обновления SQL Server. Необходимо установить исправление SQL Server 2008 Пакет обновления 1 для установки SQL Server 2008 Пакет обновления 1. По умолчанию какие-либо исправления, включенный в пакет обновления SQL Server включено в следующий пакет обновления SQL Server.

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Временное решение

Чтобы обойти эту проблему, воспользуйтесь одним из следующих методов:

Способ 1

При использовании агента слияния в непрерывном режиме периодически остановить процесс агента слияния и запустите его снова.

Например вы получите ошибки «недостаточно памяти» после пяти дней и как задание запланировано агента слияния. Затем запланируйте новое задание агента SQL Server для вызова хранимой процедуры sp_stop_job следуют sp_start_job , указав имя задания агента слияния цикла соответствующий процесс каждые пять дней. При остановке процесса агента слияния (Replmerg.exe) будут выпущены все утечки памяти внутри пространства памяти процесса.

Дополнительные сведения об использовании параметра - непрерывной об агенте слияния см следующий веб-узел 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

Способ 2

При использовании из задания агента слияния, можно настроить с помощью дополнительных шагов не полагаясь на непрерывной параметр вручную циклическую логику внутри задания. Вместо процесса агента слияния один постоянно внутри бесконечного цикла расписание агента слияния как шаг задания, который повторяется часто, например, каждую минуту. Процесс будет завершен между повторными попытками, и это освобождает любой утечки памяти.
Изменение задания, повторите действия, описанные в цикле с паузой между повторяет агента слияния.

  1. После выполнения шага [3] «Завершение работы без занесения в журнал агента, определять» добавить новый шаг [4] с именем «"Неограниченный" Повторить цикл». Задайте тип TSQL и команды «waitfor delay "0: 00:05"», эта задержка TSQL предоставит 5 второй паузы, который можно настроить в качестве интервала опроса, таким образом, что агент слияния сделайте короткую паузу между выполнениями и постоянно работать. На вкладке Дополнительно укажите «На успех действие» как «Перейдите к действию [2] запуск агента» и «Действие при ошибке» как «Перейти к действию [2] запуск агента».

  2. Измените действие [2] запуска агента, чтобы убедиться в достижении цикла шага [4]. На вкладке Дополнительно действие [2] установите на успех действие, «перейдите к шагу: [4] неопределенной цикла повтора» и задайте действие сбоя On «Перейти к следующему шагу.»

  3. Изменить действие [3] «Завершение работы обнаружить Незарегистрированное агента» убедитесь, что достигается цикла на шаге [4]. На вкладке Дополнительно действие [3] установите на успех действие, «Перейти к следующему этапу». Можно также определить, если требуется действие [3] на сбой действия устанавливается как «Перейти к следующему шагу» или «Завершить задание с ошибкой». Если он настроен для выхода из программы, покажет сбой задания в мониторе репликации и монитор заданий. Если он настроен при сбое для перехода на четвертый шаг цикла, бесконечно может перезапустить агент слияния и ошибок входа до бесконечности.

Способ 3

Аналогичным образом при использовании приложения объектов RMO для вызова метода MergeSynchronizationAgent.Synchronize() , который осуществляет синхронизацию базы данных подписчика в цикле, остановите и перезапустите процесс периодически, чтобы освободить память, которой утечки из-за этой проблемы.
Дополнительные сведения об этом объекте и метод см следующий веб-узел Microsoft Developer Network (MSDN): http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx

Дополнительные сведения

Сведения о стеке вызова

Утечка памяти 1


Эта утечка памяти происходит в кучи по умолчанию. Из-за утечки небольшой 32 байт строки кучи по умолчанию становится сильно фрагментирован.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

В этом примере 32-разрядного распределения добавить до 27 МБ завершена. Тем не менее кучи по умолчанию имеет большой резервирования, отчасти потому, что эти потерянные объекты распределены по куче и фрагмент места между блоками.



Большинство из этих способов 32 байта берутся из SysAllocString вызовы в коде там, где отсутствует вызов SysFreeString или DELETE.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

Во время выполнения C возникает утечка второй кучи с репликацией, связанных с COM-объектами. Эта утечка можно увидеть путем сканирования всех кучах для vftable, указывающий на объекты в библиотеке replrov.dll, используя расширение 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'

Если у вас сканирования таблицы, можно просмотреть эта утечка на основании размеров указано (24,8,1144, 4008). Для этого в кучах выполняются командой следующего типа: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...


Родительский объект является CReplicationProvider. Три дочерних объектов имеют обратные указатели на родительский объект. Таким образом эти объекты существуют счетчики ссылок друг с другом. Для уничтожения этих объектов, все счетчики ссылок необходимо уменьшить значение 0. Поскольку один из счетчиков ссылок не уменьшается должным образом в коде, четырех объектов не уничтожаются каждый раз, когда создаются объекты.



Примечания

При использовании программы отслеживания утечек памяти, который выделен 3 4 потерянные объекты метод является «replprov! CReplicationProvider::InitInstance».



Вызов new на CReplicationProvider сам является объектом 4-й.



Утечка памяти 2


Другие утечки памяти в данном выпуске использует кучи блоки размером 32 байта и 48 байт и содержит имена столбцов из реплицируемой статьи. Ниже приведен фрагмент этого стека.xmlsub!CXMLSubscriberCommon::ReadNodexmlsub!CXMLSubscriberCommon::FindNamedNodeInList

Ссылки

Дополнительные сведения об использовании - непрерывной коммутатора на агент слияния, посетите следующий веб-узел Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms147839.aspx
Дополнительные сведения о хранимой процедуры sp_stop_job хранимые процедуры посетите следующий веб-узел Microsoft Developer Network (MSDN):

http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
Дополнительные сведения о sp_start_job хранимые процедуры посетите следующий веб-узел Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
Для получения дополнительных сведений о том, как получить Пакет обновления 3 для SQL Server 2005, щелкните следующий номер статьи базы знаний Майкрософт:

913089 как получить последний пакет обновления для SQL Server 2005

Дополнительные сведения о новых возможностях в Пакет обновления 3 (SP3) для SQL Server 2005, а также об улучшениях в SQL Server 2005 с пакетом обновления 3 посетите следующий веб-узел корпорации Майкрософт:

http://go.microsoft.com/fwlink/?LinkId=131442Для получения дополнительных сведений о схеме именования для обновления SQL Server щелкните следующий номер статьи базы знаний Майкрософт:

Новая схема присвоения имен 822499 для программного обеспечения Microsoft SQL Server пакетами обновления

Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

824684 Описание стандартной терминологии, используемой для описания обновлений программных продуктов Майкрософт

Автор: jasonh
Разработчик документации: v-jayc
Технический редактор: jasonh;
Редактор: v-stepce

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×