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:
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
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Gehen Sie im Navigationsbereich zum Abschnitt Kapazitätsverwaltung.
Klicken Sie auf Reservierung erstellen.
Wählen Sie Ihre Reservierungseinstellungen aus.
Klicken Sie zum Erweitern des Abschnitts Erweiterte Einstellungen auf den
Erweiterungspfeil.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.
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.
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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
-
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örtLOCATION
: der Standort der ReservierungCONCURRENCY
: das maximale NebenläufigkeitszielRESERVATION_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
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Gehen Sie im Navigationsbereich zum Abschnitt Kapazitätsverwaltung.
Klicken Sie auf den Tab Slot-Reservierungen.
Suchen Sie die Reservierung, die Sie aktualisieren möchten.
Maximieren Sie die Option
Aktionen.Klicken Sie auf Bearbeiten.
Klicken Sie zum Erweitern des Abschnitts Erweiterte Einstellungen auf den
Erweiterungspfeil.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.
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.
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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
-
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örtLOCATION
: der Standort der ReservierungCONCURRENCY
: das maximale NebenläufigkeitszielRESERVATION_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 habenREGION_ID
: der Ort, an dem die Abfragen verarbeitet wurdenRESERVATION_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](https://cloud.google.com/static/bigquery/images/admin-resource-chart-queue-length.png?hl=de)
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](https://cloud.google.com/static/bigquery/images/metrics-explorer-queue-length.png?hl=de)
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
- Weitere Informationen zum Diagnostizieren und Beheben von Limitfehlern bei der Abfragewarteschlange.