Aumentar el rendimiento de la réplica transaccional
Una vez que haya considerado las sugerencias generales sobre el rendimiento que se describen en Aumentar el rendimiento general de la réplica, tenga en cuenta estas áreas adicionales específicas de la réplica transaccional.
Diseño de la base de datos
Minimice el tamaño de la transacción en el diseño de la aplicación.
De manera predeterminada, la réplica transaccional propaga los cambios en función de los límites de las transacciones. Si las transacciones son más pequeñas, es menos probable que el Agente de distribución tenga que volver a enviar una transacción debido a problemas de red. Si el agente tiene que volver a enviar una transacción, la cantidad de datos que se enviarán será menor.
Configuración del distribuidor
Configure el distribuidor en un servidor dedicado.
Puede reducir la carga de procesamiento en el publicador configurando un distribuidor remoto. Para obtener más información, vea Configurar la distribución.
Ajuste adecuadamente el tamaño de la base de datos.
Pruebe la réplica con la carga habitual del sistema a fin de determinar cuánto espacio es necesario para almacenar los comandos. Asegúrese de que la base de datos es lo suficientemente grande para almacenar comandos sin recurrir al crecimiento automático con frecuencia. Para obtener más información acerca cómo cambiar el tamaño de una base de datos, vea ALTER DATABASE (Transact-SQL).
Diseño de la publicación
Replique la ejecución de los procedimientos almacenados al realizar actualizaciones por lotes en las tablas publicadas.
Si tiene actualizaciones por lotes que afectan ocasionalmente a un gran número de filas en el suscriptor, considere la posibilidad de actualizar la tabla publicada mediante un procedimiento almacenado y publique la ejecución del procedimiento almacenado. En vez de enviar una actualización o eliminación para cada fila afectada, el Agente de distribución ejecutará el mismo procedimiento en el suscriptor con los mismos valores de parámetros. Para obtener más información, vea Publicar la ejecución de procedimientos almacenados en la replicación transaccional.
Reparta los artículos entre varias publicaciones.
Si no puede utilizar el parámetro -SubscriptionStreams que se describe más adelante en este tema, considere la posibilidad de crear varias publicaciones. Repartir artículos entre dichas publicaciones permite que la réplica aplique en paralelo los cambios a los suscriptores.
Consideraciones de suscripción
Utilice agentes independientes en lugar de agentes compartidos si tiene varias publicaciones en el mismo publicador (este es el valor predeterminado del Asistente para nueva publicación).
Ejecute los agentes continuamente en lugar de utilizar programaciones muy frecuentes.
Configurar los agentes para que se ejecuten continuamente en vez de crear programaciones frecuentes (por ejemplo, cada minuto) mejora el rendimiento de la réplica, ya que el agente no tiene que iniciarse y detenerse. Si configura el Agente de distribución para que se ejecute continuamente, los cambios se propagan con latencia baja a los demás servidores conectados en la topología. Para obtener más información, vea:
SQL Server Management Studio: Cómo especificar programaciones de sincronización (SQL Server Management Studio)
Programación de la réplica con Transact-SQL: Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL)
Parámetros del Agente de distribución y del Agente de registro del LOG
Utilice el parámetro –MaxCmdsInTran para el Agente de registro del LOG.
El parámetro –MaxCmdsInTran especifica el número máximo de instrucciones agrupadas en una transacción cuando el Agente de registro del LOG escribe comandos en la base de datos de distribución. El uso de este parámetro permite al Agente de registro del LOG y al Agente de distribución dividir las transacciones grandes (compuestas por muchos comandos) del publicador en varias transacciones más pequeñas cuando se aplican comandos en el suscriptor. Especificando este parámetro se puede reducir la contención en el distribuidor y la latencia entre el publicador y el suscriptor. Puesto que la transacción original se aplica en unidades más pequeñas, el suscriptor puede obtener acceso a las filas de una transacción lógica del publicador de gran tamaño antes de que finalice la transacción original, lo que interrumpe la estricta atomicidad transaccional. El valor predeterminado es 0, que conserva los límites de la transacción del publicador. Este parámetro no se aplica a los publicadores de Oracle.
Utilice el parámetro –SubscriptionStreams para el Agente de distribución.
El parámetro –SubscriptionStreams puede mejorar en gran medida el rendimiento de la réplica. Permite establecer varias conexiones con un suscriptor para aplicar lotes de cambios en paralelo, al tiempo que mantiene muchas de las características transaccionales presentes cuando se usa un solo subproceso. Si una de las conexiones no se puede ejecutar o confirmar, todas las conexiones anularán el lote actual y el agente utilizará una sola secuencia para volver a intentar los lotes con errores. Antes de que finalice esta fase de reintento, pueden aparecer incoherencias transaccionales temporales en el suscriptor. Una vez que se han confirmado correctamente los lotes con errores, el suscriptor vuelve al estado de coherencia transaccional.
Se puede especificar un valor para este parámetro del agente utilizando @subscriptionstreams de sp_addsubscription (Transact-SQL).
Aumente el valor del parámetro –ReadBatchSize para el Agente de registro del LOG.
El Agente de registro del LOG y el Agente de distribución aceptan tamaños de lotes en las operaciones de lectura y confirmación de transacciones. Los lotes contienen, de forma predeterminada, 500 transacciones. El Agente de lectura del LOG lee el número de transacciones especificado en el registro, estén o no marcadas para la réplica. Cuando se escribe un gran número de transacciones en una base de datos de publicaciones, pero sólo un pequeño subconjunto de ellas está marcado para réplica, deberá utilizar el parámetro -ReadBatchSize para aumentar el tamaño del lote leído por el Agente de registro del LOG. Este parámetro no se aplica a los publicadores de Oracle.
Aumente el valor del parámetro –CommitBatchSize para el Agente de distribución.
Confirmar un conjunto de transacciones tiene una sobrecarga fija; al confirmar un número mayor de transacciones con menos frecuencia, la sobrecarga se reparte entre un mayor volumen de datos. No obstante, las ventajas de aumentar este parámetro disminuyen ya que el costo de aplicar los cambios está determinado por otros factores, como la E/S máxima del disco que contiene el registro. Además, existe un desequilibrio que hay que tener en cuenta: cualquier error que provoque que el Agente de distribución vuelva a comenzar debe revertir y volver a aplicar un mayor número de transacciones. En las redes no confiables, un valor más reducido puede provocar menos errores y que sea necesario revertir y volver a aplicar un menor número de transacciones en caso de producirse un error.
Disminuya el valor del parámetro –PollingInterval para el Agente de registro del LOG.
El parámetro -PollingInterval especifica con qué frecuencia se consulta el registro de transacciones de una base de datos publicada para que las transacciones se repliquen. El valor predeterminado es 5 segundos. Si reduce este valor, el registro se sondea más a menudo, lo que puede dar lugar a una menor latencia para el envío de transacciones de la base de datos de publicaciones a la de distribución. No obstante, debe equilibrar la necesidad de una menor latencia frente al aumento de carga en el servidor debido a sondeos más frecuentes.
Los parámetros del agente se pueden especificar en los perfiles de agente y en la línea de comandos. Para obtener más información, vea: