Sammeln von Leistungsdaten

Nachdem Sie eine Abfrage erstellt und ihr Leistungsindikatoren hinzugefügt haben, rufen Sie die Funktion PdhCollectQueryData auf, um die aktuellen Rohdaten für alle Leistungsindikatoren in der Abfrage abzurufen.

Viele Leistungsindikatoren – z. B. Indikatoren, die einen Ratenwert repräsentieren – erfordern zwei Datenstichproben, um einen formatierten Datenwert zu berechnen. PDH verwaltet Daten für die aktuelle und die zuvor erfasste Stichprobe. Das folgende Verfahren beschreibt, wie Sie Leistungsindikatoren erfassen, bei denen für die Berechnung eines Anzeigewerts zwei Stichproben erforderlich sind.

So erfassen Sie Leistungsindikatoren, die zur Berechnung eines Anzeigewerts zwei Stichproben benötigen

  1. Rufen Sie PdhCollectQueryData auf, um die erste Stichprobe zu sammeln.
  2. Rufen Sie die Funktion Sleep auf, um zwischen den Erfassungen mindestens eine Sekunde zu warten.
  3. Rufen Sie PdhCollectQueryData erneut auf, um die zweite Stichprobe zu erfassen.
  4. Rufen Sie die Funktion PdhGetFormattedCounterValue auf, um einen Anzeigewert zu berechnen.
  5. Wiederholen Sie die Schritte 2 bis 4.

Statt selbst eine Wartezeit zu implementieren, können Sie auch die Funktion PdhCollectQueryDataEx aufrufen. Sie erstellt einen Timingthread, der eine bestimmte Zeitspanne wartet, die Stichprobe erfasst und dann ein von der Anwendung definiertes Ereignis auslöst.

Wenn Sie Leistungsdaten aus einer Protokolldatei abfragen möchten, können Sie auch einen Zeitbereich festlegen. Der Zeitbereich schränkt die Abfrage auf die Stichproben ein, die innerhalb des Zeitbereichs gesammelt wurden (jede Stichprobe enthält einen Zeitstempel, der den Erfassungszeitpunkt angibt). Weitere Informationen zum Festlegen und Abrufen von Zeitbereichen finden Sie unter Festlegen eines Zeitbereichs für eine Abfrage.

Wenn Sie Leistungsdaten sammeln und in eine Protokolldatei schreiben möchten, rufen Sie anstelle von PdhCollectQueryData die Funktion PdhUpdateLog auf. Ausführliche Informationen finden Sie unter Arbeiten mit Protokolldateien und Schreiben von Leistungsdaten in eine Protokolldatei.

Einzelheiten zur Berechnung eines Anzeigewerts für die Stichprobe finden Sie unter Anzeigen von Leistungsdaten.

Grundlegendes zu Indikatoren für Mehrprozessorsysteme

Einige Leistungsindikatoren wurden für Einzelprozessorsysteme entwickelt und sind für Computer mit mehreren Prozessoren möglicherweise nicht genau genug. Ein Prozess ist beispielsweise auf 100 Prozent eines einzelnen Prozessors begrenzt. Die Threads des Prozesses können jedoch mehrere Prozessoren nutzen und insgesamt mehr als 100 Prozent beanspruchen.

Der Leistungsindikator „\Prozessor(_Gesamt)\Prozessorzeit (%)“ gibt die durchschnittliche Auslastung aller Prozessoren an. Wenn Sie z. B. über zwei Prozessoren verfügen, von denen einer zu 100 % und der andere zu 0 % ausgelastet ist, zeigt dieser Leistungsindikator eine Auslastung von 50 % an. Der Bereich liegt also zwischen 0 und 100.

Der Leistungsindikator „\Prozess(X)\ Prozessorzeit (%)“ (hierbei steht X für den Namen des Prozesses) gibt die Summe der Prozessorauslastung durch alle Threads von Prozess X an. Wenn beispielsweise auf einem Computer mit zwei Prozessoren ein Prozess zwei Threads umfasst, von denen ein Thread 75 % der ersten CPU und der andere Thread 80 % der zweiten CPU beansprucht, zeigt dieser Leistungsindikator eine Auslastung von 155 % an. Der Bereich für diesen Leistungsindikator reicht von 0 bis 100 × Prozessoranzahl.

Wenn Sie den Leistungsindikatorensatz Process verwenden, erhalten Sie möglicherweise Werte, die außerhalb des erwarteten Wertebereichs für die CPU-Auslastung liegen. Um den Prozentsatz der CPU-Auslastung zu berechnen, benötigt PDH zwei Stichproben (jeweils mit einem Rohwert und einem Zeitstempel). Da PDH zum Zuordnen der Prozesse nur den Instanznamen verwendet, kann es gelegentlich zu einer Vermischung von Stichproben verschiedener Prozesse kommen. Wenn zum Beispiel Stichproben für drei Prozesse mit gleichem Instanznamen erfasst werden und einer der Prozesse nach der dritten Stichprobe beendet wird, wechselt ein anderer Prozess zu dem Slot, der durch den beendeten Prozess frei geworden ist. Infolgedessen liefert ein formatierter Leistungsindikator beim Formatieren der vierten Stichprobe einen falschen Wert, weil er die dritte Stichprobe des beendeten Prozesses und die vierte Stichprobe des Prozesses verwendet, der den Slot des beendeten Prozesses übernommen hat.

Die folgende Tabelle zeigt, wie diese Situation eintreten kann, wenn ein Prozess während der Datenerfassung beendet wird. Die Tabelle zeigt fünf Stichproben von Leistungsindikatoren für drei Instanzen von Prozess X. Die Stichproben werden in Intervallen von einer Sekunde erfasst. Nachdem die dritte Stichprobe erfasst wurde, wird Prozess X in Slot 1 beendet. Nachdem Prozess X in Slot 1 beendet wurde, wechselt Prozess X in Slot 2 zu Slot 1. Wenn Sie die vierte Stichprobe für Prozess X in Slot 2 erfassen, beträgt der erste Wert nun 20 anstelle von 1.000, und der zweite Wert lautet 1.500. Wenn Sie den Wert des Leistungsindikators formatieren, erhalten Sie statt der erwarteten 500 Millisekunden einen Wert von 1.480 Millisekunden. Wenn Sie den fünften Stichprobenwert formatieren, sollten Sie den erwarteten Wert erhalten.

Beispiel Slot 0 für Prozess X Slot 1 für Prozess X Slot 2 für Prozess X
Beispiel 1 0 0 0
Beispiel 2 20 10 500
Beispiel 3 40 20 1,000
Beispiel 4 60 1.500 (aus vorherigem Slot 2) Nicht zutreffend. Jetzt erfasst in Slot 1.
Beispiel 5 80 2.000 Nicht zutreffend. Jetzt erfasst in Slot 1.

Tipp

Ab Windows 11 können Sie dieses Problem vermeiden, indem Sie den neuen Leistungsindikatorensatz Process V2 verwenden. Der Leistungsindikatorensatz Process V2 enthält die Prozess-ID im Instanznamen. Dadurch werden die inkonsistenten Ergebnisse vermieden, die beim ursprünglichen Leistungsindikatorensatz Process auftreten.