Your SlideShare is downloading. ×
SQL11: Replicación
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

SQL11: Replicación

565
views

Published 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.

Published in: Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
565
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
32
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/