¿Por qué he reducido el registro de datos históricos y mi base de datos de distribución ha empezado a crecer?

Hoy toca replicación. Vamos a tratar el efecto de un cambio aparentemente inocuo en el registro histórico del agente de distribución y sus posibles consecuencias.

El perfil del agente de distribución, entre otros parámetros, tiene uno llamado: HistoryVerboseLevel. Este parámetro según los books on line: “Especifica la cantidad de historial registrado durante una operación de la distribución. Puede minimizar el efecto sobre el rendimiento del registro del historial seleccionando 1.” ( https://msdn.microsoft.com/es-es/library/ms147328.aspx )

Tal y como indican los books on line, para mejorar el rendimiento, se recomienda un valor 1, ya que un valor 0 puede tener efectos secundarios, en particular el crecimiento de la base de datos de distribución.

Este comportamiento puede parecer extraño, para entenderlo veamos primero cuál es el proceso de reciclaje esperado en la base de datos de distribución:

En la base de datos de distribución se guardan las transacciones de la base de datos publicada, ¿durante cuánto tiempo? Hasta que todos los subscriptores las han recibido, con un tiempo máximo del período de retención. Pasado el período de retención, serán eliminadas independientemente de si las han recibido los subscriptores o no, precisamente para evitar el crecimiento sin límite de la base de datos de distribución. El período de retención es configurable, y por defecto son 72 horas.

El encargado de borrar las transacciones no necesarias en la base de datos de distribución es el trabajo “Limpieza de la distribución” (Distribution clean up), y cada vez que se ejecuta:

-Si hay subscripciones anónimas, no tiene información acerca de qué subscripciones han recibido las transacciones, por lo tanto mantiene todas las transacciones que se encuentran dentro del período de retención.

-Si las subscripciones no son anónimas, si todos los subscriptores han marcado una transacción como recibida, el trabajo de limpieza las eliminará aunque estén dentro del período de retención.

Cuanto menos transacciones tengamos en la base de datos de distribución, mejor será el rendimiento del agente.

¿Cuál es el efecto de configurar un valor 0 para el HistoryVerboseLevel? De nuevo, según los books on line: Los registros del historial no se registran en la base de datos de distribución” . La implicación es que en la base de datos de distribución no hay información sobre qué transacciones ha recibido cada subscriptor. Estaríamos en el mismo caso que trabajando con subscripciones anónimas. Por lo tanto la base de datos de distribución es mayor de lo necesario, y empeora el rendimiento.

Otra funcionalidad que necesita el registro histórico en distribución es el monitor de réplica, y la consecuencia de utilizar el valor 0 para HistoryVerboseLevel, es que las transacciones aparecerán como no distribuidas, y la subscripción como no actualizada.

Como resumen, no se recomienda tener un valor 0 para el parámetro HistoryVerboseLevel.

Un saludo.

Raquel Vicente de la Rosa

Ingeniero de Soporte de SQL Server