Compartir a través de


Supervisar el proceso de captura de datos modificados

Supervisar el proceso de captura de datos modificados permite determinar si los cambios se están escribiendo correctamente y con una latencia razonable en las tablas de cambios. La supervisión también puede ayudarle a identificar cualquier error que se pudiera producir. SQL Server incluye dos vistas de administración dinámica para ayudar a supervisar la captura de datos modificados:

  • sys.dm_cdc_log_scan_sessions

    La vista de administración sys.dm_cdc_log_scan_sessions contiene una fila para cada sesión de examen del registro en la base de datos actual. La última fila representa la sesión actual. La vista también contiene una fila con el identificador de sesión 0, que tiene información agregada sobre todas las sesiones desde que se inició por última vez la instancia de SQL Server.

  • sys.dm_cdc_errors

    La vista de administración sys.dm_cdc_errors contiene una fila para cada error que se encuentre durante la sesión de examen del registro de captura de datos modificados.

Identificar las sesiones con conjuntos de resultados vacíos

Cada fila de sys.dm_cdc_log_scan_sessions representa una sesión de examen del registro (excepto la fila con el identificador 0). Una sesión de examen del registro es equivalente a una ejecución de sp_cdc_scan. Durante una sesión, el examen puede devolver los cambios o un resultado vacío. Si el conjunto de resultados está vacío, la columna empty_scan_count de sys.dm_cdc_log_scan_sessions se establece en 1. Si hay conjuntos de resultados vacíos consecutivos, por ejemplo si el trabajo de captura se está ejecutando continuamente, el valor empty_scan_count de la última fila existente se incrementa. Por ejemplo, si sys.dm_cdc_log_scan_sessions ya contiene 10 filas para los exámenes que devolvieron los cambios y hay seguidos cinco resultados vacíos, la vista contiene 11 filas. La última fila tiene el valor 5 en la columna empty_scan_count. Para determinar las sesiones que tenían un examen vacío, ejecute la consulta siguiente:

SELECT * from sys.dm_cdc_log_scan_sessions where empty_scan_count <> 0

Determinar la latencia

La vista de administración sys.dm_cdc_log_scan_sessions incluye una columna que registra la latencia de cada sesión de captura. La latencia se define como el tiempo transcurrido entre que una transacción se confirma en una tabla de origen y la confirmación en la tabla de cambios de la última transacción capturada. La columna de latencia sólo se rellena para las sesiones activas. Para las sesiones con un valor mayor que 0 en la columna empty_scan_count, la columna de latencia se establece en 0. La consulta siguiente devuelve la latencia promedio para las sesiones más recientes:

SELECT latency FROM sys.dm_cdc_log_scan_sessions WHERE session_id = 0

Puede utilizar los datos de la latencia para determinar la rapidez o lentitud con que el proceso de captura procesa las transacciones. Estos datos son muy útiles cuando el proceso de captura se está ejecutando continuamente. Si el proceso de captura se ejecuta según una programación, la latencia puede ser alta debido a la diferencia temporal entre las transacciones que se confirman en la tabla de origen y el proceso de captura que se ejecuta en su momento programado.

Otra medida importante de la eficacia del proceso de captura es el rendimiento. Se trata del número promedio de comandos por segundo que se procesan durante cada sesión. Para determinar el rendimiento de una sesión, divida el valor de la columna command_count por el valor de la columna de duración. La consulta siguiente devuelve el rendimiento promedio para las sesiones más recientes:

SELECT command_count/duration AS [Throughput] FROM sys.dm_cdc_log_scan_sessions WHERE session_id = 0

Usar el recopilador de datos para recopilar datos de muestreo

El recopilador de datos de SQL Server permite reunir instantáneas de datos de cualquier tabla o vista de administración dinámica, y generar un almacén de datos de rendimiento. Cuando la captura de datos modificados está habilitada en una base de datos, es útil tomar instantáneas de las vistas sys.dm_cdc_log_scan_sessions y sys.dm_cdc_errors a intervalos regulares para analizarlas posteriormente. El procedimiento siguiente configura un recopilador de datos para reunir datos de muestra de la vista de administración sys.dm_cdc_log_scan_sessions.

Configurar la recopilación de datos

  1. Habilite el recopilador de datos y configure un almacén de administración de datos. Para obtener más información, vea Administrar la recolección de datos con SQL Server Management Studio.

  2. Ejecute el código siguiente para crear un recopilador personalizado para la captura de datos modificados.

    USE msdb;
    
    DECLARE @schedule_uid uniqueidentifier;
    
    -- Collect and upload data every 5 minutes
    SELECT @schedule_uid = (
    SELECT schedule_uid from sysschedules_localserver_view 
    WHERE name = N'CollectorSchedule_Every_5min')
    
    DECLARE @collection_set_id int;
    
    EXEC dbo.sp_syscollector_create_collection_set
    @name = N' CDC Performance Data Collector',
    @schedule_uid = @schedule_uid,        
    @collection_mode = 0,                 
    @days_until_expiration = 30,              
    @description = N'This collection set collects CDC metadata',
    @collection_set_id = @collection_set_id output;
    
    
    -- Create a collection item using statistics from 
    -- the change data capture dynamic management view.
    DECLARE @paramters xml;
    DECLARE @collection_item_id int;
    
    SELECT @paramters = CONVERT(xml, 
        N'<TSQLQueryCollector>
            <Query>
              <Value>SELECT * FROM sys.dm_cdc_log_scan_sessions</Value>
              <OutputTable>cdc_log_scan_data</OutputTable>
            </Query>
          </TSQLQueryCollector>');
    
    EXEC dbo.sp_syscollector_create_collection_item
    @collection_set_id = @collection_set_id,
    @collector_type_uid = N'302E93D1-3424-4BE7-AA8E-84813ECF2419',
    @name = ' CDC Performance Data Collector',
    @frequency = 5, 
    @parameters = @paramters,
    @collection_item_id = @collection_item_id output;
    
    GO
    
  3. En SQL Server Management Studio, expanda Administración y, a continuación, expanda Recopilación de datos. Haga clic con el botón secundario en Recopilador de datos de rendimiento de CDC y, a continuación, haga clic en Iniciar conjunto de recopilación de datos.

  4. En el almacén de datos que configuró en el paso 1, busque la tabla custom_snapshots.cdc_log_scan_data. En esta tabla se proporciona una instantánea histórica de los datos de las sesiones de examen del registro. Estos datos se pueden utilizar para analizar la latencia, el rendimiento y otras medidas de rendimiento a lo largo del tiempo.