Solucionar problemas del recopilador de datos
En este tema se tratan las categorías siguientes de soluciones de problemas:
Condiciones de error. Esta categoría cubre el modelo de objetos y los errores en tiempo de ejecución.
Problemas de rendimiento. Esta categoría cubre escenarios de rendimiento generales y específicos.
Bloqueos del sistema. Esta categoría cubre los bloqueos de subcomponentes durante la recopilación de datos.
Condiciones de error
Los errores se pueden producir en el modelo de objetos o en tiempo de ejecución.
Errores del modelo de objetos
El modelo de objetos del recopilador de datos es una API administrada que permite administrar las propiedades del recopilador de datos y los conjuntos de recopilación de datos mediante programación. El modelo de objetos es un contenedor delgado de un conjunto de vistas y procedimientos almacenados que proporcionan un mecanismo de configuración para el recopilador de datos. Para obtener más información, vea Programar el recopilador de datos.
Los errores del modelo de objetos pueden proceder de uno de los componentes siguientes de dicho modelo:
Se produce un error de Transact-SQL en un procedimiento almacenado o en el código de Transact-SQL al que se llama desde uno de los procedimientos almacenados del recopilador de datos.
Se produce un error de Transact-SQL en un procedimiento almacenado del recopilador de datos.
Se produce una excepción administrada en el modelo de objetos.
La tabla siguiente describe los errores que se pueden producir en el modelo de objetos.
Mensaje de error |
Número de error |
Descripción |
---|---|---|
No se puede actualizar name, target, proxy_id, logging_level o collection_mode, o agregar el elemento de recopilación al conjunto de recopilación activo '%s'. Detenga el conjunto de recopilación y vuelva a intentar la actualización. |
14669 |
Se ha intentado actualizar un conjunto de recopilación activo. Se debe detener el conjunto de recopilación antes de poder realizar cualquier actualización de ese tipo. Sólo se puede cambiar la programación de carga mientras el conjunto de recopilación está activo. |
No se puede eliminar el conjunto de recopilación activo '%s'. Detenga el conjunto de recopilación e intente eliminarlo de nuevo. |
14670 |
Se ha intentado eliminar un conjunto de recopilación que se está ejecutando. |
No se puede actualizar el nombre o los parámetros del elemento de recopilación '%s' del conjunto de recopilación activo '%s'. Detenga el conjunto de recopilación y vuelva a intentar actualizar el elemento de recopilación. |
14671 |
Se ha intentado actualizar un elemento de recopilación de un conjunto de recopilación que se está ejecutando. |
No se puede eliminar el elemento de recopilación '%s' del conjunto de recopilación activo '%s'. Detenga el conjunto de recopilación y vuelva a intentar eliminar el elemento de recopilación. |
14672 |
Se ha intentado eliminar un elemento de recopilación de un conjunto de recopilación que se está ejecutando. |
No se puede eliminar el tipo de recopilador '%s'. Elimine todos los elementos de recopilación asociados con este tipo de recopilador y vuelva a intentar eliminarlo. |
14673 |
Se ha intentado eliminar un tipo de recopilador que tiene elementos de recopilación asociados. |
No se pueden cargar los datos para el conjunto de recopilación inactivo '%s'. Inicie el conjunto de recopilación y vuelva a intentar cargar los datos. |
14674 |
Se ha intentado cargar datos recopilados por un conjunto de recopilación que no se está ejecutando. |
No se puede actualizar name, target, proxy_id, logging_level o collection_mode, o agregar el elemento de recopilación al conjunto de recopilación activo '%s'. Detenga el conjunto de recopilación y vuelva a intentar la actualización. |
14675 |
Se ha intentado actualizar un conjunto de recopilación que se está ejecutando. |
El usuario no tiene permiso para cambiar '%s'. El usuario debe ser miembro de la función de recopilador de datos '%s'. |
14676 |
El usuario intentó actualizar una propiedad que sólo la puede modificar una función de recopilador de datos concreta. |
El usuario no tiene permiso para realizar esta operación. El usuario debe ser miembro de la función de recopilador de datos '%s'. |
14677 |
El usuario intentó realizar una operación sin formar parte de la función de recopilador de datos necesaria. |
Un usuario externo ha detenido y cerrado el seguimiento de SQL Server con el id. %d. El recopilador de seguimiento de SQL Server intentará crearlo de nuevo. |
14678 |
Un seguimiento creado y utilizado por el recopilador de datos se ha detenido y se ha cerrado fuera del tiempo de ejecución del recopilador. |
%s (%s) especificado no válido en este almacén de datos. |
14679 |
Un parámetro pasado a uno de los procedimientos almacenados en el almacén de administración de datos tiene un valor que no coincide con otras entradas del almacén de datos. |
Esta versión de instmdw.sql sólo se debería ejecutar en un servidor con SQL Server 2005 o posterior. |
14680 |
Se ha intentado instalar un almacén de administración de datos en un servidor que ejecuta SQL Server 2000 o anterior. |
No se puede realizar este procedimiento cuando el recopilador está deshabilitado. Habilite el recopilador y vuelva a intentarlo. |
14681 |
Se ha intentado realizar una operación que entra en conflicto con el estado del recopilador. |
El estado del conjunto de recopilación ha cambiado, pero no se iniciará o detendrá hasta que se habilite el recopilador. |
14682 |
Se ha intentado iniciar o detener el conjunto de recopilación cuando el recopilador no estaba habilitado. |
Un conjunto de recopilación en modo de instantánea o continuo requiere una programación. |
14683 |
Se ha creado o actualizado un conjunto de recopilación en modo de instantánea o continuo sin proporcionar una programación. |
Se detectó el error nº: %d, nivel: %d, estado: %d en el procedimiento: %s, línea: %d con el mensaje: %s |
14684 |
Error genérico en el componente del recopilador de datos; el error se detectó en un bloque catch y se ha vuelto a producir. |
Operación no válida. El estado del conjunto de recopilación con el id. =%d es actualmente "no está en ejecución". |
14685 |
Se ha producido una llamada a sp_syscollector_create_set_queue_and_service para un conjunto con un estado is_running de 0. |
Los parámetros MDWInstance y MDWDatabase del almacén de configuración no pueden ser null. |
14686 |
Una cadena de conexión al almacén de administración de datos es nula para los parámetros MDWInstance o MDWDatabase. |
Valor no válido (%d) del parámetro @cache_window. Los valores admisibles son: -1 (almacenar en caché todos los datos de carga de errores de carga anteriores), 0 (no almacenar en caché datos de carga), N (almacenar en caché datos de N errores de carga anteriores, donde N >= 1) |
14687 |
Se ha intentado establecer el valor del parámetro CacheWindow del almacén de configuración del recopilador en un valor menor que -1. |
Un conjunto de recopilación no se puede iniciar si el Agente SQL Server está detenido. Inicie el Agente SQL Server. |
14688 |
Se ha intentado iniciar un conjunto de recopilación cuando el Agente SQL Server no estaba habilitado. |
Un conjunto de recopilación no se puede iniciar si el almacén de administración de datos no está configurado. Ejecute el script instmdw.sql para crear y configurar el almacén de administración de datos. |
14689 |
Se ha intentado iniciar un conjunto de recopilación cuando el almacén de administración de datos no estaba configurado. |
Este procedimiento no se puede ejecutar si el recopilador está habilitado. Deshabilite el recopilador y vuelva a intentarlo. |
14690 |
Se ha intentado realizar una operación que entra en conflicto con el estado del recopilador. |
El estado del recopilador no puede ser null. Esto puede indicar daños internos en los datos de configuración del recopilador. |
14691 |
Una llamada a sp_syscollector_verify_collector_state encontró el parámetro CollectorEnabled con un valor nulo. Esto puede indicar daños internos en los datos de configuración del recopilador. |
Errores en tiempo de ejecución
Los errores en tiempo de ejecución se pueden producir cuando, al ejecutar un paquete de recopilación o de carga, éste encuentra un problema. Los errores pueden proceder de uno de los componentes siguientes:
El flujo de datos de un paquete de SQL Server 2008 Integration Services (SSIS). Estos errores pueden darse si una conversión de datos no se realiza correctamente o por un truncamiento de datos. El recopilador de datos graba el número de filas que resultaron afectadas por el error y registra dicho número en las tablas de registro del recopilador de datos.
El flujo de control de un paquete SSIS. Estos errores se registran en las tablas de registro de SSIS de la base de datos msdb (msdb.dbo.sysssislog) y se traspasan a las tablas de registro del recopilador de datos.
El componente en tiempo de ejecución del recopilador de datos (dcexec.exe). Estos errores se registran directamente en las tablas de registro del recopilador de datos.
Para obtener más información, vea Registro del recopilador de datos.
Se recomienda utilizar uno de los métodos siguientes para obtener información de estado sobre los errores en tiempo de ejecución.
Procedimientos almacenados y vistas de Transact-SQL
Para ver el estado de todos los conjuntos de recopilación o paquetes actualmente en ejecución y completados, ejecute la consulta siguiente:
use msdb
select * from syscollector_execution_log_full
La consulta anterior devuelve el siguiente conjunto de resultados.
Nombre de columna |
Descripción |
---|---|
log_id |
Un Id. único para cada ejecución del conjunto de recopilación. Este Id. se usa para combinar esta vista con otros registros detallados. |
parent_log_id |
El Id. del conjunto de recopilación o paquete primario. Su valor es NULL para el conjunto de recopilación. Los identificadores están encadenados de acuerdo con una relación de elementos primarios y secundarios, lo que permite identificar fácilmente qué conjunto de recopilación inició cada paquete. Además, esta vista agrupa las entradas de registro según su vinculación primario-secundario y aplica sangría a los nombres de los paquetes para que la cadena de llamada esté claramente visible. |
name |
El nombre del paquete o conjunto de recopilaciones que representa esta entrada de registro. |
collection_mode |
Actividad del conjunto de recopilación cuando se especificó la entrada, ya sea recopilación o carga. |
start_time |
Cuándo se ha iniciado el paquete o conjunto de recopilación. |
last_iteration_time |
Para los paquetes que se ejecutan de manera continua, la última vez que el paquete capturó una instantánea. |
finish_time |
Para los conjuntos de recopilación y los paquetes completados, la hora de finalización de la ejecución. |
duration |
El tiempo, en milisegundos, de ejecución del paquete o conjunto de recopilación. |
operator |
El operador que inició el paquete o conjunto de recopilación. |
status |
El estado del paquete o conjunto de recopilación. Éste será:
|
failure_task |
En caso de error del paquete o conjunto de recopilación, indica el nombre de la tarea en el paquete SSIS que provocó el error. |
package_execution_id |
Un vínculo a la tabla de registros de SSIS. |
collection_set_id |
Un vínculo a la tabla de configuración del recopilador de datos.
Nota
Puede utilizar collection_set_id como un filtro para centrarse en un conjunto de recopilación concreto en el registro.
|
Para obtener más información, vea syscollector_execution_log_full (Transact-SQL).
Para obtener información adicional sobre el conjunto de recopilación y la ejecución del paquete puede ejecutar una de las funciones proporcionadas por el recopilador de datos.
La función siguiente devuelve las estadísticas detalladas del paquete o conjunto de recopilación, incluido el número de filas de error registradas por el paquete.
select * from fn_syscollector_get_execution_stats(@log_id)
La función siguiente devuelve una parte del registro SSIS (sysdtslog90) que coincide con package_execution_id para un paquete determinado. Si se produjera un error en el paquete, ésta es la mejor manera de averiguar cuál fue el error raíz.
select * from fn_syscollector_get_execution_details(@log_id)
Informes de estado del recopilador de datos
Puede obtener la misma información devuelta por las consultas Transact-SQL anteriores mediante los registros proporcionados en SQL Server Management Studio. Para obtener más información, vea Cómo ver registros de conjuntos de recopilación.
Problemas de rendimiento
Existen tres fuentes de información principales que puede utilizar para revisar y diagnosticar el rendimiento.
En primer lugar, las tablas de registro descritas en la sección anterior también proporcionan información útil que se puede utilizar para resolver los problemas de rendimiento.
La función fn_syscollector_get_execution_stats devuelve la información siguiente.
Nombre de columna |
Descripción |
---|---|
avg_row_count_in |
Promedio del número de filas en la entrada de las tareas de flujo de datos del paquete. |
min_row_count_in |
Mínimo número de filas en la entrada de las tareas de flujo de datos del paquete. |
max_row_count_in |
Máximo número de filas en la entrada de las tareas de flujo de datos del paquete. |
avg_row_count_out |
Promedio del número de filas en la salida de las tareas de flujo de datos del paquete. |
min_row_count_out |
Mínimo número de filas en la salida de las tareas de flujo de datos del paquete. |
max_row_count_out |
Máximo número de filas en la salida de las tareas de flujo de datos del paquete. |
avg_duration |
Tiempo promedio (en milisegundos) empleado en el componente de flujo de datos del paquete. |
min_duration |
Tiempo mínimo (en milisegundos) empleado en el componente de flujo de datos del paquete. |
max_duration |
Tiempo máximo (en milisegundos) empleado en el componente de flujo de datos del paquete. |
Un segundo origen de datos sobre el rendimiento es la tabla syscollector_execution_log_full, que proporciona información sobre el tiempo que ha tardado o tarda en ejecutarse un conjunto de recopilación.
Por último, se pueden utilizar los contadores de rendimiento para evaluar los problemas de rendimiento. En concreto, los contadores de procesos estándar para las instancias del proceso de recopilador de datos (dcexec.exe) son buenos indicadores de la cantidad de recursos del sistema que está utilizando el componente en tiempo de ejecución del recopilador de datos.
Escenarios de problemas de rendimiento
Hay dos escenarios que probablemente se deban a problemas de rendimiento durante la ejecución del recopilador de datos:
El recopilador de datos está consumiendo demasiados recursos del sistema.
El recopilador de datos no puede hacer frente a la carga de recopilación.
Consumo excesivo de recursos del sistema
Si un análisis de los contadores de rendimiento de los procesos indica que los procesos de dcexec.exe están utilizando demasiados recursos del sistema, se debe llevar a cabo la investigación siguiente.
En primer lugar, determine si hay un único conjunto de recopilación que está utilizando la mayoría de los recursos.
Para identificar este conjunto, busque la correspondencia entre el Id. del proceso y el Id. del conjunto de recopilación en syscollector_execution_log_full y, a continuación, busque el conjunto de recopilación en la tabla syscollector_collection_sets.
Determine lo que está recopilando el conjunto de recopilación. Utilice la consulta siguiente para mostrar todos los elementos de recopilación agrupados en el conjunto:
select * from syscollector_collection_set_items where collection_set_id = <id>
Con la información de la consulta anterior, considere las preguntas siguientes:
¿Hay demasiados elementos de recopilación?
¿Es un único elemento de recopilación el que está causando la mayoría de los problemas?
¿Se están recopilando demasiado datos?
Si la respuesta es sí a cualquiera de las preguntas anteriores, considere la posibilidad de modificar la recopilación o los elementos de recopilación para reducir el volumen de datos recopilados. Esto reducirá el consumo de recursos.
A continuación, determine si es el número de conjuntos de recopilación activos el que está causando el problema.
Utilice la consulta siguiente para averiguar cuántos conjuntos de recopilación se han definido en el sistema:
select count(*) from syscollector_collection_sets
Utilice la consulta siguiente para averiguar cuántos conjuntos de recopilación se están ejecutando actualmente:
select count(*) from syscollector_execution_log_full where parent_log_id is null and status = 1
Si el problema de rendimiento es intermitente, compruebe si el problema se corresponde con cualquier actividad de recopilación o de carga. Si las programaciones son las mismas, esta podría ser la causa del problema. Una solución sencilla podría ser el ajuste de la programación de una recopilación o de una carga.
No se puede seguir el ritmo de la carga
Esta condición sólo se produce con conjuntos de recopilación que se ejecutan de manera continua. Si la frecuencia de recopilación es alta y hay un gran volumen de datos para recopilar, es posible que el paquete de recopilación no pueda procesar los datos en el tiempo asignado para una iteración de instantánea única. Para detectar esta condición, puede comparar las columnas max_duration y avg_duration de la tabla de registro con la frecuencia de recopilación definida para un elemento de recopilación concreto.
Si el valor max_duration es mayor que el valor de frecuencia, es posible que el paquete de recopilación no pueda mantener siempre el ritmo de la frecuencia configurada. Si el valor avg_duration es más alto que la frecuencia, el paquete de recopilación tiene un problema persistente. En este último caso, se debería reducir la frecuencia o modificar el elemento de recopilación para limitar la cantidad de datos recopilados.
Bloqueos del sistema
El sistema se puede bloquear si se detiene el procesamiento de un paquete que se ejecuta como parte del recopilador de datos pero no termina su ejecución y permanece en este estado. Al detener y reiniciar un conjunto de recopilación se pueden resolver mayoría de los bloqueos del sistema.
Es importante distinguir entre un bloqueo verdadero y el comportamiento esperado.
Un paquete de recopilación que se ejecuta de manera continua está la mayor parte del tiempo en un estado de espera, y se activa periódicamente para recopilar una instantánea de datos. Una vez recopilados los datos, el paquete vuelve al estado de espera. Este estado de espera puede parecer un bloqueo del sistema, pero no lo es. Para comprobarlo, busque el paquete sospechoso en la tabla syscollector_execution_log_full. Si el valor last_iteration_time no fuera posterior a la hora actual, la condición no es un bloqueo.
Es posible que un paquete esté diseñado para esperar a que un evento desencadene una acción de recopilación. En este caso, el paquete esperará a dicho evento. Esto no es un bloqueo.
Para averiguar si hay un bloqueo del sistema relacionado con el recopilador de datos, realice las comprobaciones siguientes:
En primer lugar, identifique el Id. del proceso dcexec.exe que corresponde al conjunto de recopilación que desea investigar.
A continuación, compruebe si el proceso se está ejecutando y si está utilizando recursos. Los procesos bloqueados normalmente utilizan el 0% de la CPU y no asignan más memoria. El proceso también puede utilizar un porcentaje alto de la CPU. En tal caso, podría haber entrado en un bucle y no salir de la memoria.
Finalmente, compruebe la tabla de registro del proceso para ver cuando se actualizó por última vez. Si el tiempo de actualización es superior a la frecuencia para el elemento de recopilación, el proceso podría haberse bloqueado.
Existen varias razones por las que se puede bloquear un proceso del recopilador de datos. A continuación se indican las más comunes:
Un paquete espera a que se marque la próxima iteración, pero esto no sucede.
Un paquete espera a un bloqueo compartido que mantiene otro paquete, pero el bloqueo no se libera.
Se ha producido un error durante la ejecución del paquete que no se ha controlado correctamente y se ha interrumpido el flujo de control, pero el paquete no ha dejado de funcionar completamente.
En cualquiera de los casos anteriores, hay entradas específicas en el registro relacionadas con el bloqueo del sistema. Compruebe si hay algún mensaje que indique una causa. En caso de un bloqueo del sistema, cree un volcado del proceso dcexec.exe y realice una investigación más minuciosa.