Abfragewarteschlangen verwenden

BigQuery bestimmt automatisch die Anzahl der Abfragen, die gleichzeitig ausgeführt werden können. Diese wird als dynamische Nebenläufigkeit bezeichnet. Zusätzliche Abfragen werden in die Warteschlange gestellt, bis Verarbeitungsressourcen verfügbar sind. In diesem Dokument wird erläutert, wie Sie das maximale Nebenläufigkeitsziel steuern und das Zeitlimit für die Warteschlange für interaktive Abfragen und Batchabfragen festlegen.

Übersicht

BigQuery bestimmt anhand der verfügbaren Rechenressourcen dynamisch die Anzahl der Abfragen, die gleichzeitig ausgeführt werden können. Die Anzahl der Abfragen, die gleichzeitig ausgeführt werden können, wird pro On-Demand-Projekt oder pro Reservierung berechnet. Zusätzliche Abfragen werden in einer Warteschlange platziert, bis genügend Kapazität zum Starten der Ausführung verfügbar ist. Die Länge der Warteschlange ist auf 1.000 interaktive Abfragen und 20.000 Batchabfragen pro Projekt und Region begrenzt, unabhängig davon, ob es sich um ein On-Demand-Projekt oder eine Reservierung handelt. Das folgende Beispiel zeigt das Verhalten eines On-Demand-Projekts, wenn die berechnete Nebenläufigkeit für Abfragen 202 ist:

202 gleichzeitige Abfragen, gefolgt von Abfragen in der Warteschlange, gefolgt von Abfragen, die einen Fehler zurückgeben.

Für Reservierungen haben Sie die Möglichkeit, das maximale Ziel für die Gleichzeitigkeit festzulegen. Dies ist eine Obergrenze für die Anzahl der Abfragen, die in einer Reservierung gleichzeitig ausgeführt werden können. Damit wird sichergestellt, dass jeder Abfrage eine Mindestanzahl von Slots zugewiesen wird. Sie können für ein On-Demand-Projekt kein maximales Nebenläufigkeitsziel angeben. Es wird immer dynamisch berechnet.

Verhalten in der Warteschlange

BigQuery erzwingt faire Planung, damit kein einzelnes Projekt alle Slots in einer Reservierung nutzen kann.

Abfragen von Projekten mit dem geringsten Teil der Nebenläufigkeit werden zuerst aus der Warteschlange entfernt. Während der Ausführung werden Slots gleichmäßig auf Projekte verteilt, bevor sie auf Jobs innerhalb eines Projekts verteilt werden.

Angenommen, Sie haben eine Reservierung, die zwei Projekten zugewiesen ist: A und B. BigQuery berechnet 5 für die Nebenläufigkeit der Reservierung. In Projekt A werden vier gleichzeitig ausgeführte Abfragen, in Projekt B wird eine Abfrage ausgeführt und andere Abfragen werden in die Warteschlange gestellt. Eine Abfrage aus Projekt B wird zuerst aus der Warteschlange entfernt, auch wenn sie nach der Abfrage von Projekt A gesendet wurde. Sobald eine Abfrage mit der Ausführung beginnt, erhält sie eine gleichmäßige Anzahl an Slots in der freigegebenen Reservierung.

Zusätzlich zur Gesamtzahl der gleichzeitigen Abfragen bestimmt BigQuery dynamisch die maximale Anzahl gleichzeitiger Batchabfragen, die pro On-Demand-Projekt oder Reservierung ausgeführt werden sollen. Wenn die Anzahl der gleichzeitig ausgeführten Batchabfragen dieses Maximum erreicht, werden interaktive Abfragen priorisiert, auch wenn sie später gesendet wurden.

Wenn Sie eine Reservierung löschen, tritt bei allen Abfragen in der Warteschlange eine Zeitüberschreitung auf. Wenn ein einer Reservierung zugewiesenes Projekt einer anderen Reservierung zugewiesen wird, werden alle aktuell ausgeführten oder in der Warteschlange enthaltenen Anfragen weiter in der alten Reservierung verarbeitet, während alle neuen Anfragen an die neue Reservierung gelangen. Wenn ein einer Reservierung zugewiesenes Projekt aus der Reservierung entfernt wird, werden laufende Abfragen in der Reservierung fortgesetzt, während neue und in der Warteschlange stehende Abfragen nach dem On-Demand-Modell ausgeführt werden. Sie können optional individuelles Ausführen oder Abfragejobs in der Warteschlange abbrechen.

Zeitlimit für Warteschlange steuern

Verwenden Sie die ALTER PROJECT SET OPTIONS-Anweisung, um das Warteschlangenzeitlimit für interaktive Abfragen oder Batchabfragen zu steuern, oder die ALTER ORGANIZATION SET OPTIONS-Anweisung, um die Felder default_interactive_query_queue_timeout_ms oder default_batch_query_queue_timeout_ms in der Standardkonfiguration Ihres Projekts oder Ihrer Organisation festzulegen.

Fragen Sie die Ansicht INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS ab, um das Zeitlimit für die Warteschlange für interaktive oder Batchabfragen in Ihrem Projekt aufzurufen.

Um die Wiedergabeliste zu deaktivieren, setzen Sie das Zeitlimit für die Warteschlange auf -1. Wenn Sie die maximale Nebenläufigkeit von Abfragen erreichen, schlagen zusätzliche Abfragen mit dem Fehler ADMISSION_DENIED fehl.

Maximales Gleichzeitigkeitsziel festlegen

Sie können das maximale Nebenläufigkeitsziel beim Erstellen einer Reservierung manuell festlegen. Standardmäßig ist das maximale Nebenläufigkeitsziel null, was bedeutet, dass BigQuery die Nebenläufigkeit anhand der verfügbaren Ressourcen dynamisch bestimmt. Wenn Sie ein Ziel ungleich null festlegen, gibt das maximale Nebenläufigkeitsziel eine Obergrenze für die Anzahl der Abfragen an, die gleichzeitig in einer Reservierung ausgeführt werden. Dies garantiert eine minimale Slotkapazität für jede Abfrage, die ausgeführt wird.

Die Erhöhung des maximalen Nebenläufigkeitsziels garantiert nicht, dass mehr Abfragen gleichzeitig ausgeführt werden. Die tatsächliche Nebenläufigkeit hängt von den verfügbaren Rechenressourcen ab. Sie können die Reservierung erhöhen, indem Sie Ihrer Reservierung weitere Slots hinzufügen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Ressourcenbearbeiter (roles/bigquery.resourceEditor) für das Administrationsprojekt zu gewähren, das die Eigentumsrechte für die Zusicherungen verwaltet, um die Berechtigung zu erhalten, die Sie zum Festlegen der Nebenläufigkeit in einer neuen Reservierung benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierte Rolle enthält die Berechtigung bigquery.reservations.create, die zum Festlegen der Nebenläufigkeit in einer neuen Reservierung erforderlich ist.

Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Weitere Informationen zu IAM-Rollen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Maximales Nebenläufigkeitsziel für eine Reservierung festlegen

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    BigQuery aufrufen

  2. Gehen Sie im Navigationsbereich zum Abschnitt Kapazitätsverwaltung.

  3. Klicken Sie auf Reservierung erstellen.

  4. Wählen Sie Ihre Reservierungseinstellungen aus.

  5. Klicken Sie zum Erweitern des Abschnitts Erweiterte Einstellungen auf den Erweiterungspfeil.

  6. Um die Zielnebenläufigkeit von Jobs festzulegen, klicken und aktivieren Sie die Schaltfläche Automatische Zielnebenläufigkeit von Jobs überschreiben und geben Sie die Zielnebenläufigkeit von Jobs ein.

  7. Klicken Sie auf Speichern.

SQL

Verwenden Sie die DDL-Anweisung CREATE RESERVATION und legen Sie das Feld target_job_concurrency fest, um das maximale Gleichzeitigkeitsziel für eine neue Reservierung festzulegen.

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME`
      OPTIONS (
        target_job_concurrency = CONCURRENCY);
    

    Ersetzen Sie Folgendes:

    • ADMIN_PROJECT_ID: Das Projekt, zu dem die Reservierung gehört
    • LOCATION: der Standort der Reservierung, z. B. region-us
    • RESERVATION_NAME: der Name der Reservierung
    • CONCURRENCY: das maximale Nebenläufigkeitsziel

  3. Klicken Sie auf Ausführen.

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

bq

Führen Sie den Befehl bq mk aus, um das maximale Nebenläufigkeitsziel für eine neue Reservierung festzulegen:

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --target_job_concurrency=CONCURRENCY \
    --reservation \
    RESERVATION_NAME

Dabei gilt:

  • ADMIN_PROJECT_ID: Das Projekt, zu dem die Reservierung gehört
  • LOCATION: der Standort der Reservierung
  • CONCURRENCY: das maximale Nebenläufigkeitsziel
  • RESERVATION_NAME: der Name der Reservierung

API

Um das maximale Nebenläufigkeitsziel in der BigQuery Reservation API festzulegen, legen Sie das Feld concurrency in der Reservierungsressource fest und rufen Sie die Methode CreateReservationRequest auf.

Maximales Gleichzeitigkeitsziel aktualisieren

Sie können das maximale Nebenläufigkeitsziel für eine Reservierung jederzeit aktualisieren. Das Erhöhen des Ziels garantiert jedoch nicht, dass mehr Abfragen gleichzeitig ausgeführt werden. Die tatsächliche Gleichzeitigkeit hängt von den verfügbaren Rechenressourcen ab. Wenn Sie das maximale Nebenläufigkeitsziel reduzieren, sind aktuelle Abfragen nicht betroffen und Abfragen in der Warteschlange werden erst ausgeführt, wenn die Anzahl der gleichzeitigen Abfragen unter das neue Ziel fällt.

Wenn Sie das maximale Nebenläufigkeitsziel auf 0 festlegen, bestimmt BigQuery die Nebenläufigkeit anhand der verfügbaren Ressourcen (Standardverhalten).

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Ressourcenbearbeiter (roles/bigquery.resourceEditor) für das Administrationsprojekt zu gewähren, das die Eigentumsrechte für die Zusicherungen verwaltet, um die Berechtigung zu erhalten, die Sie zum Aktualisieren des maximalen Nebenläufigkeitsziels für eine Reservierung benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierte Rolle enthält die Berechtigung bigquery.reservations.update, die zum Aktualisieren des maximalen Nebenläufigkeitsziels für eine Reservierung erforderlich ist.

Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Weitere Informationen zu IAM-Rollen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Maximales Nebenläufigkeitsziel für eine Reservierung aktualisieren

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    BigQuery aufrufen

  2. Gehen Sie im Navigationsbereich zum Abschnitt Kapazitätsverwaltung.

  3. Klicken Sie auf den Tab Slot-Reservierungen.

  4. Suchen Sie die Reservierung, die Sie aktualisieren möchten.

  5. Maximieren Sie die Option Aktionen.

  6. Klicken Sie auf Bearbeiten.

  7. Klicken Sie zum Erweitern des Abschnitts Erweiterte Einstellungen auf den Erweiterungspfeil.

  8. Um die Zielnebenläufigkeit von Jobs festzulegen, klicken und aktivieren Sie die Schaltfläche Automatische Zielnebenläufigkeit von Jobs überschreiben und geben Sie die Zielnebenläufigkeit von Jobs ein.

  9. Klicken Sie auf Speichern.

SQL

Verwenden Sie die DDL-Anweisung ALTER RESERVATION und legen Sie das Feld target_job_concurrency fest, um das maximale Gleichzeitigkeitsziel für eine vorhandene Reservierung zu aktualisieren.

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

    BigQuery aufrufen

  2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

    ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      target_job_concurrency = CONCURRENCY);
    

    Ersetzen Sie Folgendes:

    • ADMIN_PROJECT_ID: Das Projekt, zu dem die Reservierung gehört
    • LOCATION: der Standort der Reservierung, z. B. region-us
    • RESERVATION_NAME: der Name der Reservierung
    • CONCURRENCY: das maximale Nebenläufigkeitsziel

  3. Klicken Sie auf Ausführen.

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

bq

Führen Sie den Befehl bq update aus, um das maximale Nebenläufigkeitsziel für eine vorhandene Reservierung zu aktualisieren:

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --target_job_concurrency=CONCURRENCY \
    --reservation \
    RESERVATION_NAME

Dabei gilt:

  • ADMIN_PROJECT_ID: Das Projekt, zu dem die Reservierung gehört
  • LOCATION: der Standort der Reservierung
  • CONCURRENCY: das maximale Nebenläufigkeitsziel
  • RESERVATION_NAME: der Name der Reservierung

API

Um das maximale Nebenläufigkeitsziel in der BigQuery Reservation API zu aktualisieren, legen Sie das Feld concurrency in der Reservierungsressource fest und rufen Sie die Methode UpdateReservationRequest auf.

Monitoring

In den Ansichten INFORMATION_SCHEMA.JOBS_BY_* und INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* können Sie herausfinden, welche Abfragen ausgeführt werden und in der Warteschlange stehen. Das Feld state ist für aktiv ausgeführte Abfragen auf RUNNING und für Abfragen in der Warteschlange auf PENDING gesetzt.

Führen Sie die folgende Abfrage aus, um zu sehen, wie viele gleichzeitige Abfragen ausgeführt wurden, als der Schwellenwert für dynamische Gleichzeitigkeit für jede Sekunde im den letzten Tag erreicht wurde:

SELECT
  t1.period_start,
  t1.job_count AS dynamic_concurrency_threshold
FROM (
  SELECT
    period_start,
    state,
    COUNT(DISTINCT job_id) AS job_count
  FROM
    `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE
  WHERE
    period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
    AND CURRENT_TIMESTAMP()
    AND reservation_id = "RESERVATION_ID"
  GROUP BY
    period_start,
    state) AS t1
JOIN (
  SELECT
    period_start,
    state,
    COUNT(DISTINCT job_id) AS job_count
  FROM
    `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE
  WHERE
    state = "PENDING"
    AND period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
    AND CURRENT_TIMESTAMP()
    AND reservation_id = "RESERVATION_ID"
  GROUP BY
    period_start,
    state
  HAVING
    COUNT(DISTINCT job_id) > 0 ) AS t2
ON
  t1.period_start = t2.period_start
WHERE
  t1.state = "RUNNING";

Ersetzen Sie Folgendes:

  • PROJECT_ID: der Name des Projekts, in dem Sie die Abfragen ausgeführt haben
  • REGION_ID: der Ort, an dem die Abfragen verarbeitet wurden
  • RESERVATION_ID: der Name der Reservierung, in der die Abfragen ausgeführt werden

Sie können die Länge der Abfragewarteschlange für Ihre Reservierung überwachen, indem Sie BigQuery-Administratoren-Ressourcendiagramme verwenden und das Diagramm Job-Gleichzeitigkeit mit dem Messwert Ausstehend auswählen.

Warteschlangenlänge in administrativen Ressourcendiagrammen

Sie können die Warteschlangenlänge in Cloud Monitoring auch überwachen, indem Sie den Messwert Jobanzahl aufrufen und nach der Anzahl der Jobs im Status "Ausstehend" filtern.

Warteschlangenlänge in Cloud Monitoring

Beschränkungen

  • Jedes On-Demand-Projekt kann bis zu 1.000 interaktive Abfragen und 20.000 Batchabfragen gleichzeitig in die Warteschlange stellen. Bei Abfragen, die dieses Limit überschreiten, wird ein Kontingentfehler zurückgegeben. Sie können keine Erhöhung dieser Limits beantragen.
  • Innerhalb einer Reservierung kann jedes dieser Reservierung zugewiesene Projekt bis zu 1.000 interaktive Abfragen und 20.000 Batchabfragen gleichzeitig in die Warteschlange stellen. Bei Abfragen, die dieses Limit überschreiten, wird ein Kontingentfehler zurückgegeben. Sie können keine Erhöhung dieser Limits beantragen.
  • Bei Abfragejobs, die noch nicht ausgeführt werden, tritt standardmäßig eine Zeitüberschreitung nach 6 Stunden für interaktive Abfragen und nach 24 Stunden für Batchabfragen auf.
  • Sie können das maximale Nebenläufigkeitsziel nicht für Abfragen festlegen, die in einem On-Demand-Projekt ausgeführt werden.
  • Sie können das maximale Nebenläufigkeitsziel nicht für Abfragen festlegen, die mit einer Reservierung der Standardversion ausgeführt werden. Weitere Informationen zu Editionen finden Sie unter Einführung in BigQuery-Editionen.

Nächste Schritte