Statistiken zur Abfrageleistung abrufen

In diesem Dokument wird beschrieben, wie Sie mit der Ausführungsgrafik für Abfragen Probleme mit der Abfrageleistung diagnostizieren und Informationen zur Abfrageleistung einsehen können.

BigQuery bietet eine hohe Abfrageleistung, ist jedoch auch ein komplexes verteiltes System mit vielen internen und externen Faktoren, die sich auf die Abfragegeschwindigkeit auswirken können. Aufgrund der deklarativen Beschaffenheit der SQL-Sprache kann die Komplexität der Abfrageausführung verborgen sein. Daher kann es schwierig sein, die Ursache dafür zu finden, sollten Ihre Abfragen langsamer als erwartet oder langsamer als vorherige Ausführungen ausgeführt werden.

Die Ausführungsgrafik für Abfragen bietet eine intuitive Benutzeroberfläche zum Abrufen der Details der Abfrageleistung. So können Sie die Informationen des Abfrageplans im grafischen Format für jede Abfrage prüfen, unabhängig davon, ob sie gerade ausgeführt wird oder bereits abgeschlossen ist.

Über die Ausführungsgrafik für Abfragen können Sie auch Leistungsinformationen für Abfragen abrufen. Leistungsinformationen stellen Ihnen Best-Effort-Vorschläge zum Verbessern der Abfrageleistung bereit. Da die Abfrageleistung mehrteilig ist, liefern die Leistungsinformationen möglicherweise nur ein unvollständiges Bild der Gesamtabfrageleistung.

Erforderliche Berechtigungen

Zur Verwendung der Abfrageausführungsgrafik benötigen Sie die folgenden Berechtigungen:

  • bigquery.jobs.get
  • bigquery.jobs.listAll

Diese Berechtigungen sind über die folgenden vordefinierten BigQuery-IAM-Rollen (Identity and Access Management) verfügbar:

  • roles/bigquery.admin
  • roles/bigquery.resourceAdmin
  • roles/bigquery.resourceEditor
  • roles/bigquery.resourceViewer

Statistiken zur Abfrageleistung aufrufen

Console

So rufen Sie Statistiken zur Abfrageleistung auf:

  1. Öffnen Sie in der Google Cloud Console die Seite "BigQuery".

    Zur Seite „BigQuery“

  2. Klicken Sie im Editor entweder auf Persönlicher Verlauf oder Projektverlauf.

  3. Suchen Sie in der Liste der Abfragejobs nach den für Sie relevanten Abfragejob. Klicken Sie auf Aktionen und wählen Sie Abfrage im Editor öffnen aus.

  4. Wählen Sie den Tab Ausführungsgrafik aus, um eine grafische Darstellung aller Phasen der Abfrage zu sehen:

    Der grafische Abfrageplan in der Ausführungsgrafik.

    Sehen Sie sich das angezeigte Symbol an, um festzustellen, ob eine Abfragephase Leistungsstatistiken enthält. Phasen mit dem Informationssymbol haben Leistungsstatistiken. Phasen mit einem Häkchensymbol haben keine Leistungsstatistiken.

  5. Klicken Sie auf eine Phase, um den Bereich mit den Phasendetails zu öffnen. Dort finden Sie folgende Informationen:

    Details der Abfragephase.

  6. Optional: Wenn Sie eine Abfrage prüfen, die gerade ausgeführt wird, klicken Sie auf Synchronisieren, um die Ausführungsgrafik so zu aktualisieren, dass sie den aktuellen Status der Abfrage widerspiegelt.

    Synchronisieren Sie das Diagramm mit einer laufenden Abfrage.

  7. Optional: Klicken Sie auf Top-Phasen nach Dauer hervorheben, um die obersten Phasen nach Phasendauer im Diagramm hervorzuheben.

    Wichtigste Phasen nach Dauer anzeigen

  8. Optional: Um die Top-Phasen in der Grafik nach Slot-Zeit hervorzuheben, klicken Sie auf Top-Phasen nach Verarbeitung hervorheben.

    Top-Phasen nach Verarbeitung anzeigen.

  9. Optional: Klicken Sie auf Shuffle-Umverteilungsphasen anzeigen, um die Shuffle-Umverteilungsphasen in die Grafik aufzunehmen.

    Top-Phasen nach Verarbeitung anzeigen.

    Mit dieser Option können Sie die Neupartitionierungs- und Coalesce-Phasen anzeigen lassen, die in der Standardausführungsgrafik ausgeblendet sind.

    Während der Ausführung der Abfrage werden Repartition- und Coalesce-Phasen eingeführt. Sie werden verwendet, um die Datenverteilung auf die Worker zu verbessern, die die Abfrage verarbeiten. Da diese Phasen nicht mit Ihrem Abfragetext zusammenhängen, werden sie ausgeblendet, um den angezeigten Abfrageplan zu vereinfachen.

Für jede Abfrage, bei der Leistungsregressionen auftreten, werden auf dem Tab Jobinformationen Leistungsinformationen angezeigt:

Tab „Jobinformationen“

SQL

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    
    SELECT
      `bigquery-public-data`.persistent_udfs.job_url(
        project_id || ':us.' || job_id) AS job_url,
      query_info.performance_insights
    FROM
      `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
      DATE(creation_time) >= CURRENT_DATE - 30 -- scan 30 days of query history
      AND job_type = 'QUERY'
      AND state = 'DONE'
      AND error_result IS NULL
      AND statement_type != 'SCRIPT'
      AND EXISTS ( -- Only include queries which had performance insights
        SELECT 1
        FROM UNNEST(
          query_info.performance_insights.stage_performance_standalone_insights
        )
        WHERE slot_contention OR insufficient_shuffle_quota
        UNION ALL
        SELECT 1
        FROM UNNEST(
          query_info.performance_insights.stage_performance_change_insights
        )
        WHERE input_data_change.records_read_diff_percentage IS NOT NULL
      );
    

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

API

Sie können Statistiken zur Abfrageleistung in einem nicht grafischen Format abrufen, indem Sie die API-Methode jobs.list aufrufen und die zurückgegebenen Informationen JobStatistics2 prüfen.

Statistiken zur Abfrageleistung interpretieren

In diesem Abschnitt erfahren Sie mehr über Bedeutung der Leistungsinformationen und wie Sie mit diesen umgehen.

Leistungsinformationen sind für zwei Zielgruppen vorgesehen:

  • Analysten: Sie führen Abfragen in einem Projekt aus. Sie möchten wissen, warum eine zuvor ausgeführte Abfrage unerwartet langsamer ausgeführt wird und wie Sie die Leistung einer Abfrage verbessern können. Sie haben die unter Erforderliche Berechtigungen beschriebenen Berechtigungen.

  • Data Lake- oder Data Warehouse-Administratoren: Sie verwalten die BigQuery-Ressourcen und -Reservierungen Ihrer Organisation. Sie haben die Berechtigungen, die der Rolle „BigQuery-Administrator“ zugeordnet sind.

In jedem der folgenden Abschnitte finden Sie Anleitungen dazu, wie Sie mit einer Leistungsinformation umgehen, die auf Ihrer jeweiligen Rolle basiert.

Slot-Konflikt

Wenn Sie eine Abfrage ausführen, wird versucht, die für Ihre Abfrage erforderliche Arbeit in Aufgaben aufzuteilen. Eine Aufgabe ist ein einzelner Datenabschnitt, der in eine Phase ein- und ausgegeben wird. Ein einzelner Slot wählt eine Aufgabe aus und führt diesen Datenabschnitt für die Phase aus. Im Idealfall führen BigQuery-Slots diese Aufgaben parallel aus, um eine hohe Leistung zu erzielen. Slot-Konflikte treten auf, wenn Ihre Abfrage viele Aufgaben hat, die ausgeführt werden können, aber BigQuery nicht genügend verfügbare Slots zum Ausführen hat.

Was Sie tun sollten, wenn Sie ein Analyst sind

Reduzieren Sie die Daten, die Sie in Ihrer Abfrage verarbeiten, indem Sie der Anleitung unter In Abfragen verarbeitete Daten reduzieren folgen.

Wenn Sie Administrator sind

Führen Sie die folgenden Aktionen aus, um die Slot-Verfügbarkeit zu erhöhen oder die Slot-Nutzung zu verringern:

  • Wenn Sie die On-Demand-Preise von BigQuery verwenden, verwenden Ihre Abfragen einen gemeinsamen Slot-Pool. Sie können stattdessen zu den kapazitätsbasierten Analysepreisen wechseln, indem Sie stattdessen Reservierungen erwerben. Mit Reservierungen können Sie dedizierte Slots für die Abfragen Ihrer Organisation reservieren.
  • Wenn Sie BigQuery-Reservierungen verwenden, müssen Sie genügend Slots in der Reservierung haben, die dem Projekt zugewiesen ist, das die Abfrage ausgeführt hat. Die Reservierung hat in diesen Szenarien möglicherweise nicht genügend Slots:

    • Es gibt andere Jobs, die Reservierungs-Slots nutzen. In den Administratorressourcendiagrammen sehen Sie, wie Ihre Organisation die Reservierung nutzt.
    • Die Reservierung hat nicht genügend zugewiesene Slots, um Abfragen schnell genug auszuführen. Mit dem Slot-Estimator können Sie schätzen, wie groß Ihre Reservierungen sein sollten, um die Aufgaben Ihrer Abfragen effizient zu verarbeiten.

    Dies können Sie mit einer der folgenden Lösungen machen:

    • Fügen Sie dieser Reservierung weitere Slots hinzu.
    • Erstellen Sie eine zusätzliche Reservierung und weisen Sie sie dem Projekt zu, in dem die Abfrage ausgeführt wird.
    • Verteilen Sie ressourcenintensive Abfragen, entweder im Laufe der Zeit innerhalb einer Reservierung oder über verschiedene Reservierungen.
  • Achten Sie darauf, dass die Tabellen, die Sie abfragen, geclustert sind. Clustering sorgt dafür, dass BigQuery Spalten mit korrelierten Daten schnell lesen kann.

  • Achten Sie darauf, dass die Tabellen, die Sie abfragen, partitioniert sind. Bei nicht partitionierten Tabellen liest BigQuery die gesamte Tabelle. Durch die Partitionierung Ihrer Tabellen können Sie dafür sorgen, dass nur die Teilmenge der Tabellen abgefragt wird, an denen Sie interessiert sind.

Unzureichendes Shuffle-Kontingent

Bevor Sie Ihre Abfrage ausführen, teilt BigQuery die Logik Ihrer Abfrage inPhasen auf. BigQuery-Slots führen die Aufgaben für jede Phase aus. Wenn ein Slot die Ausführung der Aufgaben einer Phase abgeschlossen hat, werden die Zwischenergebnisse im Shuffle gespeichert. Bei nachfolgenden Phasen Ihrer Abfrage werden Daten aus dem Shuffle gelesen, um die Ausführung der Abfrage fortzusetzen. Ein unzureichendes Shuffle-Kontingent tritt auf, wenn Ihre Daten, die in den Shuffle geschrieben werden müssen, Ihre Shuffle-Kapazität übersteigen.

Was Sie tun sollten, wenn Sie ein Analyst sind

Ähnlich wie bei Slot-Konflikten kann die Reduzierung der von Ihren Abfragen verarbeiteten Datenmenge die Shuffle-Nutzung reduzieren. Folgen Sie dazu der Anleitung unter In Abfragen verarbeitete Daten reduzieren.

Bestimmte Vorgänge in SQL neigen zu einer umfassenderen Nutzung von Shuffle, insbesondere JOIN-Vorgänge und GROUP BY-Klauseln. Wenn möglich, kann die Reduzierung der Datenmenge bei diesen Vorgängen die Shuffle-Nutzung beeinträchtigen.

Wenn Sie Administrator sind

Reduzieren Sie die Shuffle-Kontingentkonflikte mit den folgenden Aktionen:

  • Ähnlich wie bei Slot-Konflikten verwenden Sie bei BigQuery-On-Demand-Preisen einen gemeinsamen Slot-Pool. Sie können stattdessen zu den kapazitätsbasierten Analysepreisen wechseln, indem Sie stattdessen Reservierungen erwerben. Mit Reservierungen erhalten Sie dedizierte Slots und Shuffle-Kapazitäten für die Abfragen Ihrer Projekte.
  • Wenn Sie BigQuery-Reservierungen verwenden, haben Slots eine eigene Shuffle-Kapazität. Wenn Ihre Reservierung einige Abfragen ausführt, die einen erheblichen Einsatz von Shuffle nutzen, kann dies dazu führen, dass andere parallel ausgeführte Abfragen nicht genügend Shuffle-Kapazität erhalten. Welche Jobs die Shuffle-Kapazität nutzen, können Sie anhand der Spalte period_shuffle_ram_usage_ratio in der Ansicht INFORMATION_SCHEMA.JOBS_TIMELINE ermitteln.

    Um dieses Problem zu beheben, können Sie eine oder mehrere der folgenden Lösungen ausprobieren:

    • Fügen Sie dieser Reservierung weitere Slots hinzu.
    • Erstellen Sie eine zusätzliche Reservierung und weisen Sie sie dem Projekt zu, in dem die Abfrage ausgeführt wird.
    • Verteilen Sie Shuffle-intensive Abfragen, entweder im Laufe der Zeit innerhalb einer Reservierung oder über verschiedene Reservierungen.

Änderung der Dateneingabeskalierung

Diese Leistungsinformationen zeigen an, dass Ihre Abfrage für eine bestimmte Eingabetabelle mindestens 50 % mehr Daten liest als beim letzten Ausführen der Abfrage. Mit dem Tabellenänderungsverlauf können Sie feststellen, ob die Größe einer der in der Abfrage verwendeten Tabellen kürzlich erhöht wurde.

Was Sie tun sollten, wenn Sie ein Analyst sind

Reduzieren Sie die Daten, die Sie in Ihrer Abfrage verarbeiten, indem Sie der Anleitung unter In Abfragen verarbeitete Daten reduzieren folgen.

Join mit hoher Kardinalität

Wenn eine Abfrage einen Join mit nicht eindeutigen Schlüsseln auf beiden Seiten des Joins enthält, kann die Größe der Ausgabetabelle erheblich größer sein als die Größe jeder der Eingabetabellen. Diese Statistik gibt an, dass das Verhältnis der Ausgabezeilen zu den Eingabezeilen hoch ist. Außerdem erhalten Sie Informationen zu dieser Zeilenanzahl.

Was Sie tun sollten, wenn Sie ein Analyst sind

Prüfen Sie Ihre Join-Bedingungen, um zu bestätigen, dass die Erhöhung der Größe der Ausgabetabelle erwartet wird. Vermeiden Sie die Verwendung von Cross Joins. Wenn Sie einen Cross Join verwenden müssen, versuchen Sie, die Ergebnisse mit einer GROUP BY-Klausel vorab zusammenzufassen, oder verwenden Sie eine Fensterfunktion. Weitere Informationen finden Sie unter Daten vor Verwendung eines JOIN reduzieren.

Partitionsverzerrung

Wenn Sie für dieses Feature Feedback geben oder Support anfordern möchten, senden Sie eine E-Mail an bq-query-inspector-feedback@google.com.

Die verzerrte Datenverteilung kann dazu führen, dass Abfragen langsam ausgeführt werden. Wenn eine Abfrage ausgeführt wird, teilt BigQuery die Daten in kleine Partitionen auf. Sie können Partitionen nicht zwischen Slots teilen. Wenn die Daten ungleichmäßig verteilt sind, werden einige Partitionen sehr groß, sodass der Slot, der die zu große Partition verarbeitet, abstürzt.

Die Verzerrung tritt in JOIN-Phasen auf. Wenn Sie einen JOIN-Vorgang ausführen, teilt BigQuery die Daten auf der rechten und linken Seite des JOIN-Vorgangs in Partitionen auf. Wenn eine Partition zu groß ist, werden die Daten durch erneute Partitionsphasen neu ausgeglichen. Wenn die Abweichung zu schlecht ist und BigQuery das Gleichgewicht weiter herstellen kann, wird der JOIN-Phase die Statistik zur Partitionsabweichung hinzugefügt. Dieser Vorgang wird als Neupartitionierung bezeichnet. Wenn BigQuery große Partitionen erkennt, die nicht weiter aufgeteilt werden können, wird der Phase JOIN eine Partitionsverzerrung hinzugefügt.

Was Sie tun sollten, wenn Sie ein Analyst sind

Filtern Sie Ihre Daten so früh wie möglich, um eine Partitionsverzerrung zu vermeiden. Weitere Informationen dazu, wie Sie Partitionsverzerrungen vermeiden, finden Sie unter Daten nach verzerrten Daten filtern.

Informationen zur Abfragephase auswerten

Zusätzlich zu den Statistiken zur Abfrageleistung können Sie beim Prüfen der Abfragephasendetails auch die folgenden Richtlinien verwenden, um festzustellen, ob es ein Problem mit einer Abfrage gibt:

  • Wenn der Wert von Wartezeit in ms für eine oder mehrere Phasen im Vergleich zu vorherigen Ausführungen der Abfrage hoch ist:
    • Prüfen Sie, ob genügend Slots für Ihre Arbeitslast verfügbar sind. Andernfalls wenden Sie das Load-Balancing an, wenn Sie ressourcenintensive Abfragen ausführen, damit diese nicht miteinander konkurrieren.
    • Wenn der Wert für Wartezeit in ms höher ist als für nur eine Phase, sehen Sie sich die Phase davor an, um zu sehen, ob ein Engpass eingeführt wurde. Umstände wie erhebliche Änderungen an den Daten oder dem Schema der an der Abfrage beteiligten Tabellen können sich auf die Abfrageleistung auswirken.
  • Wenn der Wert der Shuffle-Ausgabe-Byte für eine Phase im Vergleich zu den vorherigen Ausführungen der Abfrage oder im Vergleich zu einer vorherigen Phase hoch ist, bewerten Sie die in dieser Phase verarbeiteten Schritte, um festzustellen, ob unerwartet große Datenmengen erstellt werden. Eine häufige Ursache hierfür ist, dass ein Schritt einen INNER JOIN verarbeitet, bei dem auf beiden Seiten des Joins doppelte Schlüssel vorhanden sind. Das kann zu einem unerwartet großen Datenvolumen führen.
  • Verwenden Sie die Ausführungsgrafik, um die obersten Phasen nach Dauer und Verarbeitung anzusehen. Berücksichtigen Sie die Menge der erzeugten Daten und ob sie der Größe der in der Abfrage angegebenen Tabellen entsprechen. Ist dies nicht der Fall, prüfen Sie die Schritte in diesen Phasen, um festzustellen, ob einer davon möglicherweise eine unerwartete Menge an Zwischendaten verursacht.

Nächste Schritte