SQL11: Replicación

33
AVANZADOS: Replicación RUBÉN GARRIGÓS REL-413 Mentor –Área Motor Relacional MCP – MCAD – MCSD – MCTS – MCT - MCITP [email protected]

Transcript of SQL11: Replicación

Page 1: SQL11: Replicación

AVANZADOS: Replicación

RUBÉN GARRIGÓS

REL-413

Mentor –Área Motor Relacional

MCP – MCAD – MCSD – MCTS – MCT - MCITP

[email protected]

Page 2: SQL11: Replicació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

Objetivos de la sesión

Page 3: SQL11: Replicación

Replicación en SQL Server

Page 4: SQL11: Replicación

Replicación en SQL Server Definición

α Es un conjunto de tecnologías que nos permiten distribuir y sincronizar información entre bases de datos

α Modelo de publicaciones

Page 5: SQL11: Replicación

α 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

Replicación en SQL Server Conceptos clave

Page 6: SQL11: Replicación

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

Replicación en SQL Server Tipologías

Page 7: SQL11: Replicación

Escala de réplicas

Transaccional actualizable

Transacciones distribuidas

Transaccional bidireccional - P2P

Transaccional unidireccional

Instantánea

Mezcla

Mayor autonomía

Mayor latencia

Menor autonomía

Menor latencia

Page 8: SQL11: Replicación

La milla extra

Page 9: SQL11: Replicación

α 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

La milla extra Razones para recorrerla

Page 10: SQL11: 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

La milla extra Aplicada a la replicación

Page 11: SQL11: Replicación

Replicación Transaccional

Page 12: SQL11: Replicación

α Agente de instantáneas (opcional)

α Agente lector del log de transacciones

α Agente de distribución

α Agente de lectura de cola de replicación (obsoleto)

Replicación transaccional Agentes

Page 13: SQL11: Replicación

α 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

Replicación transaccional Agente de instantánea

Page 14: SQL11: Replicación

α 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

Replicación transaccional Agente de instantánea

Page 15: SQL11: Replicación

α 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

Replicación transaccional Agente de instantánea

Page 16: SQL11: Replicación

α 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

Replicación transaccional Agente de instantánea

Page 17: SQL11: Replicación

α 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

Replicación transaccional Agente lector del log de transacciones

Page 18: SQL11: Replicación

1. Llama a sp_MSadd_LogReader_History para indicar que arrancamos el agente

2. 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 inicializados

5. Obtenemos la última transacción donde nos quedamos leyendo del log (sp_MSget_last_transaction)

Replicación transaccional Agente lector del log de transacciones

α El flujo de trabajo de los agentes se obtiene con la ayuda de SQL Server Profiler:

Page 19: SQL11: Replicación

6. 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 configurada

11.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 por defecto del job del agente la resolverá Monitorización

Replicación transaccional Agente lector del log de transacciones

Page 20: SQL11: Replicación

α Parámetros interesantes β OutputVerboseLevel

β HistoryVerboseLevel

β PollingInterval (5)

β ReadBatchSize (500 transacciones)

β ReadBatchThreshold (0 comandos)

β Buffers (2)

β MaxCmdsInTran (0 o romper atomicidad)

Replicación transaccional Agente lector del log de transacciones

Page 21: SQL11: Replicació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

Replicación transaccional Agente de distribución

Page 22: SQL11: Replicación

Replicación transaccional Agente de distribución

1. 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)

Page 23: SQL11: Replicación

Replicación transaccional Agente de distribución

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

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

Page 24: SQL11: Replicació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

Replicación transaccional Agente de distribución

Page 25: SQL11: Replicación

Un largo viaje transaccional

Page 26: SQL11: Replicación

Replicación de Mezcla

Page 27: SQL11: Replicación

α 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

Replicación de mezcla Agente de mezcla

Page 28: SQL11: Replicación

α 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)

Replicación de mezcla Detección de cambios

Page 29: SQL11: Replicación

Replicación de mezcla Agente de mezcla

El flujo completo es complejo y depende de muchos factores: el filtrado de artículos, la política de resolución de conflictos, el particionado la réplica de mezcla tiene un consumo de CPU apreciable sincronizaciones puntuales con autonomía

1. 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)

Page 30: SQL11: Replicación

Replicación de mezcla Agente de mezcla

5. 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)

Page 31: SQL11: Replicación

α Parámetros interesantes β DestThreads (4)

β SrcThreads (3)

β ParallelUploadDownload

β (Download/Upload)GenerationsPerBatch

β (Download/Upload)ReadChangesPerBatch

β (Download/Upload)WriteChangesPerBatch

β MaxDownloadChanges

β MaxUploadChanges

β MakeGenerationInterval

β PollingInterval (60)

β StartQueueTimeout

Replicación de mezcla Agente de mezcla

Page 32: SQL11: Replicación

Mezclando datos

Page 33: SQL11: Replicación

Si quieres disfrutar de las mejores sesiones de

nuestros mentores de España y Latino América,

ésta es tu oportunidad.

http://summit.solidq.com/madrid/