SQL11: Replicación

  • 538 views
Uploaded on

En esta sesión mostraremos el funcionamiento de la replicación de SQL Server a bajo nivel. Es importante conocer exactamente cómo funcionan los agentes de réplica y que acciones llevan a cabo para …

En esta sesión mostraremos el funcionamiento de la replicación de SQL Server a bajo nivel. Es importante conocer exactamente cómo funcionan los agentes de réplica y que acciones llevan a cabo para replicar nuestros datos. Dicho conocimiento es especialmente valioso cuando tenemos que diagnosticar las causas reales de un error en nuestra arquitectura de réplica.

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
538
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
30
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. REL-413AVANZADOS: ReplicaciónRUBÉN GARRIGÓSMentor –Área Motor RelacionalMCP – MCAD – MCSD – MCTS – MCT - MCITPrgarrigos@solidq.com
  • 2. Objetivos de la sesiónα Rápido vistazo a la replicación en SQL Serverα Razones para ir más allá: La milla extraα Replicación transaccional β Agente lector del log de transacciones β Agente de distribuciónα Replicación de mezcla β Agente de mezcla
  • 3. Replicación en SQL Server
  • 4. Replicación en SQL ServerDefiniciónα Es un conjunto de tecnologías que nos permiten distribuir y sincronizar información entre bases de datosα Modelo de publicaciones
  • 5. Replicación en SQL ServerConceptos claveα Artículo: Un artículo es un conjunto de datos, estructuras u operaciones que van a ser replicadosα Publicación: Es un contenedor de un conjunto de artículos a replicar que están lógicamente relacionados entre síα Suscripción: Entidad que indica que un suscriptor desea recibir los datos de una publicación, de que forma y con que frecuencia
  • 6. Replicación en SQL ServerTipologíasα Transaccional β Unidireccional «no modificable» β Actualizable inmediata β Actualizable con cola β Doble transaccional β Peer to peer (SQL 2005+)α Mezclaα Instantáneaα Basándonos en nuestra experiencia: β ~60% Transaccional unidireccional β ~30% Mezcla β ~5% P2P β ~5% Instantánea, transaccionales actualizables, etc.
  • 7. Escala de réplicas Mayor autonomía Mayor latencia Mezcla Instantánea Transaccional unidireccional Transaccional bidireccional - P2P Transaccional actualizableTransacciones distribuidasMenor autonomíaMenor latencia
  • 8. La milla extra
  • 9. La milla extraRazones para recorrerlaα Un mayor conocimiento nos llevará a tomar decisiones más acertadas.α Una mala decisión en una fase inicial de un proyecto tiene un alto coste a posterioriα Evitar utilizar un martillo cuando lo que tenemos es un tornillo (o viceversa)  Ojo con los “vendemotos”α No debemos analizar la viabilidad tecnológica de nuestra elección sin tener en cuenta múltiples factores β Políticas internas β Mantenibilidad a largo plazo β Fiabilidad β Extensibilidad y flexibilidad ante cambios β Escalabilidad considerando las previsiones a X años vista β Seguridad
  • 10. La milla extraAplicada a la replicaciónα Conocer a bajo nivel el funcionamiento de los distintos tipos de replicación (o al menos el que implementemos) β Lógica de funcionamiento de los agentes β Procedimientos almacenados utilizados β Permisos necesarios β Flujo de datos y almacenes de metadatosα SQL Profiler es nuestro amigo cuando la documentación se queda corta β La implementación interna de los agentes  Debuggerα Cuando tenemos algún error, este conocimiento de bajo nivel es IRREMPLAZABLE para volver a levantar la réplica minimizando el impacto en el negocio.α La replicación debe considerarse como un factor transversal a nuestra base de datos β Mantenimiento de base de datos
  • 11. Replicación Transaccional
  • 12. Replicación transaccionalAgentesα Agente de instantáneas (opcional)α Agente lector del log de transaccionesα Agente de distribuciónα Agente de lectura de cola de replicación (obsoleto)
  • 13. Replicación transaccionalAgente de instantáneaα Se utiliza para inicializar los subscriptores habitualmente β Inicializaciones manuales β Inicializaciones con backup β Parámetro @sync_type del procedimiento sp_Addsubscriptionα Genera un conjunto de ficheros que contendrán los artículos de la publicación β Copiamos metadatos + datos (BCP)α Se ejecuta normalmente en el distribuidor β Puede ser invocado como un job, desde línea de comandos, mediante RMO, etc.α Soporta Database Mirroring en el publicadorα Seguridad β Db_owner de la base de datos publicada y de la de distribución β Escritura en la carpeta de instantáneas
  • 14. Replicación transaccionalAgente de instantáneaα Perfiles de agente β Compartir parametrización entre instancias de un mismo tipo β No todos los parámetros son configurables desde el perfilα Parámetros interesantes β BcpBatchSize β MaxBcpThreads (1) β DynamicFilterHostName β DynamicFilterLogin β OutputVerboseLevel β HistoryVerboseLevel β EncryptionLevel
  • 15. Replicación transaccionalAgente de instantáneaα Una instantánea está compuesta de varios tipos de ficherosα .BCP  Datosα .SCH  Esquema β Detecta dependenciasα .IDX  Índicesα .PRE  Scripts limpiezaα Destino: β PATH β UNC β FTP
  • 16. Replicación transaccionalAgente de instantáneaα Los ficheros BCP de la instantánea son ficheros BCP estándar por lo que podemos utilizarlos con otros fines β Restaurar parte de los datos manualmente con BCP IN:α > bcp tabla in fichero.bcp -dbasededatos -Sinstancia -T
  • 17. Replicación transaccionalAgente lector del log de transaccionesα Se utiliza para extraer del log de transacciones los cambios marcados como pendientes de replicarα Se ejecuta en el distribuidor β Puede ser invocado como un job o desde línea de comandos β Una única instancia por base de datos: 1 log  1 agente β Soporta Database Mirroring en el publicadorα Seguridad β Db_owner de la base de datos publicada y de la de distribución
  • 18. Replicación transaccionalAgente lector del log de transaccionesα El flujo de trabajo de los agentes se obtiene con la ayuda de SQL Server Profiler:1. Llama a sp_MSadd_LogReader_History para indicar que arrancamos el agente2. Obtiene datos para arrancar correctamente el agente para esta publicación específica (sp_MShelp_logreader_agentid )3. Obtiene los parámetros del perfil asociado (sp_MShelp_profile)4. Llama a sp_MSadd_logreader_history para indicar que estamos inicializados5. Obtenemos la última transacción donde nos quedamos leyendo del log (sp_MSget_last_transaction)
  • 19. Replicación transaccionalAgente lector del log de transacciones6. Leemos del log de transacciones (sp_replcmds)7. Procesamos los registros insertándolos en la base de datos de distribución (sp_MSadd_repl_commands )8. Marcamos la transacción como confirmada (sp_repldone)9. Registramos los comandos entregados (sp_MSAdd_logreader_history): “N transactions with M commands were delivered”10. Esperamos x segundos según la frecuencia configurada11. GOTO 5 (sp_MSget_last_transaction)Si ocurre algún error recuperable (timeout de conexión,reinicio del publicador, etc.) la política de reintentos pordefecto del job del agente la resolverá  Monitorización
  • 20. Replicación transaccionalAgente lector del log de transaccionesα Parámetros interesantes β OutputVerboseLevel β HistoryVerboseLevel β PollingInterval (5) β ReadBatchSize (500 transacciones) β ReadBatchThreshold (0 comandos) β Buffers (2) β MaxCmdsInTran (0 o romper atomicidad)
  • 21. Replicación transaccionalAgente de distribuciónα Se utiliza para entregar las instantáneas iniciales y para aplicar los cambios pendientes de la base de datos de distribución al subscriptorα Se ejecuta en el distribuidor/subscriptor (PUSH vs PULL) β Puede ser invocado como un job o desde línea de comandos β Una instancia por subscripción o compartido entre variasα Seguridad β Db_owner de la base de datos subscrita y de la de distribución β Mienbro de la PAL (Publication Access List) correspondiente β Permisos de lectura sobre la carpeta de instantáneas
  • 22. Replicación transaccionalAgente de distribución1. Indicamos que arrancamos el agente (sp_Msadd_distribution_history)2. Comprobamos el estado de la suscripción (sp_MSSubscription_Status). Si está expirada, no podremos continuar.3. Obtenemos la información del suscriptor (sp_mshelp_subscriber_info)4. Obtenemos los datos del agente específico de este suscriptor (sp_mshelp_subscription_agentid)5. Indicamos que estamos listos para comenzar y conectamos al suscriptor (sp_Msadd_distribution_history)6. Comprobamos los permisos necesarios en el suscriptor (sp_MScheck_subscribe)
  • 23. Replicación transaccionalAgente de distribución7. Actualizamos el estado de la suscripción (Sp_MSinit_Subscription_agent)8. Obtenemos la última transaccion replicada de MSreplication_subscriptions (xact_seqno) Todos los valores por encima de dicho valor, están pendientes de replicar.9. Obtenemos las transacciones y comandos pendientes de MSReplication_transactions y MSreplication_commands y los aplicamos utilizando sp_MS_get_repl_commands.10. Actualizamos MSreplication_subscriptions con la última transacción entregada11. Registramos en el log dicha entrega con sp_MSDistribution_history y el mensaje “n transaction(S) with m command(s) were delivered”12. GOTO 8
  • 24. Replicación transaccionalAgente de distribuciónα Parámetros interesantes β BcpBatchSize β MaxBcpThreads (2xCPU, 8 MAX) β CommitBatchSize (100 transacciones) β CommitBatchThreshold (1000 comandos) β QueryTimeOut (1800) β MaxDeliveredTransactions (0) β TransactionPerHistory (100) β Buffers (2) β PollingInterval (5) β SubscriptionStreams (1) β SkipErrors
  • 25. Un largo viaje transaccional
  • 26. Replicación de Mezcla
  • 27. Replicación de mezclaAgente de mezclaα Se utiliza para todo el proceso de mezcla β Gestión de rangos, cambios de esquema, creación de generaciones… β Proceso de mezclado con resolución de conflictos (fila, columna,…)α Se ejecuta en el distribuidor o en el subscriptor β Puede ser invocado como un job, desde línea de comandos, RMO,… β 1 instancia por subscripciónα Seguridad β Db_owner de la base de datos subscrita y de la de distribución β Tener un login asociado en la base de datos publicada β Mienbro de la PAL (Publication Access List) correspondiente β Permisos de lectura sobre la carpeta de instantáneasα No se respeta el orden original de los cambios β Puede ser necesario NFR en triggers, constraints, etc.α Se pueden omitir cambios intermedios
  • 28. Replicación de mezclaDetección de cambiosα Añade un ROWGUID  Lineageα Triggers β MSmerge_ins_<GUID> β MSmerge_upd_<GUID> β MSmerge_del_<GUIDα Algunas tablas importantes β MSmerge_contents  1 fila por inserción o modificación β MSmerge_tombstone  1 fila por borrado β MSmerge_genhistory  1 fila por generación de cambios β Msmerge_conflict_table  tabla de conflictos del artículoα Mantenimiento β Fragmentación β Tamaño  periodo de retención (14 días)
  • 29. Replicación de mezclaAgente de mezclaEl flujo completo es complejo y depende de muchos factores: elfiltrado de artículos, la política de resolución de conflictos, elparticionado  la réplica de mezcla tiene un consumo de CPUapreciable  sincronizaciones puntuales con autonomía1. Indicamos que arrancamos el agente (sp_MSadd_merge_history)2. Comprobamos que no está el mismo agente ya ejecutando (sp_MSensure_single_instance)3. Obtenemos información de la publicación (sp_Msgetreplicainfo)4. Obtenemos cambios de esquema pendientes (sp_Msenumschemachange)
  • 30. Replicación de mezclaAgente de mezcla5. Cerramos la generación (sp_Msmakegeneration)6. Obtenemos la enumeración de cambios (sp_Msenumchanges)7. Aplicamos los cambios generando el comando DML tras aplicar la resolución de conflictos (sp_Msgetmetadata)8. Marcamos las últimas generaciones enviadas y recibidas (sp_Mssetlastsentgen, sp_Mssetlastrecgen)9. Indicamos por donde nos quedamos sincronizando (sp_Msmergeupdatelastsyncinfo)10.Indicamos que hemos acabado de sincronizar: «Merge completed after processing N data change(s) (N insert(s), N update(s), N delete(s), N conflict(s)).» (sp_MSadd_merge_history)
  • 31. Replicación de mezclaAgente de mezclaα Parámetros interesantes β DestThreads (4) β SrcThreads (3) β ParallelUploadDownload β (Download/Upload)GenerationsPerBatch β (Download/Upload)ReadChangesPerBatch β (Download/Upload)WriteChangesPerBatch β MaxDownloadChanges β MaxUploadChanges β MakeGenerationInterval β PollingInterval (60) β StartQueueTimeout
  • 32. Mezclando datos
  • 33. Si quieres disfrutar de las mejores sesiones denuestros mentores de España y Latino América, ésta es tu oportunidad. http://summit.solidq.com/madrid/