Verlaufsbasierte Optimierungen verwenden

Wenn Sie Unterstützung während der Vorschau benötigen, senden Sie eine E-Mail an bigquery-history-based-optimization-support@google.com.

In diesem Leitfaden wird beschrieben, wie Sie verlaufsbasierte Optimierungen für Abfragen aktivieren, deaktivieren und analysieren.

Verlaufsbasierte Optimierungen

Verlaufsbasierte Optimierungen verwenden Informationen aus bereits abgeschlossenen Ausführungen ähnlicher Abfragen, um zusätzliche Optimierungen anzuwenden und die Abfrageleistung, z. B. verbrauchte Slot-Zeit und Abfragelatenz, weiter zu verbessern. Wenn Sie beispielsweise die verlaufsbasierte Optimierung anwenden, kann die erste Abfrageausführung 60 Sekunden dauern. Die zweite Abfrageausführung dauert jedoch nur 30 Sekunden, wenn eine verlaufsbasierte Optimierung identifiziert wurde. Dieser Vorgang wird fortgesetzt, bis keine weiteren Optimierungen mehr hinzugefügt werden können.

Im Folgenden finden Sie ein Beispiel für die Funktionsweise verlaufsbasierter Optimierungen mit BigQuery:

Ausführungsanzahl Genutzte Slot-Zeit für Abfrage Notes
1 60 Ursprüngliche Ausführung.
2 30 Erste verlaufsbasierte Optimierung angewendet.
3 20 Zweite auf dem Verlauf basierende Optimierung angewendet.
4 21 Es können keine weiteren auf dem Verlauf basierenden Optimierungen angewendet werden.
5 19 Es können keine weiteren auf dem Verlauf basierenden Optimierungen angewendet werden.
6 20 Es können keine weiteren auf dem Verlauf basierenden Optimierungen angewendet werden.

Verlaufsbasierte Optimierungen werden nur angewendet, wenn es wahrscheinlich ist, dass sich die Abfrageleistung vorteilhaft auf die Abfrageleistung auswirkt. Wenn eine Optimierung die Abfrageleistung nicht erheblich verbessert, wird diese Optimierung widerrufen und in zukünftigen Ausführungen dieser Abfrage nicht verwendet.

Verlaufsbasierte Optimierungen aktivieren

Wenn Sie verlaufsbasierte Optimierungen in einem Projekt verwenden möchten, fügen Sie folgenden Parameter in die ALTER PROJECT-Anweisung ein: default_query_optimizer_options = 'adaptive=on'

Beispiel:

ALTER PROJECT `user_project`
SET OPTIONS (
  `region-us.default_query_optimizer_options` = 'adaptive=on'
);

Verlaufsbasierte Optimierungen deaktivieren

Wenn Sie verlaufsbasierte Optimierungen in einem Projekt deaktivieren möchten, fügen Sie den Parameter default_query_optimizer_options = 'adaptive=off' in die ALTER PROJECT-Anweisung ein.

Beispiel:

ALTER PROJECT `user_project`
SET OPTIONS (
  `region-us.default_query_optimizer_options` = 'adaptive=off'
);

Verlaufsbasierte Optimierungen für einen Job prüfen

Sie können eine SQL-Abfrage oder einen REST API-Methodenaufruf verwenden, um die verlaufsbasierten Optimierungen für einen Job zu prüfen.

SQL

Sie können eine Abfrage verwenden, um die verlaufsbasierten Optimierungen für einen Job abzurufen. Die Abfrage muss INFORMATION_SCHEMA.JOBS_BY_PROJECT und den Spaltennamen query_info.optimization_details enthalten.

Im folgenden Beispiel werden die Optimierungsdetails für einen Job namens sample_job zurückgegeben. Wenn keine verlaufsbasierten Optimierungen angewendet wurden, wird NULL für optimization_details erstellt:

SELECT
  job_id,
  query_info.optimization_details
FROM `project_name.region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE job_id = 'sample_job'
LIMIT 1;

Die Ergebnisse sehen in etwa so aus:

-- The JSON in optimization_details has been formatted for readability.
/*------------+-----------------------------------------------------------------*
 | job_id     | optimization_details                                            |
 +------------+-----------------------------------------------------------------+
 | sample_job | {                                                               |
 |            |   "optimizations": [                                            |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "web_sales.web_date,RIGHT"         |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "catalog_sales.catalog_date,RIGHT" |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "store_sales.store_date,RIGHT"     |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "join_commutation": "web_returns.web_item"                |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "parallelism_adjustment": "applied"                       |
 |            |     },                                                          |
 |            |   ]                                                             |
 |            | }                                                               |
 *------------+-----------------------------------------------------------------*/

API

Rufen Sie die Methode jobs.get auf, um die Optimierungsdetails für einen Job abzurufen.

Im folgenden Beispiel gibt die Methode jobs.get die Optimierungsdetails (optimizationDetails) in der vollständigen Antwort zurück:

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "sample_job"
  }
}

Die Ergebnisse sehen in etwa so aus:

-- The unrelated parts in the full response have been removed.
{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "sample_job",
    "location": "US"
  },
  "statistics": {
    "query": {
      "queryInfo": {
        "optimizationDetails": {
          "optimizations": [
            {
              "semi_join_reduction": "web_sales.web_date,RIGHT"
            },
            {
              "semi_join_reduction": "catalog_sales.catalog_date,RIGHT"
            },
            {
              "semi_join_reduction": "store_sales.store_date,RIGHT"
            },
            {
              "join_commutation": "web_returns.web_item"
            },
            {
              "parallelism_adjustment": "applied"
            }
          ]
        }
      }
    }
  }
}

Rollen und Berechtigungen

  • Wenn Sie verlaufsbasierte Optimierungen aktivieren möchten, benötigen Sie die erforderlichen Berechtigungen zum Erstellen von BigQuery-Standardkonfigurationen. Anschließend müssen Sie die ALTER PROJECT-Anweisung verwenden, um verlaufsbasierte Optimierungen zu aktivieren. Nachdem Sie die verlaufsbasierten Optimierungen aktiviert haben, verwenden alle Jobs in diesem Projekt verlaufsbasierte Optimierungen, unabhängig davon, welcher Nutzer den Job erstellt hat. Weitere Informationen zu den erforderlichen Berechtigungen für Standardkonfigurationen finden Sie unter Erforderliche Berechtigungen für Standardkonfigurationen. Informationen zum Aktivieren verlaufsbasierter Optimierungen finden Sie unter Verlaufsbasierte Optimierungen aktivieren.

  • Sie benötigen die erforderliche Rolle, um die verlaufsbasierten Optimierungen für einen Job mit der Ansicht INFORMATION_SCHEMA.JOBS zu prüfen. Weitere Informationen finden Sie unter Erforderliche Rolle für die Ansicht INFORMATION_SCHEMA.JOBS.