sql >> Base de Datos >  >> RDS >> Sqlserver

Interiores de replicación transaccional de SQL Server:parte 2

Replicación transaccional de SQL Server es una de las técnicas de replicación más utilizadas para copiar o distribuir datos entre múltiples destinos. En el artículo anterior, discutimos la replicación de SQL Server, los tipos de replicación y los aspectos internos básicos sobre cómo funciona la replicación transaccional. Ahora, vamos a sumergirnos en los aspectos internos avanzados de cómo funciona la replicación transaccional de SQL Server.

Arquitectura de replicación transaccional

Antes de comenzar, te recomiendo que actualices tus conocimientos con mi artículo anterior aquí.

Comencemos examinando la arquitectura de replicación transaccional de SQL Server que se muestra a continuación en la documentación de Microsoft.

En la Base de datos de editores , cree una Publicación que comprende la lista de Artículos (Mesas , Vistas , etc.,) que necesita replicar en el suscriptor base de datos. Una vez que los artículos estén habilitados para replicación, cualquier cambio que ocurra en estos artículos será marcado para replicación. en la base de datos de registros transaccionales de Publisher.

La replicación transaccional de SQL Server se puede inicializar desde el Editor al Distribuidor y luego al Suscriptor base de datos a través de Agente de instantáneas o Completo Copias de seguridad . El Agente de Instantáneas puede realizar la Inicialización a través del Asistente de configuración de replicación . La copia de seguridad completa solo se admite a través de instrucciones T-SQL.

El agente del lector de registros escanea el registro transaccional de la base de datos de Publisher para detectar los cambios marcados para la replicación. Ignora otros cambios capturados en los registros transaccionales y copia los cambios de datos del registro transaccional a la base de datos de distribución.

La base de datos de distribución puede estar en Publisher o Subscriber, o puede estar en otra instancia de SQL Server independiente. Tenga en cuenta lo siguiente:

  • El Log Reader Agent se ejecuta continuamente desde el servidor de distribución para buscar nuevos comandos marcados para la replicación. Sin embargo, si no desea que se ejecute de forma continua y desea que se ejecute de forma programada, podemos cambiar el trabajo SQL del Agente de registro del registro que se creará.
  • Log Reader Agent recoge todos los registros que están marcados para la replicación de los lotes de inicio de sesión transaccional y los envía a la base de datos de distribución.
  • El agente de lectura del registro solo recoge transacciones confirmadas del registro transaccional de la base de datos del editor. Por lo tanto, cualquier consulta de ejecución prolongada en la base de datos de Publisher puede afectar directamente a la replicación, ya que está esperando que se complete la transacción activa.

El agente de distribución recoge todos los comandos nuevos no distribuidos de la base de datos de distribución y los aplica a la base de datos de suscripción a través de Push o Tirar Mecanismo .

  • Suscripción automática – el Distribuidor asume la responsabilidad de aplicar los cambios de la base de datos de distribución al suscriptor.
  • Extraer suscripción: el suscriptor la base de datos toma posesión para obtener los cambios de la base de datos de distribución al suscriptor.

Una vez que los registros se distribuyen correctamente desde Distribución a la base de datos de Suscriptor, se marcarán como Distribuidos. y también marcado para eliminación de la base de datos de distribución .

Uno de los trabajos de mantenimiento de replicación clave es la limpieza de distribución :El trabajo de distribución se ejecuta cada 10 minutos para eliminar registros distribuidos de la base de datos de distribución para mantener el tamaño de la base de datos de distribución bajo control.

Por lo tanto, nuestro objetivo para el artículo actual es explorar los siguientes temas:

  • Base de datos de distribución
  • Agentes de replicación
    • Agente de instantáneas
    • Agente de lectura de registros
    • Agente de distribución
  • Perfiles de agentes de replicación
  • Trabajos de mantenimiento de replicación
  • Latencia de replicación y tokens de seguimiento
  • Utilidad TableDiff
  • Alertas del Agente SQL Server

Base de datos de distribución de SQL Server

Una base de datos de distribución es una base de datos del sistema creada durante la configuración de la replicación. Es el corazón de la replicación ya que la mayor parte del proceso se ejecuta fuera de una base de datos de distribución.

Debido a la naturaleza de la base de datos de distribución, solo podemos realizar operaciones limitadas en ella, como copia de seguridad y restauración. No podemos soltarlo directamente como bases de datos de usuarios.

Para una base de datos enorme con una gran cantidad de datos que se replican, debemos tomar algunas medidas especiales para mejorar el rendimiento de la replicación:

De forma predeterminada, la base de datos de distribución se crea en la ruta de instalación predeterminada configurada en SQL Server . Si no está configurado, se creará en el C : unidad o en las carpetas de instalación de SQL Server. Le recomendamos que mueva la base de datos de distribución a un almacenamiento/disco más rápido para mejorar el rendimiento.

El Tamaño de archivo inicial y Crecimiento automático de la base de datos de distribución se configurará de acuerdo con la configuración de Tamaño de archivo inicial y Crecimiento automático de la base de datos modelo. Configure el Tamaño del archivo inicial a un mejor valor, como 10 GB, en caso de que la replicación de la base de datos esté ocupada transaccionalmente. Las propiedades de crecimiento automático deben tener un máximo de 512 MB o 1 GB para los archivos de datos y de registro. Entonces, no habrá mucha fragmentación en los archivos de datos y de registro.

Configurar el Diario o Trabajos de copia de seguridad de rutina para incluir la base de datos de distribución con fines de referencia o solución de problemas en caso de corrupción o pérdida de datos.

Configurar la Reorganización del índice diario o Mantenimiento trabajos para incluir la base de datos de distribución. La base de datos involucra enormes inserciones de datos en MSrepl_transactions y MSrepl_commands mesas.

Nota:El sondeo continuo en estas 2 tablas y la ELIMINACIÓN de ellas después de enviar datos con éxito a la base de datos del suscriptor aumenta el riesgo de fragmentación. La reconstrucción de estas tablas de forma programada puede mejorar el rendimiento de la base de datos de distribución.

Para ver y modificar cualquiera de los atributos de la base de datos de distribución relacionados con la replicación, haga clic con el botón derecho en Replicación > Propiedades del distribuidor :

Haga clic en los puntos suspensivos a la derecha para ver más detalles sobre las opciones individuales enumeradas.

Preste atención, cambiar cualquier parámetro puede afectar el rendimiento de la base de datos de distribución. Por lo tanto, implemente cambios solo después de evaluar cuidadosamente todos los parámetros que desea modificar.

Retención de transacciones especifica cuántos datos se deben retener en la base de datos de distribución. Los valores mínimo y máximo se pueden especificar en horas o días.

El valor de retención de transacciones establecido en 0 horas indica que una vez que los registros se replican correctamente en la base de datos del suscriptor, se pueden eliminar de la base de datos de distribución. Si aumenta este valor, aumentará el tamaño de la base de datos de distribución. Por lo tanto, debemos planificarlo en consecuencia.

Retención de historial especifica el período de retención para almacenar los datos del historial de rendimiento de la replicación transaccional. De forma predeterminada, son 48 horas.

Para descartar una base de datos de distribución , necesitamos Deshabilitar la publicación asociado con esa base de datos de distribución en particular y luego suéltelo usando uno de los dos métodos. Uno es una combinación de Desactivar publicación y el asistente de Distribución. Otro está usando sp_dropdistributor o sp_dropdistributiondb procedimientos. El asistente utiliza internamente estos 2 procedimientos para deshabilitar la distribución y descartar la base de datos de distribución.

Agentes de replicación de SQL Server

Agentes de replicación son programas independientes responsables de rastrear los cambios de datos del publicador y propagar esos cambios a las bases de datos de distribuidores y suscriptores. Se ejecutan como trabajos del Agente SQL Server.

Primero, veamos la ubicación de estos programas independientes.

Para configurar la replicación, necesitamos tener los componentes de replicación instalado a través del instalador de SQL Server. Cuando haya terminado, podemos ver los programas independientes relacionados con el agente de replicación disponibles en la ruta de instalación:

C:\Archivos de programa\Microsoft SQL Server\130\COM

En mi caso, la versión de la versión de SQL Server es 2016. Por lo tanto, está por debajo de 130 en la ruta.

Para cada Agente de replicación, podemos ver el respectivo programa independiente disponible:

  • DISTRIB.exe:agente de distribución
  • Logread.exe:agente de lectura de registros
  • Qrdrsvc.exe:agente de servicio de lectura de cola
  • Replmerg.exe:agente de replicación de mezcla
  • Snapshot.exe:agente de instantáneas
  • Tablediff.exe:utilidad para comparar tablas. Podemos entrar en más detalles más adelante en este artículo.

Ahora que sabemos de qué son responsables estos programas independientes y dónde están ubicados, podemos entender cómo se ejecutan a través de los trabajos del Agente SQL Server.

Dado que estamos tratando con la replicación transaccional de SQL Server, revisaremos los trabajos del Agente de instantáneas, el Agente de lectura del registro y el Agente de distribución (la misma lógica se aplica a todos los demás agentes).

Agente de instantáneas

El Agente de instantáneas se ejecuta desde el servidor que contiene la base de datos de distribución. Prepara el esquema y los datos iniciales de todos los artículos incluidos en una publicación en un editor, crea los archivos de instantáneas en la carpeta de instantáneas y registra los detalles de sincronización en la base de datos de distribución.

De la distribución MSSnapshot_agents tabla, podemos identificar el trabajo del Agente SQL Server que realiza las actividades del Agente de instantáneas. Cada publicación implica un trabajo del Agente SQL Server dedicado que debe encargarse de las responsabilidades del Agente de instantáneas.

Expanda Agente SQL Server y abra el nombre del trabajo mencionado anteriormente. Mostrará los detalles y la Categoría nombre – REPL-Instantánea

Haga clic en el Paso para ver las actividades realizadas por el agente de instantáneas.

Haga clic en algún paso individual para ver la información sobre el trabajo del agente de instantáneas.

Paso 1 registra una entrada en la tabla de historial cada vez que se inicia el agente de instantáneas utilizando el sp_MSadd_snapshot_history procedimiento.

La tabla que contiene el historial de los detalles ejecutados por el agente de instantáneas es MSsnapshot_history tabla en la base de datos de distribución.

Coincidirá con Ver estado del agente de instantáneas ventana de diálogo.

Ir al Paso 2Ejecutar agente . iniciará el trabajo del Agente de Instantáneas .

Bajo el Comando , no pudimos encontrar ninguna instrucción o consulta T-SQL. Solo se enumeraron algunos parámetros. Entonces, la respuesta se encuentra en la sección resaltada en la ilustración anterior. Muestra que el paso de trabajo Tipo es Instantánea de replicación que inicia el programa independiente snapshot.exe para realizar las responsabilidades del agente de instantáneas.

Para obtener más detalles sobre snapshot.exe, consulte este artículo de MSDN. También entraremos en detalles mientras solucionamos los problemas relacionados con la replicación más adelante.

Finalmente, vamos al Paso 3 – el último paso de trabajo. Captura cualquier cierre inesperado de los trabajos del agente y los desconecta.

Agente de lectura de registros

Cada vez que la publicación se configura en una base de datos, cualquier cambio que ocurra en esos artículos se marca para replicación en el registro de transacciones. El Log Reader Agent lee esos cambios de datos a través de logread.exe y los almacena en la base de datos de distribución a través de 2 procesos separados:

  • Leer registros de transacciones – utiliza el sp_replcmds procedimiento almacenado extendido para buscar cambios en los datos del Publisher. Dado que este procedimiento almacenado hace referencia a archivos DLL, no se identifican los detalles internos sobre cómo Microsoft lee exactamente los archivos de registro. Sin embargo, podemos probar funciones no documentadas como fn_dblog() y fn_dump_dblog() para comprender cómo funciona el archivo de registro de transacciones.
  • Escribir en base de datos de distribución – utiliza el sp_MSadd_replcmds procedimiento almacenado en la base de datos de distribución para escribir los datos binarios leídos de los registros de transacciones de la base de datos de Publisher. Escribe los detalles de la transacción en MSrepl_transactions tabla y comandos individuales a MSrepl_commands mesa.

Solo hay disponible un trabajo del Agente SQL Server del lector de registros para cada base de datos publicada. Puede identificar su nombre como se muestra a continuación:

Expanda el Agente SQL Server y abra el trabajo del Agente de lectura del registro anterior para ver los pasos. Mostrará el trabajo Categoría en Lector de registros de replicación.

Haga clic en Pasos para ver los pasos individuales realizados por Log Reader Agent. Al igual que con el trabajo del Agente de instantáneas, podemos ver 3 pasos equivalentes para el trabajo del Agente de lectura del registro.

Paso 1 llama al sp_MSadd_logreader_history procedimiento para registrar los mensajes del historial de estado de inicio del Log Reader Agent en el MSlogreader_history mesa.

Paso 2 inicia el proceso del Log Reader Agent utilizando el programa independiente logread.exe .

Puede encontrar más detalles sobre logread.exe en el artículo respectivo de MSDN. Más adelante, también examinaremos los parámetros de configuración críticos del Log Reader Agent.

Paso 3 captura un apagado abrupto del trabajo del Agente de registro del registro.

Agente de distribución

El agente de distribución (DISTRIB.exe) fue utilizado por la replicación transaccional y de instantáneas para aplicar los archivos de instantáneas iniciales y las transacciones pendientes incrementales o disponibles desde la base de datos de distribución a la base de datos del suscriptor.

Este agente se ejecuta desde el servidor de distribución para las suscripciones de inserción y el servidor del suscriptor para las suscripciones de extracción. Para encontrar el nombre del trabajo del Agente SQL Server que realiza las responsabilidades del agente de distribución, podemos ejecutar la consulta específica como se muestra a continuación:

Expanda el trabajo del Agente SQL Server y ábralo para ver más información y la categoría asignada a la distribución de replicación.

Haga clic en Pasos – verá los pasos similares a los pasos expuestos anteriormente de los trabajos del agente de instantáneas y de registro.

Paso 1 llama al sp_MSadd_distribution_history procedimiento para registrar los mensajes del historial de estado de inicio del Log Reader Agent en el MSdistribution_history mesa.

Paso 2 inicia el proceso del Agente de distribución (DISTRIB.exe) con los parámetros predeterminados.

Para obtener más detalles sobre DISTRIB.exe, consulte el artículo de MSDN. Además, repasaremos los parámetros de configuración críticos del agente de distribución en los próximos artículos.

Paso 3 captura detalles sobre el cierre abrupto del trabajo del Agente de distribución.

Perfiles de agentes de replicación

Desde las Propiedades del distribuidor , podemos tener la opción de ver los Perfiles de agentes de replicación . Deje los perfiles de agente en los valores predeterminados y cámbielos solo según sea necesario para solucionar problemas.

Haga clic en Valores predeterminados del perfil para ver los valores predeterminados configurados para todos los agentes de replicación disponibles en el servidor.

Seleccione los Agentes de distribución y haga clic en los puntos suspensivos junto al Perfil de agente predeterminado para ver los valores configurados. Vea la ilustración a continuación:

Ver el Perfil de agente predeterminado de los Agentes Instantáneos Lector Agente:

Perfil de agente predeterminado para el Lector de registros Agente:

Trabajos de mantenimiento de replicación

Además de los agentes de replicación, tenemos trabajos de mantenimiento de replicación .

Estos son trabajos del Agente SQL Server creados durante la configuración de la replicación transaccional de SQL Server. Están disponibles para garantizar que la replicación transaccional funcione correctamente.

Algunos trabajos de mantenimiento de la replicación son esenciales para la replicación transaccional. Vamos a repasarlos.

  • Limpieza de distribución: Distribución – ejecuta el sp_MSdistribution_cleanup procedimiento para eliminar comandos de replicación de MSrepl_transactions y MSrepl_commands mesas. La limpieza ocurre en la base de datos de distribución después de que los comandos se envían correctamente a la base de datos del suscriptor según el valor del período de retención de transacciones configurado en la base de datos de distribución. De forma predeterminada, este trabajo se ejecuta cada 10 minutos en la base de datos de distribución. Cambie estos valores solo después de una evaluación en profundidad.
  • Agente Limpieza de historial:distribución – ejecuta el sp_MShistory_cleanup procedimiento en la base de datos de distribución para limpiar registros históricos anteriores al período de retención de historial configurado en esa base de datos. Por defecto está configurado para 48 días y se ejecuta cada 10 minutos. Si desea cambiar estos valores, considere todos los aspectos cuidadosamente.
  • Caducado Limpieza de suscripción – ejecuta el sp_expired_subscription_cleanup procedimiento en la base de datos maestra para dar de baja aquellas suscripciones que caducaron o estuvieron mucho tiempo inactivas. De forma predeterminada, este procedimiento se ejecuta una vez al día.

Latencia de replicación y tokens de seguimiento

Latencia de replicación es el tiempo requerido por el proceso de replicación para rastrear cualquier cambio que ocurra en los artículos publicados desde la base de datos del editor hasta que se entregue correctamente al suscriptor a través del distribuidor.

La latencia de replicación se mide en milisegundos. El valor objetivo de 0 (replicación en tiempo real) a un valor muy bajo (casos ideales). Es una de las medidas clave para monitorear el rendimiento de la replicación.

Podemos verificar la latencia de replicación mediante el Monitor de replicación o los sp_replcounters dedicados procedimiento.

Desde el Monitor de replicación tiene la actualización tasa, puede haber ligeras desviaciones de los valores observados. Para superar las ligeras desviaciones al calcular la latencia de replicación, los tokens de seguimiento vienen a nuestro rescate.

Haga clic en Fichas de rastreo (vea la imagen de arriba) para enviar un nuevo conjunto de comandos de prueba desde Publisher. Luego, mídalo cuando llega a la base de datos del Distribuidor y cuando fue enviado a la base de datos del Suscriptor. Haga clic en Insertar rastreador para enviar tokens de seguimiento desde la base de datos de Publisher:

Una vez que los registros se reciben correctamente en el suscriptor, podemos realizar un seguimiento de la latencia de replicación total para nuestra configuración actual. En nuestro caso, son 9 segundos:4 segundos de publicador a distribuidor y 5 segundos de distribuidor a suscriptor.

Utilidad Tablediff

Utilidad Tablediff (tablediff.exe) se instalará en la ruta C:\Program Files\Microsoft SQL Server\130\COM una vez que hayamos instalado los componentes de replicación.

La utilidad TableDiff compara 2 tablas para la no convergencia. Significa que podemos comparar 2 tablas e identificar las diferencias entre ellas. Luego, sincroniza la tabla de destino en comparación con la tabla de origen mediante la generación de secuencias de comandos INSERT/UPDATE/DELETE dedicadas. Hay más detalles disponibles en la documentación oficial.

Dado que la replicación transaccional de SQL Server no se preocupa por los cambios manuales en la base de datos del suscriptor, esta utilidad puede ayudar a sincronizar este tipo de tablas cuando sea necesario. Sin embargo, no tiene un asistente o interfaz de usuario:solo puede acceder a él a través del símbolo del sistema o desde archivos por lotes.

Otras herramientas pueden simplificar la comparación y la sincronización. El paquete de comparación de dbForge para SQL Server comprueba las discrepancias en las bases de datos y las tablas específicas las identifica y analiza. También genera los scripts necesarios para sincronizarlos. Ofrece una interfaz visual y un montón de opciones para ejecutar las tareas de forma rápida y sencilla.

Alertas del Agente SQL Server

Todos los componentes clave relacionados con los agentes de replicación residen como trabajos que residen en los trabajos del Agente SQL Server. Por lo tanto, es fundamental monitorear cómo funcionan los trabajos del Agente SQL Server continuamente para garantizar que la replicación funcione sin problemas. Los problemas más comunes se encuentran a continuación:

  • Problema de permisos al ejecutar cualquiera de los trabajos del agente de replicación
  • Problema de permisos al ejecutar cualquiera de los trabajos de mantenimiento de replicación.
  • Problema de permisos para acceder a la base de datos de publicación, distribución o suscriptor.
  • El Agente SQL Server no está configurado para iniciarse automáticamente al reiniciar el servidor.
  • Varios otros problemas de datos relacionados con la replicación, como conflictos, datos faltantes, etc.

Es por eso que debemos tener un mecanismo de alerta adecuado para notificar al DBA u otra persona sobre cualquier problema de inmediato.

Para alertar a los DBA u otras personas en caso de fallas o errores en el trabajo, debemos configurar el correo de la base de datos para enviar alertas por correo electrónico. Permite que el DBA responda de inmediato y solucione el problema. Discutiremos cómo configurar el correo de la base de datos y las alertas en un artículo separado más adelante.

Al configurar la replicación, SQL Server crea de forma predeterminada el siguiente conjunto de alertas. Puede configurarlos fácilmente para los criterios requeridos. También asegura el envío de Notificaciones a las personas requeridas para una acción inmediata.

Conclusión

Gracias por leer otro gran artículo sobre replicación. Espero que haya ayudado a aclarar los aspectos internos de la replicación transaccional y los detalles sobre la base de datos de distribución, los agentes de replicación y los programas independientes responsables de ellos. También identificamos la latencia de replicación, las alertas y los tokens de seguimiento.

Ahora podemos profundizar más y aprender a tratar y resolver los problemas de replicación de manera profesional. ¡Estén atentos para el próximo artículo!