REVISIÓN: Recibe mensajes de error de la memoria cuando se utiliza la duplicación de mezcla con la sincronización Web en SQL Server 2005 o en SQL Server 2008

Nº de error: 119532 (Mantenimiento de contenido)
Número de errores de VSTS: 344705
Número de errores de VSTS: 365477
Número de errores de VSTS: 365476

Microsoft distribuye correcciones de Microsoft SQL Server 2005 como un archivo descargable. Dado que las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la versión anterior de SQL Server 2005. Microsoft distribuye correcciones de Microsoft SQL Server 2008 como un archivo descargable. Dado que las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008.

Síntomas

Utiliza duplicación de mezcla de SQL Server 2005 o duplicación de mezcla de SQL Server 2008 con una sincronización Web en suscriptor. Se produce una pérdida de memoria después de sincronizaciones repetidas y puede recibir errores de "memoria insuficiente" después de un período de tiempo. Esto se hace notar cuando el proceso de host no se reinicia durante mucho tiempo, como cuando se utiliza el agente de mezcla (Replmerg.exe) con el continuo switch - o cuando se especifica el parámetro continuado en el perfil del agente que se aplica al agente. También este problema puede afectar a una aplicación de RMO o servicio que desarrolló y que la sincronización se ejecuta en un bucle cuando se ejecuta la aplicación durante varios días sin salir.

Causa

Varios objetos internos se filtran tras cada sincronización.

Solución

SQL Server 2005 Service Pack 3


La corrección para este problema se publicó primero en la actualización acumulativa 6 para SQL Server 2005 Service Pack 3. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

974648 acum actualizar paquete 6 para el Service Pack 3 de SQL Server 2005Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la versión anterior de SQL Server 2005. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

960598 construye el SQL Server 2005 que se publicaron después del lanzamiento de SQL Server 2005 Service Pack 3.
Las revisiones de Microsoft SQL Server 2005 se crean para determinados service Pack de SQL Server. Debe aplicar una revisión de Service Pack 3 de SQL Server 2005 a una instalación de SQL Server 2005 Service Pack 3. De forma predeterminada, cualquier hotfix suministrada en un service pack de SQL Server se incluye en el próximo service pack de SQL Server.

La versión de SQL Server 2008

Importante: Debe instalar esta revisión si está ejecutando la versión de SQL Server 2008.

La corrección para este problema se publicó por primera vez en la Actualización acumulativa 8. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa para SQL Server 2008, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

975976 acum actualizar paquete 8 para SQL Server 2008Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Le recomendamos que considere aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

956909 the SQL Server 2008 generaciones que se publicaron después del lanzamiento de SQL Server 2008

SQL Server 2008 Service Pack 1

Importante: Debe instalar esta revisión si está ejecutando SQL Server 2008 Service Pack 1.


La corrección para este problema se publicó primero en 5 de actualización acumulativa para SQL Server 2008 Service Pack 1. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

Paquete 5 de actualización de 975977 acumulativa para SQL Server 2008 Service Pack 1Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

970365 the SQL Server 2008 generaciones que se publicaron después del lanzamiento de SQL Server 2008 Service Pack 1
Las revisiones de Microsoft SQL Server 2008 se crean para determinados service Pack de SQL Server. Debe aplicar un hotfix de SQL Server 2008 Service Pack 1 en una instalación de SQL Server 2008 Service Pack 1. De forma predeterminada, cualquier hotfix suministrada en un service pack de SQL Server se incluye en el próximo service pack de SQL Server.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Solución alternativa

Para evitar este problema, utilice uno de los métodos siguientes:

Método 1

Si está utilizando a un agente de mezcla en modo continuo, detener el proceso del agente de mezcla periódicamente y vuelva a iniciarlo.

Por ejemplo, recibe errores de "memoria insuficiente" después de cinco días, y el agente de mezcla está programado como un trabajo. A continuación, programar un trabajo de agente de SQL Server nueva llamar a sp_stop_job seguido sp_start_job especificando el nombre del agente de mezcla, que se desplazará el proceso afectado cada cinco días. Cuando se detiene el proceso del agente de mezcla (Replmerg.exe), se publicará cualquier memoria perdida dentro del espacio de memoria de proceso.

Para obtener más información acerca del uso de-switch continuado en el agente de mezcla, consulte el siguiente sitio Web de 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

Método 2

Si utiliza al agente de mezcla de un trabajo, puede configurar manual lógica de bucle dentro del trabajo con pasos adicionales en lugar de basarse en el parámetro continuo. El proceso del agente de mezcla de un bucle continuamente internamente para siempre, en lugar de programar al agente de mezcla como un paso de trabajo que se repite con frecuencia como una vez cada minuto. El proceso se cerrará entre reintentos y libera la memoria perdida.
Modifique al agente de mezcla que trabajo para que se repiten los pasos en un bucle con una pausa entre las repeticiones.

  1. Después del paso [3] "Detectar cierre del agente no registradas," Agregar un nuevo paso [4] denominada "Bucle indefinido de Reintentar". Establecer el tipo de TSQL y el comando para "waitfor delay ' 0: 00:05'", este retraso TSQL proporcionará una pausa de segundo 5 que se puede configurar como un intervalo de sondeo de tal manera que el agente de mezcla se haga una pequeña pausa entre ejecuciones y no ejecute constantemente. En la ficha Avanzadas especificar como "Ir paso a paso a [2] agente de ejecución" y "On Error" acción "De éxito acción" como "Ir a agente de ejecución de paso [2]."

  2. Editar paso [2] Ejecutar agente para asegurarse de que se alcance el bucle paso [4]. En la ficha avanzada del paso [2], establezca la acción de éxito en "Ir a paso: [4] bucle indefinido de reintento" y establezca la acción de error On a "Ir al paso siguiente."

  3. Editar paso [3] "Apagado del agente no registrado de detectar" para asegurarse de que se alcance el bucle en el paso [4]. En la ficha Avanzadas del paso [3], defina la acción de éxito en, "Ir al siguiente paso". También puede decidir si desea que la acción del paso [3] en error se establezca como "Ir al siguiente paso" o "Salir del trabajo e informar de errores". Si se configura para dejar de fumar, se mostrará el error trabajo en Monitor de duplicación y el Monitor de trabajo. Si se configura en caso de error para ir al cuarto paso del bucle, puede volver a ejecutar el agente de mezcla indefinidamente y registran los errores indefinidamente.

Método 3

De forma similar si utiliza una aplicación RMO para llamar al método MergeSynchronizationAgent.Synchronize() que sincroniza la base de datos de suscriptor en un bucle, detenga y reinicie el proceso periódicamente para liberar cualquier memoria que se pierde debido a este problema.
Para obtener más información acerca de este objeto y el método, consulte el siguiente sitio Web de Microsoft Developer Network (MSDN): http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.replication.mergesynchronizationagent.synchronize(SQL.90).aspx

Más información

Información de la pila de llamadas

Pérdida de memoria 1


Se produce esta pérdida de memoria en el montón predeterminado. El montón predeterminado se convierte en muy fragmentado debido a pérdidas de cadena pequeño y 32 bytes.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

En este ejemplo, las asignaciones de 32 bytes agregar comprometido hasta 27 MB. Sin embargo, el montón predeterminado tiene una gran reserva en parte porque estos objetos perdidos se reparten en el montón y fragmentan el espacio disponible entre bloques.



La mayoría de estas asignaciones de 32 bytes provienen de SysAllocString llamadas en el código donde no hay ninguna llamada SysFreeString o 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

Se produce una pérdida de segundo en el tiempo de ejecución de C montón con replicación relacionados con objetos COM. Esta pérdida se puede ver mediante el análisis de todos los montones para el vftable que señala a los objetos dentro de la biblioteca de replrov.dll con la extensión MDACExts! búsqueda.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'

Si no tiene tabla de análisis, puede ver esta pérdida basándose en el tamaño que anotó (24,8,1144, 4008). Para ello, ejecute el siguiente tipo de comando contra los montones: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...


El objeto primario es el CReplicationProvider. Los objetos tres secundarios tienen punteros atrás al objeto primario. Por lo tanto, estos objetos existen con recuentos de referencias entre sí. Para destruir estos objetos, deben disminuir todos los recuentos de referencias en 0. Dado que uno de los recuentos de referencia no está correctamente en el código, los cuatro objetos se destruyen cada vez que se crean instancias de los objetos.



Notas:

Si utiliza programas de seguimiento de pérdida, el método que asigna 3 de los 4 objetos perdidos es "replprov! CReplicationProvider::InitInstance".



La llamada a new en el CReplicationProvider propio es el objeto 4.



Pérdida de memoria 2


La pérdida de memoria que se corrige con esta versión utiliza los bloques del montón de 32 bytes de tamaño y 48 bytes y contiene los nombres de columna de artículos duplicados. La siguiente es una parte de esta pila:xmlsub!CXMLSubscriberCommon::ReadNodexmlsub!CXMLSubscriberCommon::FindNamedNodeInList

Referencias

Para obtener más información acerca de cómo utilizar el continuo switch - en el agente de mezcla, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms147839.aspx
Para obtener más información acerca del procedimiento almacenado de sp_stop_job , visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

http://http://msdn.microsoft.com/en-us/library/ms182793(SQL.90).aspx
Para obtener más información acerca del procedimiento sp_start_job almacenados, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

http://msdn.microsoft.com/en-us/library/ms186757(SQL.90).aspx
Para obtener más información sobre cómo obtener el Service Pack 3 de SQL Server 2005, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

913089 cómo obtener el service pack más reciente para SQL Server 2005

Para obtener más información acerca de las nuevas características de SQL Server 2005 Service Pack 3 (SP3) y las mejoras de SQL Server 2005 SP3, visite el siguiente sitio Web de Microsoft:

http://go.microsoft.com/fwlink/?LinkId=131442Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

Paquetes de actualización de 822499 nuevo esquema de nomenclatura para software de Microsoft SQL Server

Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

824684 Descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft

Autor: jasonh
Redactor: v-jayc
Revisor técnico: jasonh;
Redactor: v-stepce

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×