Compartir a través de


Optimizar y supervisar el rendimiento

Recomendamos que, en lo que se refiere al rendimiento de la sincronización, se utilice el enfoque siguiente:

  • Se configure cada servidor y base de datos, así como el código de la aplicación, para lograr el máximo rendimiento.

  • Se desarrollen líneas base de rendimiento.

  • Se supervise y optimice el rendimiento para que satisfaga o supere las líneas base.

Configuración

El primer paso en la optimización del rendimiento es asegurarse de que tanto el hardware como el software están configurados correctamente.

Consideraciones sobre el servidor y la red

  • Asegúrese de que cada equipo tiene un subsistema de E/S adecuado y los archivos de base de datos están asignados correctamente.

    La velocidad de lectura y escritura de cambios en el disco suele tener más relevancia que la velocidad de la red, por lo que es esencial contar con un subsistema de E/S adecuado. Es recomendable utilizar varias matrices de discos RAID y disponer de una matriz dedicada en el servidor para las bases de datos de usuario, los registros de transacciones y tempdb. Las bases de datos de usuario, los registros de transacciones y tempdb deberían crearse en grupos de archivos independientes. Si una o varias tablas de usuario resultan ser un cuello de botella para el procesamiento, considere la posibilidad de moverlas a grupos de archivos independientes.

  • Considere la posibilidad de ampliar la memoria de los equipos en topologías de sincronización.

    Esto resulta especialmente importante en aquellos servidores implicados en un gran número de sesiones de sincronización simultáneas. Las sesiones de sincronización suelen implicar transacciones de larga duración; por tanto, es importante tener una cantidad de memoria significativa que la base de datos servidor pueda direccionar directamente. En el caso de SQL Server, considere la posibilidad de utilizar el modificador /3GB para sistemas de 32 bits o cambiar a un sistema de 64 bits. Para obtener más información, vea "Espacio de dirección del proceso" en los Libros en pantalla de SQL Server.

  • Establezca la cantidad mínima y máxima de memoria asignada a la base de datos servidor.

    Por ejemplo, de forma predeterminada, Motor de base de datos cambia dinámicamente sus necesidades de memoria según los recursos del sistema disponibles. A fin de evitar una disponibilidad insuficiente de la memoria durante las actividades de sincronización, utilice la opción min server memory para establecer la memoria mínima disponible. Para evitar que el sistema operativo tenga que paginar en el disco para disponer de memoria, puede definir también una cantidad máxima de memoria con la opción max server memory. Para obtener más información, vea los Libros en pantalla de SQL Server.

Diseño de la base de datos y la aplicación

  • Siga las prácticas recomendadas para el diseño de la base de datos.

    Una base de datos implicada en una operación de sincronización generalmente se beneficia de las mismas optimizaciones de rendimiento que cualquier base de datos similar. Para obtener más información sobre la optimización de bases de datos, vea los Libros en pantalla de SQL Server. Tenga en cuenta las siguientes consideraciones sobre los índices:

  • Establezca los valores adecuados para el tiempo de espera de bloqueo y consulta de una base de datos.

  • Reduzca al mínimo los conflictos a través del diseño de publicaciones y el comportamiento de la aplicación.

    Diseñe las aplicaciones de forma que se eviten los conflictos siempre que sea posible, ya que la detección y resolución de conflictos aumenta la complejidad, el procesamiento y el tráfico de red. Las maneras más comunes de evitar los conflictos son las siguientes:

    • Actualizar una tabla en un único nodo, o bien

    • Filtrar los datos para que solamente un nodo actualice un determinado conjunto de filas. Por ejemplo, en un escenario cliente-servidor, podría dividir los datos horizontalmente en particiones entre los clientes de modo que cada cliente cambiara solo un "segmento" de datos, por ejemplo la información de contacto de los clientes de Washington.

  • Use el filtrado de forma razonable.

    Filtrar los datos resulta un excelente mecanismo para reducir conflictos y copiar menos datos en cada nodo. Sin embargo, no debe olvidar que las cláusulas de filtrado complejas pueden afectar al rendimiento. Si un filtro combina muchas tablas, considere la posibilidad de utilizar otros mecanismos para implementar la misma lógica.

  • Tenga cuidado con la lógica de la aplicación en los desencadenadores y las consultas de sincronización.

    Si ejecuta lógica adicional en cada consulta y en cada desencadenador, el rendimiento puede verse perjudicado significativamente.

  • Utilice los procedimientos almacenados para los comandos de base de datos.

    Sync Framework utiliza diferentes consultas para seleccionar y aplicar los cambios de datos y metadatos durante una sesión de sincronización. Si crea estas consultas manualmente, encapsúlelas en procedimientos almacenados. De este modo, el rendimiento y el mantenimiento suelen mejorar, y también se favorece la protección de las aplicaciones. Si una aplicación requiere SQL insertado en lugar de procedimientos almacenados, asegúrese de utilizar el método de ADO.NET Prepare() en todos los comandos. De este modo, mejora el rendimiento de SQL insertado.

  • Sincronice únicamente los datos necesarios en cada nodo.

    Puede resultar tentador el hecho de publicar todas o la gran mayoría de las tablas de la base de datos "por si acaso". Evite publicar las tablas que la aplicación no necesita realmente y considere la posibilidad de sincronizar cada nodo con menos frecuencia.

  • Diseñe la sincronización de los grupos y ámbitos de forma adecuada, y utilice la dirección de sincronización precisa en cada ámbito.

    Un ámbito es un conjunto de tablas que se sincronizan como una unidad. Se pueden filtrar una o varias tablas de un ámbito y las tablas pueden estar incluidas en varios ámbitos. Asegúrese de que los ámbitos reflejan la estructura y los patrones de uso de las tablas que contienen. Observe las cuatro tablas siguientes de una aplicación del equipo de ventas:

    • Orders y OrderDetails

      Las filas se insertan en estas tablas únicamente en un equipo cliente, aunque podrían actualizarse en el servidor. Los cambios deben confirmarse en la misma transacción. Estas tablas deben estar en el mismo ámbito y tener una dirección de sincronización bidireccional.

    • Pricing

      Las filas se insertan y actualizan a menudo, pero solo en el servidor. Esta tabla y otras similares deberían estar en un ámbito con una dirección de sincronización de solo descarga desde el punto de vista del cliente.

    • Products

      Las filas rara vez se insertan y actualizan en el servidor. Es probable que esta tabla deba estar en un ámbito diferente al de Pricing porque no se actualiza con la misma frecuencia y, posiblemente, se sincronice con menos asiduidad.

Nota

La dirección de sincronización se puede cambiar en cada sesión, mientras que el ámbito sigue siendo el mismo en las diferentes sesiones. No existe una conexión directa entre el ámbito y la dirección de sincronización, pero en este ejemplo se pone de manifiesto que deben tenerse en cuenta ambos aspectos al diseñar una aplicación.

  • En DbSyncProvider, utilice la propiedad SelectTableMaxTimestampsCommand para optimizar la enumeración.

    La consulta que se especifica para esta propiedad selecciona la marca de tiempo máxima de cada tabla base o tabla de seguimiento. Esta marca de tiempo se utiliza para determinar si, en cada tabla, el destino tiene ya todos los cambios del origen. Si el destino ya tiene los cambios, Sync Framework a menudo puede evitar ejecutar consultas de enumeración, lo que puede mejorar el rendimiento.

  • Utilice el procesamiento por lotes para compensar la poca confiabilidad de algunas redes y los problemas de memoria insuficiente.

    De forma predeterminada, Sync Framework entrega los cambios a cada nodo en un único objeto DataSet. Este objeto se conserva en la memoria cuando los cambios se aplican a un nodo. El comportamiento predeterminado funciona bien si hay memoria suficiente en el equipo en el que se aplican los cambios y la conexión con el equipo es confiable. En algunas aplicaciones, sin embargo, los cambios pueden dividirse en lotes. El procesamiento por lotes introduce una sobrecarga adicional, pero puede suponer una auténtica ventaja para el rendimiento en algunas aplicaciones. Para obtener más información, vea Entregar cambios en lotes (SQL Server).

  • Escalone las programaciones de sincronización.

    Si se sincroniza un gran número de nodos con un nodo central, escalone las programaciones para reducir la presión de memoria y la contención en el nodo central. Las programaciones pueden hacerse con arreglo a una hora del reloj o a un valor temporal relativo. Por ejemplo, una aplicación podría sincronizarse cada hora o podría iniciar una sesión de sincronización una hora después de la última sesión que se haya completado correctamente en ese nodo.

  • Utilice programadores de limpieza de metadatos adecuadas.

    Una gran cantidad de metadatos puede afectar al rendimiento de las consultas de sincronización.

Líneas base

Una vez configurada la sincronización, se recomienda desarrollar una línea base de rendimiento, lo que permite determinar el modo en que se comporta la sincronización con una carga de trabajo normal en sus aplicaciones y su topología. Utilice eventos de sincronización y el Monitor de sistema para determinar los valores numéricos normales de las cinco dimensiones siguientes del rendimiento de la sincronización:

  • Latencia: la cantidad de tiempo que se tarda en propagar un cambio de datos entre nodos en una topología.

  • Rendimiento: la cantidad de actividad de sincronización (medida en filas suministradas durante un período de tiempo) que un sistema puede mantener en el tiempo.

  • Simultaneidad: el número de nodos que pueden sincronizarse simultáneamente con un nodo determinado. A menudo es el número de clientes que pueden sincronizarse con un servidor específico.

  • Duración de sincronización: el tiempo que tarda en completarse una sesión de sincronización determinada.

  • Utilización de recursos: recursos de hardware y de red utilizados como resultado del procesamiento de sincronización.

En función de la aplicación, algunas de estas medidas de rendimiento podrían tener más importancia que otras. Por ejemplo, podría ser aceptable tener un rendimiento relativamente bajo siempre y cuando se pueda mantener un nivel alto de simultaneidad. Al establecer una línea base, tenga en cuenta que Sync Framework no está diseñado como un sistema servidor-servidor de alto rendimiento y baja latencia como la replicación transaccional de SQL Server. Está diseñado para la sincronización cliente-servidor y cliente-cliente compatible con aplicaciones sin conexión y de colaboración.

Después de haber establecido los valores numéricos de las líneas base, supervise el sistema atendiendo a los cuellos de botella de rendimiento y escalabilidad, y optimícelo como estime oportuno.

Supervisión y mantenimiento

La supervisión puede llevarse a cabo durante el desarrollo de las líneas base de rendimiento, de forma periódica en entornos de producción y de manera más intensiva si surgen problemas de rendimiento. Recomendamos las herramientas siguientes para supervisar el rendimiento y la actividad de sincronización:

  • Eventos de sincronización

    Utilice los eventos siguientes para determinar el tiempo que tardan ciertas fases:

    • Eventos por tabla en cada proveedor: SelectingChanges, ChangesSelected, ApplyingChanges y ChangesApplied

    • Evento por sesión en cada proveedor: SyncProgress

    Memorice el tiempo de cada fase y escriba los resultados en un archivo de registro o en la base de datos de rendimiento una vez que termine la sesión de sincronización.

  • SQL Server Profiler

    Utilice la plantilla TSQL_SPs e identifique las consultas que tardan más que un determinado umbral, como por ejemplo 10 segundos. Si escribe información de seguimiento en un archivo de registro o una base de datos de rendimiento, conserve los datos en memoria y realice las operaciones de escritura una vez que finalice la sesión de sincronización.

  • SQL Server Management Studio

    Management Studio se puede utilizar para comprobar el plan de cada consulta de sincronización a fin de asegurar que se utiliza el plan óptimo.

  • Monitor de sistema

    Utilice los siguientes contadores y objetos de rendimiento para supervisar áreas importantes de la sincronización:

    • Contadores de SQL Server: Administrador de memoria. Por ejemplo, puede comprobar si SQL Server está utilizando la memoria que tiene disponible comparando la memoria del servidor de destino y la memoria total del servidor.

    • Contadores de PhysicalDisk. Por ejemplo, la longitud promedio de la cola de lectura de disco y la longitud promedio de la cola de escritura de disco le ayudan a identificar si el rendimiento de la sincronización está limitado por la E/S o el equipo se está quedando sin memoria. Si las longitudes de cola no son razonables, considere la posibilidad de ampliar la memoria y actualizar o agregar unidades de disco.

      El valor predeterminado hace que el contador notifique los valores medios entre todas las unidades de disco. Asegúrese de que agrega un contador para cada unidad de disco.

    • Contadores de SQL Server: Transacciones. Por ejemplo, los contadores de transacciones de instantáneas y del tamaño del almacén de versiones se pueden usar para determinar si las consultas de enumeración de cambios están produciendo un gran crecimiento de tempdb. Las consultas de enumeración de cambios utilizan las transacciones de instantáneas, mientras que la información de la versión de la instantánea se almacena en tempdb. Un almacén de versiones grande puede significar que debe cambiarse el tamaño de tempdb.

    • Contadores de SQL Server: Bloqueos. Por ejemplo, se puede utilizar el tiempo de espera de bloqueos y el número de interbloqueos para determinar si la contención supone un problema durante la actividad simultánea de la base de datos.

  • Seguimiento de la sincronización

    Sync Framework incluye una función de seguimiento que se basa en la clase TraceListener. El seguimiento se puede utilizar para recopilar información sobre las sesiones de sincronización, lo que puede resultar útil para la supervisión y solución de problemas. Sin embargo, debe tener en cuenta que el seguimiento supone una sobrecarga adicional y que debe utilizarse fundamentalmente en la fase de desarrollo. Para obtener más información, vea Realizar el seguimiento del proceso de sincronización (este tema se centra en DbServerSyncProvider, pero la información que contiene también es aplicable a otros proveedores).

Además de realizar tareas de supervisión, le recomendamos que efectúe las siguientes tareas de mantenimiento periódicamente:

  • En función del nivel de desfragmentación, reorganice o vuelva a generar los índices de las tablas base y las tablas de metadatos.

  • Actualice las estadísticas de índices.

  • Limpie los metadatos de sincronización.

Vea también

Conceptos

Consideraciones sobre el diseño y la implementación de aplicaciones