Problembehandlung beim Datenauflister

Dieses Thema behandelt die folgenden Kategorien der Problembehandlung:

  • Fehlerbedingungen. Diese Kategorie behandelt das Objektmodell und Laufzeitfehler.

  • Leistungsaspekte. Diese Kategorie behandelt allgemeine und bestimmte Leistungsszenarien.

  • Hängenbleiben des Systems. Diese Kategorie umfasst das Hängenbleiben von Unterkomponenten während der Datenauflistung.

Fehlerbedingungen

Fehler können vom Objektmodell oder zur Laufzeit ausgelöst werden.

Objektmodellfehler

Das Objektmodell für den Datenauflister ist eine verwaltete API, die eine programmgesteuerte Methode zum Verwalten der Eigenschaften des Datenauflisters und der Datenauflistsätze bereitstellt. Das Objektmodell ist ein schlanker Wrapper für eine Gruppe von gespeicherten Prozeduren und Sichten, die einen Konfigurationsmechanismus für den Datenauflister bereitstellen. Weitere Informationen finden Sie unter Programmieren mit dem Datensammler.

Objektmodellfehler können von einer der folgenden Komponenten des Objektmodells kommen:

  • Ein Transact-SQL-Fehler wird von einer gespeicherten Prozedur oder von Transact-SQL-Code ausgelöst, der von einer der gespeicherten Prozeduren des Datenauflisters aufgerufen wird.

  • Ein Transact-SQL-Fehler wird direkt von einer gespeicherten Prozedur des Datenauflisters ausgelöst.

  • Eine verwaltete Ausnahme wird direkt vom Objektmodell ausgelöst.

In der folgenden Tabelle werden die Fehler beschrieben, die vom Objektmodell ausgelöst werden können.

Fehlermeldung

Fehlernummer

Beschreibung

Die Eigenschaften name, target, proxy_id oder collection_mode des aktiven Auflistsatzes '%s' können nicht aktualisiert werden. Beenden Sie den Auflistsatz, und versuchen Sie dann erneut, diesen zu aktualisieren.

14669

Es wurde versucht, einen aktiven Auflistsatz zu aktualisieren. Ein Auflistsatz muss beendet werden, bevor ein Update dieses Typs vorgenommen werden kann. Nur der Hochladezeitplan kann bei aktivem Auflistsatz geändert werden.

Der aktive Auflistsatz '%s' kann nicht gelöscht werden. Beenden Sie den Auflistsatz, und versuchen Sie dann erneut, diesen zu löschen.

14670

Es wurde versucht, einen aktiven Auflistsatz zu löschen.

Der Name oder die Parameter des '%s'-Auflistelements in dem aktiven Auflistsatz '%s' können nicht aktualisiert werden. Beenden Sie den Auflistsatz, und versuchen Sie dann erneut, das Auflistelement zu aktualisieren.

14671

Es wurde versucht, ein Auflistelement in einem aktiven Auflistsatz zu aktualisieren.

Das '%s'-Auflistelement in dem aktiven Auflistsatz '%s' kann nicht gelöscht werden. Beenden Sie den Auflistsatz, und versuchen Sie dann erneut, das Auflistelement zu löschen.

14672

Es wurde versucht, ein Auflistelement in einem aktiven Auflistsatz zu löschen.

Der '%s'-Auflistertyp kann nicht gelöscht werden. Löschen Sie alle mit diesem Auflistertyp verknüpften Auflistelemente, und versuchen Sie dann erneut, diesen zu löschen.

14673

Es wurde versucht, einen Auflistertyp zu löschen, dem Auflistelemente zugeordnet sind.

Für den inaktiven Auflistsatz '%s' können keine Daten hochgeladen werden. Starten Sie den Auflistsatz, und versuchen Sie dann erneut, die Daten hochzuladen.

14674

Es wurde versucht, Daten hochzuladen, die von einem inaktiven Auflistsatz aufgelistet wurden.

Die Eigenschaften name, target, proxy_id, logging_level oder collection_mode können nicht aktualisiert werden, oder das Auflistelement kann dem aktiven Auflistsatz '%s' nicht hinzugefügt werden. Beenden Sie den Auflistsatz, und versuchen Sie dann erneut, diesen zu aktualisieren.

14675

Es wurde versucht, einen aktiven Auflistsatz zu aktualisieren.

Der Benutzer verfügt nicht über die Berechtigung zum Ändern von '%s'. Er muss ein Mitglied der Datenauflisterrolle '%s' sein.

14676

Der Benutzer hat versucht, eine Eigenschaft zu aktualisieren, die nur von einer bestimmten Datenauflisterrolle geändert werden kann.

Der Benutzer verfügt nicht über die Berechtigung zum Durchführen dieses Vorgangs. Er muss ein Mitglied der Datenauflisterrolle '%s' sein.

14677

Der Benutzer hat versucht, einen Vorgang durchzuführen, ohne Teil der erforderlichen Datenauflisterrolle zu sein.

Die SQL Server-Ablaufverfolgung mit der ID %d wurde von einem externen Benutzer angehalten und geschlossen. Der Auflister der SQL Server-Ablaufverfolgung versucht, die Ablaufverfolgung wiederherzustellen.

14678

Eine vom Datenauflister erstellte und verwendete Ablaufverfolgung wurde außerhalb der Laufzeit des Auflisters angehalten und geschlossen.

%s (%s) ist in diesem Data Warehouse nicht gültig.

14679

Ein Parameter, der an eine der gespeicherten Prozeduren des Verwaltungs-Data Warehouses übergeben wurde, besitzt einen Wert, der nicht mit den anderen Einträgen im Warehouse übereinstimmt.

Diese Version von instmdw.sql darf nur an einem Server mit SQL Server 2005 oder höher ausgeführt werden.

14680

Es wurde versucht, ein Verwaltungs-Data Warehouse auf einem Server zu installieren, auf dem SQL Server 2000 oder früher ausgeführt wird.

Dieser Vorgang kann nicht ausgeführt werden, wenn der Auflister deaktiviert ist. Aktivieren Sie den Auflister, und wiederholen Sie den Vorgang.

14681

Es wurde versucht, einen Vorgang auszuführen, der in Konflikt mit dem Status des Auflisters steht.

Der Status des Auflistsatzes hat sich geändert, er wird jedoch erst gestartet bzw. beendet, wenn der Auflister aktiviert wird.

14682

Es wurde versucht, einen Auflistsatz bei nicht aktiviertem Auflister zu starten oder zu beenden.

Für einen Auflistsatz im Snapshot- oder kontinuierlichen Modus ist ein Zeitplan erforderlich.

14683

Es wurde ein Auflistsatz im Snapshot- oder kontinuierlichen Modus ohne Angabe eines Zeitplans erstellt oder aktualisiert.

Gefundene Fehlernummer: %d, Ebene: %d, Status: %d, in Prozedur: %s, Zeile: %d, mit Meldung: %s

14684

In der Datenauflisterkomponente ist ein generischer Fehler aufgetreten; der Fehler wurde in einem catch-Block abgefangen und erneut ausgelöst.

Ungültiger Vorgang. Der Status des Auflistsatzes mit ID = %d lautet zur Zeit "wird nicht ausgeführt".

14685

Aufruf von sp_syscollector_create_set_queue_and_service für einen Satz mit einem is_running-Status von 0 (null).

Der MDWInstance- und der MDWDatabase-Parameter des Konfigurationsspeichers darf nicht NULL sein.

14686

Eine Verbindungszeichenfolge für das Verwaltungs-Data Warehouse ist entweder für den MDWInstance-Parameter oder den MDWDatabase-Parameter NULL.

Ungültiger Wert (%d) des @cache_window-Parameters. Zulässige Werte sind: -1 (alle hochgeladenen Daten von früheren Uploadfehlern werden zwischengespeichert), 0 (es werden keine hochgeladenen Daten zwischengespeichert), N (Daten aus N früheren Uploadfehlern werden zwischengespeichert, wobei N >= 1).

14687

Es wurde versucht, den Wert des CacheWindow-Parameters des Auflisterkonfigurationsspeichers auf einen Wert kleiner -1 festzulegen.

Ein Auflistsatz kann nicht gestartet werden, wenn der SQL Server-Agent angehalten wurde. Starten Sie den SQL Server-Agent.

14688

Es wurde versucht, einen Auflistsatz bei nicht aktiviertem SQL Server-Agent zu starten.

Ein Auflistsatz kann nicht gestartet werden, wenn das Verwaltungs-Data Warehouse nicht konfiguriert ist. Führen Sie das instmdw.sql-Skript aus, um das Verwaltungs-Data Warehouse zu erstellen und zu konfigurieren.

14689

Es wurde versucht, einen Auflistsatz bei nicht konfiguriertem Verwaltungs-Data Warehouse zu starten.

Diese Prozedur kann nicht durchgeführt werden, wenn der Auflister aktiviert ist. Deaktivieren Sie den Auflister, und wiederholen Sie den Vorgang.

14690

Es wurde versucht, einen Vorgang auszuführen, der in Konflikt mit dem Status des Auflisters steht.

Der Status des Auflisters darf nicht NULL sein. Dies deutet möglicherweise auf eine interne Beschädigung der Konfigurationsdaten des Auflisters hin.

14691

Ein Aufruf von sp_syscollector_verify_collector_state hat einen NULL-Wert für den CollectorEnabled-Parameter ermittelt. Dies deutet möglicherweise auf eine interne Beschädigung der Konfigurationsdaten des Auflisters hin.

Laufzeitfehler

Laufzeitfehler können auftreten, wenn ein Auflistungs- oder ein Hochladepaket ausgeführt wird und ein Problem auftritt. Die Fehler können von einer der folgenden Komponenten stammen:

  • Dem Datenfluss eines SQL Server 2008 Integration Services (SSIS)-Pakets. Diese Fehler können das Ergebnis einer fehlgeschlagenen Datenkonvertierung oder eines Abschneidens von Daten sein. Der Datenauflister zeichnet die Anzahl der Zeilen auf, die von dem Fehler betroffen sind, und protokolliert diese Anzahl in den Protokolltabellen des Datenauflisters.

  • Der Ablaufsteuerung eines SSIS-Pakets. Diese Fehler werden in den SSIS-Protokolltabellen der msdb-Datenbank (msdb.dbo.sysssislog) protokolliert und an die Protokolltabellen des Datenauflisters übergeben.

  • Der Laufzeitkomponente des Datenauflisters (dcexec.exe). Diese Fehler werden direkt in den Protokolltabellen des Datenauflisters protokolliert.

Weitere Informationen finden Sie unter Datensammlerprotokollierung.

Es empfiehlt sich, die Statusinformationen über Laufzeitfehler mit einer der folgenden Methoden abzurufen.

Gespeicherte Prozeduren und Sichten von Transact-SQL

Führen Sie die folgende Abfrage aus, um den Status aller derzeit aktiven und beendeten Auflistsätze oder -pakete anzuzeigen:

use msdb
select * from syscollector_execution_log_full

Die vorhergehende Abfrage gibt das folgende Resultset zurück:

Spaltenname

Beschreibung

log_id

Eindeutige ID für jede Ausführung eines Auflistsatzes. Wird verwendet, um diese Sicht mit anderen ausführlichen Protokollen zu verknüpfen.

parent_log_id

Die ID des übergeordneten Pakets oder Auflistsatzes. Für den Auflistsatz ist dies NULL. Die IDs werden in einer Parent-Child-Beziehung verkettet. Auf diese Weise können Sie auf einfache Weise erkennen, welches Paket von welchem Auflistsatz gestartet wurde. Diese Sicht gruppiert die Protokolleinträge außerdem nach ihren Parent-Child-Verknüpfungen und rückt die Namen der Pakete ein, sodass die Aufrufkette übersichtlich angezeigt wird.

name

Der Name des Auflistsatzes oder des Pakets, der bzw. das von diesem Protokolleintrag dargestellt wird.

collection_mode

Aktivität des Auflistsatzes, als der Eintrag vorgenommen wurde (entweder Auflistung oder Hochladevorgang).

start_time

Zeitpunkt, zu dem der Auflistsatz oder das Paket gestartet wurde.

last_iteration_time

Für kontinuierlich ausgeführte Pakete der letzte Zeitpunkt, zu dem das Paket einen Snapshot aufgezeichnet hat.

finish_time

Für abgeschlossene Pakete und Auflistungssätze der Zeitpunkt, zu dem der Lauf beendet wurde.

duration

Die Dauer (in Millisekunden), für die das Paket oder der Auflistsatz ausgeführt wurde.

operator

Der Operator, der den Auflistsatz oder das Paket gestartet hat.

status

Der Status des Auflistsatzes oder Pakets. Gültige Werte:

  • 0 - aktiv

  • 1 - beendet

  • 2 - Fehler

failure_task

Wenn ein Fehler beim Auflistsatz oder Paket aufgetreten ist, der Name des Tasks im SSIS-Paket, das den Fehler verursacht hat.

package_execution_id

Link zur SSIS-Protokolltabelle.

collection_set_id

Link zur Konfigurationstabelle des Datenauflisters.

HinweisHinweis
Sie können collection_set_id als Filter verwenden, um sich auf einen bestimmten Auflistsatz im Protokoll zu konzentrieren.

Weitere Informationen finden Sie unter syscollector_execution_log_full (Transact-SQL).

Sie können zusätzliche Informationen zur Ausführung von Auflistsätzen und Paketen abrufen, indem Sie eine der vom Datenauflister bereitgestellten Funktionen ausführen.

Die folgende Funktion gibt ausführliche Statistiken zum Auflistsatz oder Paket zurück, einschließlich der vom Paket protokollierten Anzahl der Fehlerzeilen.

select * from fn_syscollector_get_execution_stats(@log_id)

Die nächste Funktion gibt einen Teil des SSIS-Protokolls (sysdtslog90) zurück, der mit der package_execution_id für ein Paket übereinstimmt. Wenn das Paket fehlgeschlagen ist, ist dies die beste Möglichkeit, den Stammfehler zu ermitteln.

select * from fn_syscollector_get_execution_details(@log_id)

Statusberichte des Datenauflisters

Sie können die gleichen, von den vorhergehenden Transact-SQL-Abfragen zurückgegebenen Informationen abrufen, indem Sie die in SQL Server Management Studio bereitgestellten Protokolle anzeigen. Weitere Informationen finden Sie unter Vorgehensweise: Anzeigen von Auflistsatzprotokollen.

Leistungsaspekte

Es gibt drei primäre Quellen von Daten, die Sie zum Überprüfen und Diagnostizieren der Leistung verwenden können.

Zunächst einmal bieten die im vorherigen Abschnitt beschriebenen Tabellen nützliche Informationen zum Beheben von Leistungsproblemen.

Die fn_syscollector_get_execution_stats-Funktion gibt die folgenden Informationen zurück.

Spaltenname

Beschreibung

avg_row_count_in

Die durchschnittliche Anzahl von Zeilen, die in die Datenflusstasks des Pakets eingetreten sind.

min_row_count_in

Die minimale Anzahl von Zeilen, die in die Datenflusstasks des Pakets eingetreten sind.

max_row_count_in

Die maximale Anzahl von Zeilen, die in die Datenflusstasks des Pakets eingetreten sind.

avg_row_count_out

Die durchschnittliche Anzahl von Zeilen, die die Datenflusstasks des Pakets verlassen haben.

min_row_count_out

Die minimale Anzahl von Zeilen, die die Datenflusstasks des Pakets verlassen haben.

max_row_count_out

Die maximale Anzahl von Zeilen, die die Datenflusstasks des Pakets verlassen haben.

avg_duration

Die durchschnittliche Verweildauer (in Millisekunden) in der Datenflusskomponente des Pakets.

min_duration

Die minimale Verweildauer (in Millisekunden) in der Datenflusskomponente des Pakets.

max_duration

Die maximale Verweildauer (in Millisekunden) in der Datenflusskomponente des Pakets.

Eine zweite Quelle mit Leistungsdaten ist die Tabelle syscollector_execution_log_full, die Informationen über die Ausführungsdauer eines Auflistsatzes bietet.

Schließlich können Leistungsindikatoren zur Bewertung von Leistungsproblemen verwendet werden. Insbesondere die Standardleistungsindikatoren für den Datenauflisterprozess (dcexec.exe) stellen gute Indikatoren für den Umfang der Systemressourcen bereit, die die Laufzeitkomponente des Datenauflisters in Anspruch nimmt.

Szenarien für Leistungsprobleme

Beim Ausführen des Datenauflisters treten zwei Szenarien mit hoher Wahrscheinlichkeit auf:

  • Der Datenauflister belegt zu viele Systemressourcen.

  • Der Datenauflister kann nicht mit der Auflistungslast Schritt halten.

Übermäßiger Verbrauch von Systemressourcen

Wenn eine Analyse der Prozessleistungsindikatoren darauf hinweist, dass dcexec.exe zu viele Systemressourcen in Anspruch nimmt, müssen folgende Untersuchungen vorgenommen werden.

Stellen Sie zuerst fest, ob es einen einzelnen Auflistsatz gibt, der die meisten Ressourcen verwendet.

  • Um den Auflistsatz zu identifizieren, weisen Sie die Prozess-ID der Auflistsatz-ID in syscollector_execution_log_full zu, und suchen Sie den Auflistsatz anschießend in der Tabelle syscollector_collection_sets.

  • Stellen Sie fest, was der Auflistsatz sammelt. Verwenden Sie die folgende Abfrage, um alle im Satz gruppierten Auflistelemente aufzuführen:

    select * from syscollector_collection_set_items where collection_set_id = <id>
    
  • Stellen Sie sich die folgenden Fragen anhand der Informationen der vorhergehenden Abfrage:

    • Gibt es zu viele Auflistelemente?

    • Verursacht ein einzelnes Auflistelement den Großteil der Probleme?

    • Werden zu viel Daten gesammelt?

    • Wenn eine der obigen Fragen mit ja beantwortet werden kann, sollten Sie eine Änderung der Auflistung oder der Auflistelemente in Betracht ziehen, um die gesammelte Datenmenge zu verringern. Damit wird der Ressourcenverbrauch gesenkt.

Stellen Sie als nächstes fest, ob die Anzahl der aktiven Auflistsätze das Problem verursacht.

  • Ermitteln Sie anhand der folgenden Abfrage, wie viele Auflistsätze auf dem System definiert sind:

    select count(*) from syscollector_collection_sets
    
  • Ermitteln Sie anhand der folgenden Abfrage, wie viele Auflistsätze derzeit aktiv sind:

    select count(*) from syscollector_execution_log_full where parent_log_id is null and status = 1
    
  • Wenn das Leistungsproblem periodisch auftritt, müssen Sie prüfen, ob sich das Problem einer Auflist- oder Hochladeaktivität zuordnen lässt. Wenn alle Zeitpläne gleich sind, kann das Problem dadurch verursacht werden. Eine einfache Lösung könnte darin bestehen, den Auflistungs- oder Hochladezeitplan anzupassen.

Unfähigkeit, mit der Last Schritt zu halten

Diese Bedingung tritt nur bei kontinuierlich ausgeführten Auflistsätzen auf. Bei hoher Auflisthäufigkeit und großem Datenvolumen, das gesammelt werden muss, kann das Auflistpaket die Daten unter Umständen nicht in der Zeit verarbeiten, die einer einzelnen Snapshotiteration zugeordnet ist. Sie erkennen diese Bedingung, wenn Sie die avg_duration-Spalte und die max_duration-Spalte in der Protokolltabelle mit der Auflisthäufigkeit vergleichen, die für ein bestimmtes Auflistelement definiert ist.

Wenn der max_duration-Wert größer ist als der Häufigkeitswert, ist das Auflistpaket unter Umständen nicht immer in der Lage, mit der konfigurierten Häufigkeit Schritt zu halten. Wenn der avg_duration-Wert höher als die Häufigkeit ist, hat das Auflistungspaket ein permanentes Problem. Im zuletzt genannten Fall muss die Häufigkeit verringert werden, oder das Auflistelement muss so geändert werden, dass die Menge der gesammelten Daten begrenzt wird.

Hängenbleiben des Systems

Ein System kann hängen bleiben, wenn die Verarbeitung eines Pakets, das als Teil eines Datenauflisters ausgeführt wird, beendet, aber nicht geschlossen wird und in diesem Status bleibt. Das Hängenbleiben des Systems kann in den meisten Fällen durch ein Beenden und erneutes Starten eines Auflistsatzes aufgelöst werden.

Es ist wichtig, ein richtiges Hängenbleiben von beabsichtigtem Verhalten zu unterscheiden.

  • Ein kontinuierlich ausgeführtes Auflistpaket befindet sich die meiste Zeit in einem Wartezustand. Es wechselt regelmäßig in den aktiven Zustand, um einen Datensnapshot zu erfassen. Nachdem die Daten gesammelt wurden, wechselt das Paket wieder in den Wartezustand. Dieser Wartezustand könnte als ein Hängenbleiben des Systems erscheinen, was aber nicht der Fall ist. Um dies zu überprüfen, suchen Sie in der Tabelle syscollector_execution_log_full nach dem fehlerverdächtigen Paket. Wenn last_iteration_time nicht später als die aktuelle Zeit war, hängt das System nicht.

  • Ein Paket könnte darauf ausgelegt sein, auf ein Ereignis zu warten, das eine Auflistungsaktion auslöst. In diesem Fall wartet das Paket auf dieses Ereignis. Dies ist kein Hängenbleiben.

Führen Sie die folgenden Prüfungen aus, um festzustellen, ob das System aufgrund des Datenauflisters hängt:

  • Identifizieren Sie zuerst die Prozess-ID für dcexec.exe, die dem zu untersuchenden Auflistsatz entspricht.

  • Überprüfen Sie danach, ob der Prozess ausgeführt wird und ob er irgendwelche Ressourcen verwendet. Jeder blockierter Prozess verwendet normalerweise 0 % CPU und reserviert nicht mehr Arbeitsspeicher. Der Prozess kann auch einen hohen Prozentsatz der CPU verwenden. Wenn dies der Fall ist, könnte er sich in einer Schleife befinden und den Arbeitsspeicher nicht verlassen.

  • Sehen Sie schließlich in der Protokolltabelle nach, wann der Prozess zuletzt aktualisiert wurde. Wenn die Aktualisierungszeit über der Häufigkeit für das Auflistelement liegt, könnte der Prozess hängen.

Es gibt mehrere Gründe, aus denen ein Datenauflisterprozess hängen bleiben kann. Die häufigsten Ursachen sind folgende:

  • Ein Paket wartet darauf, dass die nächste Iteration signalisiert wird. Dies geschieht jedoch nicht.

  • Ein Paket wartet auf eine gemeinsame Sperre, die von einem anderen Paket gehalten wird, die Sperre wird jedoch nicht aufgehoben.

  • Bei einer nicht richtig gehandhabten Paketausführung ist ein Fehler aufgetreten, und die Ablaufsteuerung wurde unterbrochen, das Paket schlug aber nicht vollständig fehl.

In allen genannten Fällen gibt es bestimmte Einträge im Protokoll, die das Hängenbleiben des Systems betreffen. Prüfen Sie, ob es irgendwelche Meldungen gibt, die auf eine Ursache hinweisen. Erstellen Sie beim Hängenbleiben des Systems einen Dump des dcexec.exe-Prozesses, und führen Sie weitere Überprüfungen durch.