Risoluzione dei problemi dell'agente di raccolta dati

In questo argomento vengono descritte le seguenti categorie di risoluzione di problemi:

  • Condizioni di errore. In questa categoria è incluso il modello di oggetti e gli errori in fase di esecuzione.

  • Problemi di prestazioni. In questa categoria sono inclusi gli scenari di prestazione generali e specifici.

  • Blocchi di sistema. In questa categoria sono inclusi i blocchi di sottocomponenti verificatisi durante la raccolta di dati.

Condizioni di errore

È possibile che gli errori vengano generati dal modello di oggetti o in fase di esecuzione.

Errori del modello di oggetti

Il modello di oggetti dell'agente di raccolta dati è un'API gestita che consente di gestire a livello di codice le proprietà dell'agente di raccolta dati e gli insiemi di raccolta dei dati. Il modello di oggetti è un thin wrapper posto attorno a un set di stored procedure e viste che fornisce un meccanismo di configurazione per l'agente di raccolta dati. Per ulteriori informazioni, vedere Programmazione dell'agente di raccolta dati.

È possibile che gli errori del modello di oggetti provengano da uno dei relativi componenti indicati di seguito:

  • Un errore Transact-SQL è generato da una stored procedure o da codice Transact-SQL chiamato da una delle stored procedure dell'agente di raccolta dati.

  • Un errore Transact-SQL è generato direttamente da una stored procedure dell'agente di raccolta dati.

  • Un'eccezione gestita è generata direttamente dal modello di oggetti.

Nella tabella seguente sono descritti gli errori che possono essere generati dal modello di oggetti.

Messaggio di errore

Numero errore

Descrizione

Impossibile aggiornare il nome, la destinazione, proxy_id o collection_mode dell'insieme di raccolta attivo '%s'. Interrompere l'insieme di raccolta e provare nuovamente a eseguire l'aggiornamento.

14669

È stato eseguito il tentativo di aggiornare di un insieme di raccolta attivo. È necessario interrompere un insieme di raccolta prima di poter eseguire qualsiasi aggiornamento di questo tipo. Mentre l'insieme di raccolta è attivo, è possibile modificare solo la pianificazione del caricamento.

Impossibile eliminare l'insieme di raccolta attivo '%s'. Interrompere l'insieme di raccolta e provare nuovamente a eliminarlo.

14670

È stato eseguito il tentativo di eliminare un insieme di raccolta in esecuzione.

Impossibile aggiornare il nome o i parametri dell'elemento della raccolta '%s' nell'insieme di raccolta attivo '%s'. Interrompere l'insieme di raccolta e provare nuovamente ad aggiornare l'elemento della raccolta.

14671

È stato eseguito il tentativo di aggiornare un elemento della raccolta in un insieme di raccolta in esecuzione.

Impossibile eliminare l'elemento della raccolta '%' nell'insieme di raccolta attivo '%s'. Interrompere l'insieme di raccolta e provare nuovamente a eliminare l'elemento della raccolta.

14672

È stato eseguito il tentativo di eliminare un elemento della raccolta in un insieme di raccolta in esecuzione.

Impossibile eliminare il tipo di agente di raccolta '%s.' Eliminare tutti gli elementi della raccolta associati a questo tipo di agente e provare nuovamente a eliminarlo.

14673

È stato eseguito il tentativo di eliminare un tipo di agente di raccolta associato ad elementi della raccolta.

Impossibile caricare i dati per l'insieme di raccolta inattivo '%s.' Avviare l'insieme di raccolta e provare nuovamente a caricare i dati.

14674

È stato eseguito il tentativo di caricare i dati raccolti da un insieme di raccolta che non è in esecuzione.

Impossibile aggiornare il nome, la destinazione, proxy_id, logging_level o collection_mode oppure aggiungere l'elemento della raccolta all'insieme di raccolta attivo '%s' Interrompere l'insieme di raccolta e provare nuovamente a eseguire l'aggiornamento.

14675

È stato eseguito il tentativo di aggiornare un insieme di raccolta in esecuzione.

L'utente non dispone dell'autorizzazione per modificare '%s'. È necessario essere un membro del ruolo agente di raccolta dati '%s'.

14676

È stato eseguito il tentativo da parte dell'utente di aggiornare una proprietà che può essere modificata solo da uno specifico ruolo dell'agente di raccolta dati.

L'utente non dispone dell'autorizzazione per eseguire questa operazione. È necessario essere un membro del ruolo agente raccolta dati '%s'.

14677

È stato eseguito il tentativo da parte dell'utente di eseguire un'operazione senza far parte del ruolo richiesto dell'agente di raccolta dati.

La traccia di SQL Server con ID %d è stata interrotta e chiusa da un utente esterno. L'agente di raccolta tracce di SQL Server tenterà di ricreare la traccia.

14678

Una traccia creata e utilizzata dall'agente di raccolta dati è stata interrotta e chiusa fuori del runtime dell'agente di raccolta.

Il valore %s (%s) specificato non è valido in questo data warehouse.

14679

Un parametro trasmesso a una delle stored procedure nel data warehouse di gestione ha un valore che non corrisponde ad altre voci del warehouse.

Questa versione di instmdw.sql deve essere eseguita solo con un server con SQL Server 2005 o versione successiva.

14680

È stato eseguito il tentativo di installare un data warehouse di gestione su un server in cui è in esecuzione SQL Server 2000 o versione precedente.

Impossibile eseguire questa procedura quando l'agente di raccolta è disabilitato. Abilitare l'agente di raccolta e riprovare.

14681

È stato eseguito il tentativo di effettuare un'operazione che contrasta con lo stato dell'agente di raccolta.

Lo stato dell'insieme di raccolta è stato modificato, ma non verrà avviato né interrotto finché non viene abilitato l'agente di raccolta.

14682

È stato eseguito il tentativo di avviare o interrompere l'insieme di raccolta quando l'agente di raccolta non è attivato.

Un insieme di raccolta in modalità snapshot o continua richiede una pianificazione.

14683

Si è tentato di creare o aggiornare un insieme di raccolta in modalità snapshot o continua senza fornire una pianificazione.

Generato errore n.: %d, livello: %d, stato: %d, nella procedura: %s, riga: %d, con messaggio: %s

14684

Si è verificato un errore generico nel componente dell'agente di raccolta dati; l'errore è stato rilevato in un blocco catch e generato nuovamente.

Operazione non valida. Lo stato dell'insieme di raccolta con id =%d attualmente "non è in esecuzione".

14685

Chiamata a sp_syscollector_create_set_queue_and_service per un insieme con uno stato is_running pari a 0.

I parametri MDWInstance e MDWDatabase dell'archivio di configurazione non possono essere Null.

14686

Una stringa di connessione al data warehouse di gestione è null per i parametri MDWInstance o MDWDatabase.

Valore non valido (%d) del parametro @cache_window. I valori consentiti sono: -1 (memorizza nella cache tutti i dati di errori di caricamento precedenti), 0 (non memorizzare nella cache i dati di caricamento), N (memorizza nella cache i dati di N errori di caricamento precedenti, dove N >= 1)

14687

È stato eseguito il tentativo di impostare il valore del parametro CacheWindow dell'archivio di configurazione dell'agente di raccolta su un valore minore di -1.

Impossibile avviare un insieme di raccolta se SQL Server Agent è stato arrestato. Avviare SQL Server Agent.

14688

È stato eseguito il tentativo di avviare un insieme di raccolta quando SQL Server Agent non era attivato.

Impossibile avviare un insieme di raccolta se il data warehouse di gestione non è configurato. Eseguire lo script instmdw.sql per creare e configurare il data warehouse di gestione.

14689

È stato eseguito il tentativo di avviare un insieme di raccolta quando il data warehouse di gestione non era impostato.

Impossibile eseguire questa procedura se l'agente di raccolta è abilitato. Disabilitare l'agente di raccolta e riprovare.

14690

È stato eseguito il tentativo di effettuare un'operazione che contrasta con lo stato dell'agente di raccolta.

Lo stato dell'agente di raccolta non può essere Null. Questo problema può indicare un danneggiamento interno dei dati di configurazione dell'agente di raccolta.

14691

Una chiamata a sp_syscollector_verify_collector_state ha rilevato che il parametro CollectorEnabled ha un valore null. È possibile che si sia verificato un danno interno ai dati di configurazione dell'agente di raccolta.

Errori di runtime

Possono verificarsi errori di runtime quando un pacchetto di raccolta o di caricamento è in esecuzione e viene rilevato un problema. Gli errori possono provenire da uno dei seguenti componenti:

  • Il flusso di dati di un pacchetto SQL Server 2008 Integration Services (SSIS). Questi errori possono essere il risultato di una conversione di dati non riuscita o di un troncamento di dati. L'agente di raccolta dati registra il numero di righe interessate dall'errore e registra quel numero nelle tabelle del log dell'agente di raccolta dati.

  • Il flusso di controllo di un pacchetto SSIS. Questi errori sono registrati nelle tabelle del log SSIS nel database msdb (msdb.dbo.sysssislog) e vengono trasmessi alle tabelle del log dell'agente di raccolta dati.

  • Il componente runtime dell'agente di raccolta dati (dcexec.exe). Questi errori sono registrati direttamente nelle tabelle del log dell'agente di raccolta dati.

Per ulteriori informazioni, vedere Registrazione dell'agente di raccolta dati.

Per avere informazioni sullo stato degli errori di runtime, si consiglia di seguire uno dei seguenti metodi.

Stored procedure e visualizzazioni di Transact-SQL.

Per visualizzare lo stato di tutti gli insiemi di raccolta o pacchetti attualmente in esecuzione e finiti, eseguire la query seguente:

use msdb
select * from syscollector_execution_log_full

La query precedente restituisce il seguente set di risultati.

Nome colonna

Descrizione

log_id

ID univoco per ogni esecuzione dell'insieme di raccolta. Viene utilizzato per associare questa vista ad altri log dettagliati.

parent_log_id

L'ID del pacchetto padre o dell'insieme di raccolta. È NULL per l'insieme di raccolta. Gli ID sono legati da una relazione padre-figlio per rendere più facile identificare da quale insieme di raccolta è stato avviato il pacchetto. Questa vista raggruppa inoltre le voci del log in base al collegamento padre-figlio. I nomi dei pacchetti sono rientrati affinché la catena di chiamate sia chiaramente visibile.

name

Nome dell'insieme di raccolta o del pacchetto rappresentato da questa voce di log.

collection_mode

Attività dell'insieme di raccolta quando viene inserita la voce: raccolta o caricamento.

start_time

Ora di avvio dell'insieme di raccolta o del pacchetto.

last_iteration_time

Per pacchetti in esecuzione continua, l'ultimo orario in cui il pacchetto ha acquisito uno snapshot.

finish_time

Ora in cui è stata completata l'esecuzione per i pacchetti e gli insiemi di raccolta completati.

duration

Tempo, espresso in millisecondi, per il quale il pacchetto o l'insieme di raccolta è stato in esecuzione.

operator

L'operatore che ha avviato il pacchetto o l'insieme di raccolta.

status

Lo stato dell'insieme di raccolta o del pacchetto. Può essere:

  • 0 - in fase di esecuzione

  • 1 - completato

  • 2 - esecuzione non riuscita

failure_task

Se l'esecuzione dell'insieme di raccolta o del pacchetto ha avuto esito negativo, il nome dell'attività del pacchetto SSIS che ha provocato l'errore.

package_execution_id

Un collegamento alla tabella del log SISS.

collection_set_id

Un collegamento alla tabella di configurazione dell'agente di raccolta dati.

NotaNota
È possibile utilizzare il collection_set_id come filtro per concentrarsi su un insieme di raccolta specifico nel log.

Per ulteriori informazioni, vedere syscollector_execution_log_full (Transact-SQL).

È possibile ottenere informazioni aggiuntive sull'esecuzione degli insiemi di raccolta e dei pacchetti eseguendo una delle funzioni fornite dall'agente di raccolta dati.

La funzione seguente restituisce statistiche dettagliate sull'insieme di raccolta o sul pacchetto, incluso il numero di righe di errore registrate dal pacchetto.

select * from fn_syscollector_get_execution_stats(@log_id)

La funzione successiva restituisce una parte del log SISS (sysdtslog90) corrispondente al package_execution_id di un pacchetto. Se il pacchetto non viene eseguito, questo è il modo migliore per rilevare la causa dell'errore.

select * from fn_syscollector_get_execution_details(@log_id)

Report sullo stato dell'agente di raccolta dati

È possibile ottenere le stesse informazioni restituite dalle precedenti query Transact-SQL visualizzando i log forniti in SQL Server Management Studio. Per ulteriori informazioni, vedere Procedura: Visualizzazione dei log degli insiemi di raccolta.

Problemi di prestazioni

Esistono tre fonti primarie di dati che è possibile utilizzare per rivedere e diagnosticare le prestazioni.

In primo luogo, anche le tabelle del log descritte nella sezione precedente forniscono informazioni utili che possono essere utilizzate per risolvere i problemi di prestazioni.

La funzione fn_syscollector_get_execution_stats restituisce le informazioni seguenti.

Nome colonna

Descrizione

avg_row_count_in

Il numero medio di righe passate nelle attività del flusso di dati del pacchetto.

min_row_count_in

Il numero minimo di righe passate nelle attività del flusso di dati del pacchetto.

max_row_count_in

Il numero massimo di righe passate nelle attività del flusso di dati del pacchetto.

avg_row_count_out

Il numero medio di righe uscite dalle attività del flusso di dati del pacchetto.

min_row_count_out

Il numero minimo di righe uscite dalle attività del flusso di dati del pacchetto.

max_row_count_out

Il numero massimo di righe che hanno lasciato le attività del flusso di dati del pacchetto.

avg_duration

Il tempo medio (in millisecondi) impiegato nel componente flusso di dati del pacchetto.

min_duration

Il tempo minimo (in millisecondi) impiegato nel componente flusso di dati del pacchetto.

max_duration

Il tempo massimo (in millisecondi) impiegato nel componente flusso di dati del pacchetto.

Una seconda fonte di dati relativi alle prestazioni è la tabella syscollector_execution_log_full in cui vengono fornite informazioni su quanto è durata o sta durando l'esecuzione di un insieme di raccolta.

Da ultimo, i contatori delle prestazioni possono facilitare l'individuazione dei problemi di prestazioni. In particolare, i contatori standard delle istanze di processo (dcexec.exe) dell'agente di raccolta dati forniscono una buona indicazione della quantità di risorse di sistema utilizzate dal componente runtime dell'agente di raccolta dati.

Scenari dei problemi di prestazioni

Sono due gli scenari che hanno le maggiori probabilità di presentarsi come problemi di prestazioni durante l'esecuzione dell'agente di raccolta dati:

  • L'agente di raccolta dati utilizza troppe risorse di sistema.

  • L'agente di raccolta dati non è sincronizzato con il carico della raccolta.

Utilizzo eccessivo delle risorse di sistema

Se un'analisi dei contatori delle prestazioni di processo indica che i processi dcexec.exe stanno utilizzando troppe risorse di sistema, occorre indagare come segue.

Innanzitutto, determinare se è un unico insieme di raccolta ad utilizzare la maggior parte delle risorse.

  • Per individuare l'insieme di raccolta, eseguire il mapping dell'ID processo all'ID dell'insieme di raccolta in syscollector_execution_log_full e quindi trovare l'insieme di raccolta nella tabella syscollector_collection_sets.

  • Determinare che cosa sta raccogliendo l'insieme di raccolta. Utilizzare la query seguente per elencare tutti gli elementi della raccolta raggruppati nell'insieme:

    select * from syscollector_collection_set_items where collection_set_id = <id>
    
  • Utilizzando le informazioni provenienti dalla query precedente, porsi le seguenti domande:

    • Gli elementi della raccolta sono troppi?

    • La maggior parte dei problemi è provocata da un unico elemento della raccolta?

    • I dati raccolti sono troppi?

    • Se si risponde di sì a una delle domande precedenti, modificare la raccolta o gli elementi della raccolta per ridurre il volume dei dati raccolti. In tal modo si ridurrà l'utilizzo delle risorse.

In secondo luogo, determinare se è il numero degli insiemi di raccolta attivi a provocare il problema.

  • Scoprire quanti insiemi di raccolta sono definiti nel sistema utilizzando la query seguente:

    select count(*) from syscollector_collection_sets
    
  • Scoprire quanti insiemi di raccolta sono attualmente in esecuzione utilizzando la query seguente:

    select count(*) from syscollector_execution_log_full where parent_log_id is null and status = 1
    
  • Se il problema di prestazione si verifica saltuariamente, valutarne la possibile correlazione a un'attività di raccolta o caricamento. L'uniformità delle pianificazioni potrebbe essere la causa del problema. L'adattamento della pianificazione della raccolta o del caricamento talvolta rappresenta la soluzione più ovvia.

Impossibile tenersi al passo con il caricamento

Questa condizione si verifica solo con insiemi di raccolta in esecuzione continua. Se la frequenza di raccolta è elevata e il volume di dati da raccogliere è grande, il pacchetto di raccolta potrebbe non essere in grado di elaborare i dati nei tempi allocati per una iterazione dello snapshot. È possibile rilevare questa condizione confrontando le colonne avg_duration e max_duration della tabella del log alla frequenza di raccolta definita per un elemento di raccolta specifico.

Se il valore max_duration è maggiore del valore della frequenza, il pacchetto di raccolta potrebbe non essere sempre sincronizzato con la frequenza configurata. Se il valore avg_duration è maggiore della frequenza, il pacchetto di raccolta presenta un problema costante. Nel secondo caso, la frequenza deve essere ridotta o l'elemento di raccolta modificato per limitare la quantità di dati raccolti.

Blocchi di sistema

È possibile che un sistema si blocchi se nel pacchetto in esecuzione all'interno di un agente di raccolta dati si verifica un'interruzione dell'elaborazione che non determina l'uscita dal programma ma solo la permanenza nello stato corrente. La maggior parte di blocchi di sistema si può risolvere arrestando e riavviando l'insieme di raccolta.

È importante distinguere un vero blocco da un comportamento richiesto.

  • Un pacchetto di raccolta in continua esecuzione resta per la maggior parte del tempo in stato di attesa, attivandosi periodicamente per raccogliere uno snapshot dei dati. Dopo avere raccolto i dati, il pacchetto ritorna in stato di attesa. Questo stato di attesa può apparire erroneamente come un blocco di sistema. Per controllare, verificare il pacchetto sospetto sulla tabella syscollector_execution_log_full. Se il last_iteration_time non è successivo rispetto all'ora corrente, la condizione non è un blocco.

  • Un pacchetto potrebbe essere stato progettato per essere in attesa di un evento che lancerà un'azione di raccolta. In tal caso il pacchetto resterà in attesa di quell'evento. Non si tratta quindi di un blocco.

Per controllare se c'è un blocco di sistema correlato all'agente di raccolta dati, effettuare i controlli seguenti:

  • Innanzitutto, identificare l'ID di processo dcexec.exe corrispondente all'insieme di raccolta che si desidera esaminare.

  • Quindi, controllare se il processo è in esecuzione e se sta utilizzando risorse. Qualsiasi processo bloccato di solito utilizza lo 0% della CPU senza allocare ulteriore memoria. Il processo può utilizzare anche una percentuale elevata della CPU. In tal caso potrebbe essere entrato in un loop e rimanere memoria.

  • Infine, controllare la tabella del log per il processo per vedere quando è stata aggiornata l'ultima volta. Se i tempi di aggiornamento sono maggiori della frequenza per l'elemento di raccolta, il processo potrebbe essere bloccato.

I motivi per cui un processo dell'agente di raccolta dati può bloccarsi sono molti. Di seguito sono elencati i più comuni:

  • Un pacchetto è in attesa dell'iterazione successiva, ma ciò non si verifica.

  • Un pacchetto è in attesa di un blocco condiviso e trattenuto da un altro pacchetto, che non viene tuttavia rilasciato.

  • Durante l'esecuzione del pacchetto si verifica un errore che, non essendo gestito correttamente, causa l'interruzione del flusso di controllo; il pacchetto tuttavia viene eseguito almeno in parte.

In tutti i casi sopra descritti vi sono specifiche voci del log che si riferiscono al blocco di sistema. Verificare la presenza di messaggi che indichino una causa. In caso di blocco di sistema, creare un dump del processo dcexec.exe e condurre un ulteriore esame.