Al tener una publicación de combinación para replicar BLOB (tipo image
), obtuve E / S de disco tempdb muy altas para mi tamaño de datos. La publicación es de solo descarga y no tiene filtros.
La alta E / S del disco es causada por la sincronización (cuando no hay suscriptores sincronizados, todo está bien), fuertemente correlacionado con el número de suscriptores. Sucede incluso cuando no se cambian datos en Publisher entre sincronizaciones, y eso me molesta.
- Tamaño de la tabla replicada: 7 MB (el recuento total de filas es de aproximadamente 100)
- tempdb I / O: ~ 30 MB / seg para escritura (archivos de registro y datos)
- Número de suscriptores: un poco más de 100, cada uno sincronizándose cada 30 minutos (más o menos uniformemente).
- Período de retención establecido en 14 días.
Usando SQL Server 2008 en Publisher, SQL Server 2005-2008R2 en suscriptores. Todos los suscriptores usan la sincronización web.
Además, la sincronización en el suscriptor lleva mucho tiempo, con múltiples ocurrencias replmerg.log
como estas:
DatabaseReconciler, 2015/04/21 12:13:40.348, 3604, 25088, S2, INFO: [WEBSYNC_PROTOCOL] Sending client ReconcilerPhase WebSyncReconcilerPhase_RegularDownload DatabaseReconciler, 2015/04/21 12:13:47.063, 3604, 25194, S2, INFO: [WEBSYNC_PROTOCOL] Received server ReconcilerPhase WebSyncReconcilerPhase_LastRegularDownload
Intento de @stream_blob_columns
encendido y apagado sin efecto.
La pregunta es: ¿es una buena idea usar la replicación de mezcla para enviar estos blobs a los suscriptores? Tenemos otras publicaciones (aunque no tienen columnas BLOB) con muchos datos sin problema de tempdb. ¿Es una falla de SQL Server o una mala configuración?
El editor y el distribuidor están en la misma instancia, SQL Server 2008 SP4, no pueden estar seguros acerca de los suscriptores, algunos de ellos tal vez no estén actualizados. De todos modos, puedo preparar un entorno de prueba con pocos suscriptores que tengan versiones controladas, si parece que ayuda.
Confirmado, ese uso excesivo de tempdb causado por la ejecución de sys.sp_MSenumgenerations90
. MSMerge_genhistory
Tabla marcada , encontrada más de 1.2 millones de registros donde pubid
es nulo.
Encontré esta conversación con el gurú de la replicación:
Ejecutado sp_mergemetadataretentioncleanup
sin efecto.
Encontré un comentario en un caso como este (demasiadas filas MSmerge_genhistory
) donde eliminar filas donde pubid
es nulo y genstatus
= 1 ayudó a corregir la replicación.
Las filas eliminadas donde pubid
es nulo (lo que implica que todos los suscriptores están sincronizados, y que no lo están, se reinicializarán en "modo manual") y el disco IO vuelve a la normalidad de nuevo.
Tengo la sensación de que esta situación podría ser causada por el hecho de que todos mis suscriptores son anónimos a través de WebSync y la mayoría de ellos tienen el mismo nombre de host. Intentaré verificar si la -hostname
clave ayuda a no multiplicar registros MSmerge_genhistory
.