Cómo evalúa la réplica de mezcla las particiones en publicaciones filtradas
Cuando se filtran una o varias tablas de una publicación de mezcla mediante filtros con parámetros y filtros de combinación, se crean particiones de las tablas publicadas. Una partición no es más que un subconjunto de filas de una tabla. Cuando un suscriptor se sincroniza con un publicador, el publicador debe determinar qué filas pertenecen a la partición de un suscriptor basándose en los valores que proporciona el suscriptor para las funciones del sistema SUSER_SNAME() y/o HOST_NAME(). Este proceso de determinar la pertenencia a la partición de los cambios en el publicador para cada suscriptor que recibe un conjunto de datos filtrado se denomina evaluación de particiones.
En función de los datos de las tablas publicadas y de los valores elegidos al crear un filtro con parámetros y los filtros de combinación relacionados, cada fila de una tabla publicada puede:
- Pertenecer a una partición y replicarse en un único suscriptor (el valor 3 en el parámetro sp_addmergearticle de @partition_options). Por ejemplo, en la base de datos AdventureWorks, podría filtrar la tabla Employee con la siguiente cláusula de filtro:
WHERE Employee.LoginID = SUSER_SNAME()
. La fila que coincide con cada Id. de inicio de sesión se envía sólo a un suscriptor. - Pertenecer a una partición y replicarse en varios suscriptores (el valor 2 en @partition_options). Por ejemplo, en la base de datos AdventureWorks, podría filtrar la tabla Products con la siguiente cláusula de filtro:
WHERE Products.ProductLine = HOST_NAME()
. El valor HOST_NAME() se reemplaza ya que el grupo de vendedores responsables de las ventas de bicicletas de montaña reciben todas las filas con el valor "M" en la columna ProductLine; cada fila con el valor "M" pertenece sólo a una partición, pero se envía a más de un suscriptor. Para obtener más información acerca de cómo utilizar HOST_NAME(), vea la sección sobre cómo filtrar con HOST_NAME() en el tema Filtros de fila con parámetros. - Pertenecer a una partición y replicarse en varios suscriptores (el valor 0 ó 1 en @partition_options). Por ejemplo, en la base de datos AdventureWorks, podría filtrar la tabla Products con la siguiente cláusula de filtro:
WHERE Products.ProductLine = HOST_NAME() or Products.ListPrice < 100
. En este caso, el vendedor responsable de las ventas de bicicletas de montaña también vende productos de otras categorías siempre que el precio de venta sea menor de 100 dólares. Puesto que la cláusula de filtro contiene OR, la fila puede pertenecer a más de una partición.
Cómo se evalúan las particiones
La evaluación de particiones se puede realizar de dos formas en la réplica de mezcla, en función de si se utiliza la característica de particiones precalculadas. Si se cumplen varios requisitos, de forma predeterminada se crean las nuevas publicaciones de mezcla con la opción de particiones precalculadas habilitada, y las publicaciones existentes se actualizan automáticamente para utilizar esta característica. Para obtener una lista completa de requisitos, vea Optimizar el rendimiento de los filtros con parámetros con particiones precalculadas.
Evaluación de particiones con particiones precalculadas
Con las particiones precalculadas, la pertenencia a particiones de los cambios en el publicador se calcula previamente y se mantiene en el momento de realizar cambios en las tablas publicadas. Como resultadoo, cuando un suscriptor se sincroniza con el publicador, puede empezar a descargar inmediatamente los cambios relacionados con su partición sin tener que pasar por el proceso de evaluación de particiones. Esto puede proporcionar importantes mejoras de rendimiento cuando una publicación tiene un número elevado de cambios, suscriptores o artículos.
Las tablas del sistema que intervienen en la evaluación de particiones precalculadas son:
- MSmerge_partition_groups
- MSmerge_current_partition_mappings
- MSmerge_past_partition_mappings
MSmerge_partition_groups contiene una fila por cada partición que se define en una publicación. Las particiones se pueden:
- Definir explícitamente utilizando sp_addmergepartition o la página Particiones de datos del cuadro de diálogo Propiedades de la publicación.
- Crear automáticamente cuando un suscriptor se sincroniza si el suscriptor requiere una partición que aún no tenga una entrada en MSmerge_partition_groups.
Las otras dos tablas (MSmerge_current_partition_mappings y MSmerge_past_partition_mappings) se rellenan cuando se realizan cambios en tablas publicadas. Cada vez que se realiza un cambio en una tabla publicada, un desencadenador de mezcla se activa y registra metadatos:
MSmerge_current_partition_mappings contiene una fila por cada combinación única de filas en MSmerge_contents y MSmerge_partition_groups. Por ejemplo, si una fila en una tabla de usuario pertenece a dos particiones y la fila se actualiza, se inserta una fila en MSmerge_contents para reflejar la actualización y se insertan dos filas en MSmerge_current_partition_mappings para indicar que la fila actualizada pertenece a las dos particiones.
MSmerge_partition_groups contiene una fila por cada fila que ya no pertenece a una partición determinada. Una fila sale de una partición si:
- La fila se elimina. Si una fila se elimina de una tabla de usuario, se inserta una fila en MSmerge_tombstone y se insertan una o varias filas en MSmerge_past_partition_mappings.
- Ha cambiado el valor en una columna utilizada para filtrar. Por ejemplo, si un filtro con parámetros se basa en el estado donde una compañía tiene su sede y la compañía se muda a otro estado, la fila de la compañía (y las filas relacionadas en otras tablas) puede salir de la partición de datos de un vendedor y entrar en la partición de otro vendedor. Si una fila se actualiza porque ya no pertenece a una partición, se inserta o actualiza una fila en MSmerge_contents y se insertan una o varias filas en MSmerge_past_partition_mappings.
[!NOTA] Si se utilizan particiones que no se superponen con una suscripción por partición (el valor 3 para el parámetro sp_addmergearticle de @partition_options), no se utilizan las tablas del sistema MSmerge_current_partition_mappings y MSmerge_past_partition_mappings para realizar el seguimiento de las asignaciones de las particiones de las filas, porque cada fila pertenece sólo a una partición y sólo la puede cambiar un suscriptor.
Evaluación de particiones con el proceso SetupBelongs
Si no se utilizan particiones precalculadas, se utiliza un proceso denominado SetupBelongs. Durante la sincronización, la evaluación de particiones se ejecuta por cada cambio realizado en una tabla filtrada en el publicador, hasta la última ejecución del Agente de mezcla en un suscriptor específico. Este proceso se repite en cada suscriptor que se sincroniza con el publicador.
Para realizar la evaluación de particiones en un suscriptor, el Agente de mezcla llama al procedimiento almacenado del sistema sp_MSsetupbelongs, que:
- Crea dos tablas temporales por cada artículo filtrado: #belongs_<NúmeroAleatorio> y #notbelongs_<NúmeroAleatorio>.
- Utiliza el valor devuelto por las funciones SUSER_SNAME() y/o HOST_NAME() en el suscriptor para consultar una vista del sistema; la consulta se utiliza para determinar si una fila en MSmerge_contents o MSmerge_tombstone es relevante para la partición del suscriptor.
- Si la fila no es relevante para el suscriptor (por ejemplo, una fila insertada en otra partición), los metadatos de esta partición no se almacenan en #belongs o #notbelongs. Si la fila es relevante, existen dos resultados posibles.
- Se agrega una fila a #belongs si la fila en MSmerge_contents es una inserción que pertenece a la partición o la fila en MSmerge_contents es una actualización que no cambia valores en ninguna columna utilizada para filtrar.
- Se agrega una fila a #notbelongs si la fila en MSmerge_contents es una actualización que cambia un valor en una columna utilizada para filtrar (es decir, mueve la fila a una partición nueva) o la fila en MSmerge_tombstone representa la eliminación de una fila en la partición.
[!NOTA] Incluso si las particiones precalculadas están habilitadas, se utiliza el proceso SetupBelongs la primera vez que se sincroniza una suscripción si ésta se crea después de que otras suscripciones han empezado a recibir cambios.
Vea también
Conceptos
Cómo funciona la réplica de mezcla
Filtros de combinación
Filtros de fila con parámetros
Otros recursos
MSmerge_contents (Transact-SQL)
MSmerge_current_partition_mappings
MSmerge_generation_partition_mappings (Transact-SQL)
MSmerge_genhistory (Transact-SQL)
MSmerge_partition_groups (Transact-SQL)
MSmerge_past_partition_mappings (Transact-SQL)
MSmerge_tombstone (Transact-SQL)
sp_addmergearticle (Transact-SQL)
sp_addmergepartition (Transact-SQL)
sysmergearticles (Transact-SQL)
sysmergesubscriptions (Transact-SQL)