Verwenden des Query Acceleration Service

Der Abfragebeschleunigungsdienst (QAS, Query Acceleration Service) kann Teile des Abfrage-Workloads eines Warehouses beschleunigen. Wenn der Dienst für ein Warehouse aktiviert ist, kann er die Gesamtleistung des Warehouses verbessern, indem er die Auswirkungen von Ausreißerabfragen reduziert, d. h. von Abfragen, die mehr Ressourcen verbrauchen als typische Abfragen. Der Abfragebeschleunigungsdienst tut dies, indem er Teile der Abfrageverarbeitung auf gemeinsam genutzte Computeressourcen auslagert, die vom Dienst bereitgestellt werden.

Beispiele für die Arten von Workloads, die von dem Abfragebeschleunigungsdienst profitieren können:

  • Ad-hoc-Analysen.

  • Workloads mit unvorhersehbarem Datenvolumen pro Abfrage.

  • Abfragen mit großen Scans und selektiven Filtern.

Der Abfragebeschleunigungsdienst kann diese Arten von Workloads effizienter bewältigen, indem er mehr Arbeit parallel ausführt und die für das Scannen und Filtern aufgewendete Zeit reduziert.

Bemerkung

Der Abfragebeschleunigungsdienst hängt von der Verfügbarkeit des Servers ab. Daher können die Leistungsverbesserungen im Laufe der Zeit schwanken.

Unter diesem Thema:

Identifizieren von Abfragen und Warehouses, die von der Abfragebeschleunigung profitieren könnten

Um Abfragen oder Warehouses zu ermitteln, die vom Abfragebeschleunigungsdienst profitieren könnten, können Sie die Ansicht QUERY_ACCELERATION_ELIGIBLE abfragen. Sie können auch die Funktion SYSTEM$ESTIMATE_QUERY_ACCELERATION verwenden, um festzustellen, ob eine bestimmte Abfrage für eine Beschleunigung in Frage kommt.

Geeignete Abfragen

Im Allgemeinen sind Abfragen geeignet, da sie einen Teil des Abfrageplans enthalten, der unter Verwendung von QAS-Computeressourcen parallel ausgeführt werden kann. Diese Abfragen weisen eines von zwei Mustern auf:

  • Große Scans mit einem Aggregations- oder Selektivfilter

  • Große Scans, die viele neue Zeilen einfügen

Snowflake hat keine bestimmte Grenze, ab der ein Scan „groß genug“ ist, um in Frage zu kommen. Der Schwellenwert für die Eignung hängt von einer Reihe von Faktoren ab, darunter der Abfrageplan und die Größe des Warehouses. Snowflake markiert eine Abfrage nur dann als geeignet, wenn mit hoher Wahrscheinlichkeit davon ausgegangen werden kann, dass die Abfrage bei aktiviertem QAS beschleunigt würde.

Häufige Gründe, warum Abfragen nicht geeignet sind

Einige Abfragen sind für die Abfragebeschleunigung nicht geeignet. Folgende Gründe sind typisch dafür, warum eine Abfrage nicht beschleunigt werden kann:

  • Es sind nicht genügend Partitionen im Scan vorhanden. Wenn nicht genügend Partitionen gescannt werden können, werden die Vorteile der Abfragebeschleunigung durch die Latenz beim Erhalten der Ressourcen für den Abfragebeschleunigungsdienst aufgehoben.

  • Selbst wenn eine Abfrage über einen Filter verfügt, sind die Filter möglicherweise nicht selektiv genug. Wenn die Abfrage eine Aggregation mit GROUP BY enthält, ist die Kardinalität des GROUP BY-Ausdrucks möglicherweise zu hoch, um in Frage zu kommen.

  • Die Abfrage enthält eine LIMIT-Klausel, aber keine ORDER BY-Klausel.

  • Die Abfrage enthält Funktionen, die nicht deterministische Ergebnisse liefern (z. B. SEQ oder RANDOM).

Identifizieren von Abfragen mit der Funktion SYSTEM$ESTIMATE_QUERY_ACCELERATION

Mit der Funktion SYSTEM$ESTIMATE_QUERY_ACCELERATION kann festgestellt werden, ob eine zuvor ausgeführte Abfrage vom Abfragebeschleunigungsdienst profitieren könnte. Wenn die Abfrage für die Abfragebeschleunigung in Frage kommt, gibt die Funktion die geschätzte Abfrageausführungszeit für verschiedene Skalierungsfaktoren der Abfragebeschleunigung zurück.

Beispiel

Führen Sie die folgende Anweisung aus, um festzustellen, ob die Abfragebeschleunigung für eine bestimmte Abfrage von Vorteil sein könnte:

SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f'));
Copy

In diesem Beispiel kommt die Abfrage für den Abfragebeschleunigungsdienst in Frage und enthält die geschätzten Abfragezeiten bei Nutzung des Dienstes:

{
  "estimatedQueryTimes": {
    "1": 171,
    "10": 115,
    "2": 152,
    "4": 133,
    "8": 120
  },
  "originalQueryTime": 300.291,
  "queryUUID": "8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f",
  "status": "eligible",
  "upperLimitScaleFactor": 10
}
Copy

Das folgende Beispiel zeigt die Ergebnisse für eine Abfrage, die nicht für den Abfragebeschleunigungsdienst geeignet ist:

SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('cf23522b-3b91-cf14-9fe0-988a292a4bfa'));
Copy

Die obige Anweisung ergibt die folgende Ausgabe:

{
  "estimatedQueryTimes": {},
  "originalQueryTime": 20.291,
  "queryUUID": "cf23522b-3b91-cf14-9fe0-988a292a4bfa",
  "status": "ineligible",
  "upperLimitScaleFactor": 0
}
Copy

Identifizieren von Abfragen und Warehouses mit der Ansicht QUERY_ACCELERATION_ELIGIBLE

Fragen Sie Ansicht QUERY_ACCELERATION_ELIGIBLE ab, um die Abfragen und Warehouses zu ermitteln, die am meisten von dem Abfragebeschleunigungsdienst profitieren könnten. Für jede Abfrage enthält die Ansicht den Anteil der Abfrageausführungszeit, der für den Abfragebeschleunigungsdienst in Frage kommt.

Beispiele

Bemerkung

Bei diesem Beispiel wird davon ausgegangen, dass die ACCOUNTADMIN-Rolle (oder eine Rolle mit IMPORTED PRIVILEGES-Berechtigung für die freigegebene SNOWFLAKE-Datenbank) in Verwendung ist. Wenn diese nicht verwendet wird, führen Sie folgende Befehle aus, bevor Sie die Abfragen in den Beispielen ausführen:

USE ROLE ACCOUNTADMIN;
Copy

Identifizieren Sie die Abfragen der letzten Woche, die möglicherweise am meisten von dem Dienst profitieren könnten, indem Sie den längsten Anteil der Abfrageausführungszeit ermitteln, der für eine Beschleunigung in Frage kommt:

SELECT query_id, eligible_query_acceleration_time
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
  ORDER BY eligible_query_acceleration_time DESC;
Copy

Identifizieren Sie die Abfragen der letzten Woche, die am meisten von dem Dienst in einem spezifischen Warehouse mywh profitieren könnten:

SELECT query_id, eligible_query_acceleration_time
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = 'MYWH'
  AND start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
  ORDER BY eligible_query_acceleration_time DESC;
Copy

Identifizieren Sie die Warehouses mit den meisten Abfragen, die in der letzten für den Abfragebeschleunigungsdienst geeignet waren:

SELECT warehouse_name, COUNT(query_id) AS num_eligible_queries
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
  GROUP BY warehouse_name
  ORDER BY num_eligible_queries DESC;
Copy

Identifizieren Sie die Warehouses, die in der letzten Woche mit dem Abfragebeschleunigungsdienst die meiste Zeit einsparen konnten:

SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
  GROUP BY warehouse_name
  ORDER BY total_eligible_time DESC;
Copy

Identifizieren Sie die Obergrenze des Skalierungsfaktors in der letzten Woche für den Abfragebeschleunigungsdienst für das Warehouse mywh:

SELECT MAX(upper_limit_scale_factor)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = 'MYWH'
  AND start_time > DATEADD('day', -7, CURRENT_TIMESTAMP());
Copy

Identifizieren Sie die Verteilung der Skalierungsfaktoren in der letzten Woche für den Abfragebeschleunigungsdienst für das Warehouse mywh:

SELECT upper_limit_scale_factor, COUNT(upper_limit_scale_factor)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = 'MYWH'
  AND start_time > DATEADD('day', -7, CURRENT_TIMESTAMP())
  GROUP BY 1 ORDER BY 1;
Copy

Unterstützte SQL-Befehle

Der Abfragebeschleunigungsdienst unterstützt die folgenden SQL-Befehle:

  • SELECT

  • INSERT

  • CREATE TABLE AS SELECT (CTAS)

  • COPY INTO <Tabelle>

Eine Abfrage oder ein Teil einer Abfrage (d. h. eine Unterabfrage oder eine Klausel), die einen unterstützten SQL-Befehl enthält, kann möglicherweise mit dem Abfragebeschleunigungsdienst beschleunigt werden, wenn sie für die Beschleunigung in Frage kommt.

Aktivieren der Abfragebeschleunigung

Aktivieren Sie den Abfragebeschleunigungsdienst, indem Sie ENABLE_QUERY_ACCELERATION = TRUE bei der Erstellung eines Warehouses (mit CREATE WAREHOUSE) oder später (mit ALTER WAREHOUSE) angeben.

Beispiele

Im folgenden Beispiel wird der Abfragebeschleunigungsdienst für ein Warehouse mit dem Namen my_wh aktiviert:

CREATE WAREHOUSE my_wh WITH
  ENABLE_QUERY_ACCELERATION = true;
Copy

Führen Sie den Befehl SHOW WAREHOUSES aus, um Details zum Warehouse my_wh anzuzeigen.

SHOW WAREHOUSES LIKE 'my_wh';

+---------+---------+----------+---------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+--------------+---------+---------------------------+-------------------------------------+------------------+---------+----------+--------+-----------+------------+
| name    | state   | type     | size    | running | queued | is_default | is_current | auto_suspend | auto_resume | available | provisioning | quiescing | other | created_on                    | resumed_on                    | updated_on                    | owner        | comment | enable_query_acceleration | query_acceleration_max_scale_factor | resource_monitor | actives | pendings | failed | suspended | uuid       |
|---------+---------+----------+---------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+--------------+---------+---------------------------+-------------------------------------+------------------+---------+----------+--------+-----------+------------|
| MY_WH   | SUSPENDED | STANDARD | Medium |       0 |      0 | N          | N          |          600 | true        |           |              |           |       | 2023-01-20 14:31:49.283 -0800 | 2023-01-20 14:31:49.388 -0800 | 2023-01-20 16:34:28.583 -0800 | ACCOUNTADMIN |         | true                      |                                   8 | null             |       0 |        0 |      0 |         4 | 1132659053 |
+---------+---------+----------+---------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+--------------+---------+---------------------------+-------------------------------------+------------------+---------+----------+--------+-----------+------------+
Copy

Der Abfragebeschleunigungsdienst kann die Credit-Verbrauchsrate eines Warehouses erhöhen. Der maximale Skalierungsfaktor kann dazu beitragen, die Verbrauchsrate zu begrenzen. Weitere Informationen zur Eigenschaft QUERY_ACCELERATION_MAX_SCALE_FACTOR finden Sie unter CREATE WAREHOUSE oder ALTER WAREHOUSE.

Die Ansicht QUERY_ACCELERATION_ELIGIBLE und die Funktion SYSTEM$ESTIMATE_QUERY_ACCELERATION sind möglicherweise bei der Bestimmung des geeigneten Skalierungsfaktors für ein Warehouse hilfreich. Weitere Details dazu finden Sie unter Identifizieren von Abfragen und Warehouses, die von der Abfragebeschleunigung profitieren könnten (unter diesem Thema).

Anpassen des Skalierungsfaktors

Der Skalierungsfaktor ist ein Mechanismus zur Kostenkontrolle, mit dem Sie eine Obergrenze für den Umfang der Computeressourcen festlegen können, die ein Warehouse für die Abfragebeschleunigung leasen kann. Der Skalierungsfaktor wird als Multiplikator auf Basis von Warehouse-Größe und Kosten verwendet.

Angenommen, Sie setzen den Skalierungsfaktor für ein mittelgroßes Warehouse (Medium) auf 5. Dies bedeutet Folgendes:

  • Das Warehouse kann Computeressourcen bis zur 5-fachen Größe eines Medium-Warehouses leasen.

  • Da ein Medium-Warehouse 4 Credits pro Stunde kostet, kann das Leasen dieser Ressourcen bis zu 20 Credits pro Stunde zusätzlich kosten (4 Credits pro Medium-Warehouse × 5).

Die Kosten sind immer gleich, unabhängig davon, wie viele Abfragen gleichzeitig den Abfragebeschleunigungsdienst nutzen. Der Abfragebeschleunigungsdienst wird nur dann sekundengenau abgerechnet, wenn der Dienst genutzt wird. Diese Credits werden getrennt von der Warehouse-Nutzung in Rechnung gestellt.

Nicht alle Abfragen erfordern die gesamte Menge an Ressourcen, die durch den Skalierungsfaktor zur Verfügung gestellt werden. Der Umfang der für den Dienst angeforderten Ressourcen hängt davon ab, wie viel von der Abfrage für eine Beschleunigung in Frage kommt und wie viele Daten zur Beantwortung der Abfrage verarbeitet werden müssen. Unabhängig vom Skalierungsfaktor oder der Menge der angeforderten Ressourcen wird die Menge der für die Abfragebeschleunigung verfügbaren Ressourcen von der Verfügbarkeit der Ressourcen des Dienstes und von der Anzahl gleichzeitiger Anforderungen begrenzt. Der Abfragebeschleunigungsdienst verbraucht nur so viele Ressourcen, wie benötigt werden und zum Zeitpunkt der Ausführung der Abfrage verfügbar sind.

Wenn der Skalierungsfaktor nicht explizit festgelegt wird, ist der Standardwert 8. Wenn der Skalierungsfaktor auf 0 gesetzt wird, entfällt das obere Limit und die Abfragen können so viele Ressourcen leasen, wie benötigt werden und zum Bedienen der Abfrage verfügbar sind.

Beispiel

Im folgenden Beispiel wird der Abfragebeschleunigungsdienst für ein Warehouse mit dem Namen my_wh mit einem maximalen Skalierungsfaktor von 0 aktiviert:

ALTER WAREHOUSE my_wh SET
  ENABLE_QUERY_ACCELERATION = true
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = 0;
Copy

Überwachen der Nutzung des Abfragebeschleunigungsdienstes

Verwenden der Weboberfläche zur Überwachung der Abfragebeschleunigungsnutzung

Sobald Sie den Abfragebeschleunigungsdienst aktiviert haben, können Sie den Bereich Profile Overview auf der Registerkarte Query Profile anzeigen, um die Auswirkungen der Abfragebeschleunigungsergebnisse zu sehen.

Der folgende Screenshot zeigt ein Beispiel für die angezeigten Statistiken für die Abfrage insgesamt. Wenn in einer Abfrage mehrere Operationen beschleunigt wurden, werden die Ergebnisse in dieser Ansicht zusammengefasst, sodass Sie den Gesamtumfang der vom Abfragebeschleunigungsdienst ausgeführten Verarbeitungsleistung anzeigen können.

../_images/query-acceleration-profile-overview.png

Der Abschnitt Query Acceleration des Bereichs Profile Overview enthält die folgenden Statistiken:

  • Partitionen, die vom Dienst gescannt wurden – Anzahl der Dateien, die zum Scannen an den Abfragebeschleunigungsdienst übergeben wurden.

  • Scans, die für die Beschleunigung ausgewählt wurden – Anzahl der Tabellen-Scans, die beschleunigt wurden.

Klicken Sie in den Operatordetails (weiter Informationen dazu siehe Statistiken) auf den Operator, um detaillierte Informationen zu erhalten. Der folgende Screenshot zeigt ein Beispiel für die angezeigten Statistiken für eine TableScan-Operation:

../_images/query-acceleration-table-scan.png

Der Abschnitt Query Acceleration des Detailbereichs TableScan enthält die folgenden Statistiken:

  • Partitionen, die vom Dienst gescannt wurden – Anzahl der Dateien, die zum Scannen an den Abfragebeschleunigungsdienst übergeben wurden.

Verwenden der Account Usage-Ansicht QUERY_HISTORY zur Überwachung der Abfragebeschleunigungsnutzung

Um die Auswirkungen der Abfragebeschleunigung auf eine Abfrage anzuzeigen, können Sie die folgenden Spalten der Ansicht QUERY_HISTORY verwenden.

  • QUERY_ACCELERATION_BYTES_SCANNED

  • QUERY_ACCELERATION_PARTITIONS_SCANNED

  • QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

Sie können diese Spalten verwenden, um die Abfragen zu identifizieren, die vom Abfragebeschleunigungsdienst profitiert haben. Für jede Abfrage können Sie auch die Gesamtzahl der vom Abfragebeschleunigungsdienst gescannten Partitionen und Bytes ermitteln.

Beschreibungen zu den einzelnen Spalten finden Sie unter Ansicht QUERY_HISTORY.

Bemerkung

Für eine bestimmte Abfrage kann die Summe der Spalten QUERY_ACCELERATION_BYTES_SCANNED und BYTES_SCANNED bei Verwendung des Abfragebeschleunigungsdienstes größer sein, als wenn der Dienst nicht verwendet wird. Dasselbe gilt für die Summe der Spalten QUERY_ACCELERATION_PARTITIONS_SCANNED und PARTITIONS_SCANNED.

Der Anstieg der Anzahl der Bytes und Partitionen ist auf die Zwischenergebnisse zurückzuführen, die vom Dienst zur Abfragebeschleunigung generiert werden.

So finden Sie beispielsweise die Abfragen mit den meisten vom Abfragebeschleunigungsdienst in den letzten 24 Stunden gescannten Bytes:

SELECT query_id,
       query_text,
       warehouse_name,
       start_time,
       end_time,
       query_acceleration_bytes_scanned,
       query_acceleration_partitions_scanned,
       query_acceleration_upper_limit_scale_factor
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE query_acceleration_partitions_scanned > 0 
  AND start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
  ORDER BY query_acceleration_bytes_scanned DESC;
Copy

Und so finden Sie die Abfragen mit der größten Anzahl von Partitionen, die vom Abfragebeschleunigungsdienst in den letzten 24 Stunden gescannt wurden:

SELECT query_id,
       query_text,
       warehouse_name,
       start_time,
       end_time,
       query_acceleration_bytes_scanned,
       query_acceleration_partitions_scanned,
       query_acceleration_upper_limit_scale_factor
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE query_acceleration_partitions_scanned > 0 
  AND start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
  ORDER BY query_acceleration_partitions_scanned DESC;
Copy

Kosten für den Abfragebeschleunigungsdienst

Bei der Abfragebeschleunigung (Query Acceleration Service) werden Credits verbraucht, da zum Ausführen von Teilen der in Frage kommenden Abfragen serverlose Computeressourcen verwendet werden.

Die Abfragebeschleunigung wird wie andere serverlose Features in Snowflake abgerechnet, d. h. Sie zahlen sekundengenau für die genutzten Computeressourcen. Weitere Informationen zur Anzahl der vom Query Acceleration Service verbrauchten Credits pro Computestunde finden Sie in der „Serverless Feature Credit Table“ unter Snowflake Service Consumption Table.

Anzeigen von Abrechnungsinformationen auf der klassischen Konsole

Wenn die Abfragebeschleunigung (Query Acceleration) für Ihr Konto aktiviert ist, enthält die Abrechnungsseite auf der klassischen Weboberfläche ein Warehouse mit dem Namen QUERY_ACCELERATION, das alle von diesem Dienst verbrauchten Credits für alle Warehouses Ihres Kontos anzeigt.

Der folgende Screenshot zeigt ein Beispiel für die Abrechnungsinformationen des Warehouses QUERY_ACCELERATION:

../_images/query-acceleration-billing-ui.png

Anzeigen der Abrechnung über die Account Usage-Ansicht QUERY_ACCELERATION_HISTORY

Sie können die Abrechnungsdaten in der Account Usage-Ansicht Ansicht QUERY_ACCELERATION_HISTORY einsehen.

Beispiel

Diese Abfrage gibt die Credits zurück, die von jedem Warehouse in Ihrem Konto für den Abfragebeschleunigungsdienst verbraucht wurden (aktueller Monat):

SELECT warehouse_name,
       SUM(credits_used) AS total_credits_used
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
  WHERE start_time >= DATE_TRUNC(month, CURRENT_DATE)
  GROUP BY 1
  ORDER BY 2 DESC;
Copy

Anzeigen der Abrechnung über die Organization Usage-Ansicht QUERY_ACCELERATION_HISTORY

Sie können die Abrechnungsdaten für den Abfragebeschleunigungsdienst für alle Konten in Ihrer Organisation in der Organization Usage-Ansicht Ansicht QUERY_ACCELERATION_HISTORY anzeigen.

Beispiel

Diese Abfrage gibt die Credits zurück, die von jedem Warehouse in Ihrem Konto für den Abfragebeschleunigungsdienst verbraucht wurden (aktueller Monat):

SELECT account_name,
       warehouse_name,
       SUM(credits_used) AS total_credits_used
  FROM SNOWFLAKE.ORGANIZATION_USAGE.QUERY_ACCELERATION_HISTORY
  WHERE usage_date >= DATE_TRUNC(month, CURRENT_DATE)
  GROUP BY 1, 2
  ORDER BY 3 DESC;
Copy

Anzeigen der Abrechnung mit der Funktion QUERY_ACCELERATION_HISTORY

Sie können die Abrechnungsdaten auch mit der Information Schema-Funktion QUERY_ACCELERATION_HISTORY anzeigen.

Beispiel

Im folgenden Beispiel wird die Funktion QUERY_ACCELERATION_HISTORY verwendet, um Informationen zu den von diesem Dienst in den letzten 12 Stunden beschleunigten Abfragen zurückzugeben:

SELECT start_time,
       end_time,
       credits_used,
       warehouse_name,
       num_files_scanned,
       num_bytes_scanned
  FROM TABLE(INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY(
    date_range_start=>DATEADD(H, -12, CURRENT_TIMESTAMP)));
Copy

Evaluieren von Kosten und Performance

Dieser Abschnitt enthält Beispielabfragen, mit deren Hilfe Sie die Abfrageleistung und die Kosten vor und nach Aktivierung des Abfragebeschleunigungsdienstes bewerten können.

Anzeigen der Kosten für Warehouse und Abfragebeschleunigungsdienst

Die folgende Abfrage berechnet die Kosten für das Warehouse und den Abfragebeschleunigungsdienst eines bestimmten Warehouses. Sie können diese Abfrage nach Aktivierung des Abfragebeschleunigungsdienstes für ein Warehouse ausführen, um die Kosten vor und nach der Aktivierung der Abfragebeschleunigung zu vergleichen. Der Datumsbereich für die Abfrage beginnt 8 Wochen vor der ersten Credit-Nutzung für den Abfragebeschleunigungsdienst und endet 8 Wochen nach den letzten angefallenen Kosten für den Abfragebeschleunigungsdienst (oder bis zum aktuellen Datum).

Bemerkung

  • Diese Abfrage eignet sich am besten zur Bewertung der Kosten des Dienstes, wenn die Warehouse-Eigenschaften und der Workload vor und nach der Aktivierung des Abfragebeschleunigungsdienstes gleich bleiben.

  • Diese Abfrage liefert nur dann Ergebnisse, wenn im Warehouse Credits für beschleunigte Abfragen genutzt wurden.

Diese Beispielabfrage gibt Warehouse- und Abfragebeschleunigungsdienst-Kosten für my_warehouse zurück:

WITH credits AS (
  SELECT 'QC' AS credit_type,
         TO_DATE(end_time) AS credit_date,
         SUM(credits_used) AS num_credits
    FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
    WHERE warehouse_name = 'my_warehouse'
    AND credit_date BETWEEN
           DATEADD(WEEK, -8, (
             SELECT TO_DATE(MIN(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
           AND
           DATEADD(WEEK, +8, (
             SELECT TO_DATE(MAX(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
  GROUP BY credit_date
  UNION ALL
  SELECT 'WC' AS credit_type,
         TO_DATE(end_time) AS credit_date,
         SUM(credits_used) AS num_credits
    FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
    WHERE warehouse_name = 'my_warehouse'
    AND credit_date BETWEEN
           DATEADD(WEEK, -8, (
             SELECT TO_DATE(MIN(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
           AND
           DATEADD(WEEK, +8, (
             SELECT TO_DATE(MAX(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
  GROUP BY credit_date
)
SELECT credit_date,
       SUM(IFF(credit_type = 'QC', num_credits, 0)) AS qas_credits,
       SUM(IFF(credit_type = 'WC', num_credits, 0)) AS compute_credits,
       compute_credits + qas_credits AS total_credits,
       AVG(total_credits) OVER (
         PARTITION BY NULL ORDER BY credit_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
         AS avg_total_credits_7days
  FROM credits
  GROUP BY credit_date
  ORDER BY credit_date;
Copy

Anzeigen der Abfrage-Performance

Diese Abfrage gibt die durchschnittliche Ausführungszeit für Abfragen zurück, die in einem Warehouse für die Abfragebeschleunigung in Frage kommen. Der Datumsbereich für die Abfrage beginnt 8 Wochen vor der ersten Credit-Nutzung für den Abfragebeschleunigungsdienst und endet 8 Wochen nach den letzten angefallenen Kosten für den Abfragebeschleunigungsdienst (oder bis zum aktuellen Datum). Anhand der Ergebnisse können Sie beurteilen, wie sich die durchschnittliche Abfrage-Performance nach der Aktivierung des Abfragebeschleunigungsdienstes verändert hat.

Bemerkung

  • Diese Abfrage eignet sich am besten für die Bewertung der Abfrage-Performance, wenn der Warehouse-Workload vor und nach der Aktivierung des Abfragebeschleunigungsdienstes gleich bleibt.

  • Wenn der Warehouse-Workload stabil bleibt, sollte auch der Wert in der Spalte num_execs konstant bleiben.

  • Wenn der Wert in der Spalte num_execs der Abfrageergebnisse drastisch ansteigt oder abfällt, sind die Ergebnisse dieser Abfrage wahrscheinlich nicht für eine Evaluation der Abfrage-Performance geeignet.

Diese Beispielabfrage gibt die Abfrageausführungszeit pro Tag zurück und berechnet den 7-Tage-Durchschnitt der vorherigen Woche für Abfragen, die für eine Beschleunigung im Warehouse my_warehouse in Frage kommen:

WITH qas_eligible_or_accelerated AS (
  SELECT TO_DATE(qh.end_time) AS exec_date,
        COUNT(*) AS num_execs,
        SUM(qh.execution_time) AS exec_time,
        MAX(IFF(qh.query_acceleration_bytes_scanned > 0, 1, NULL)) AS qas_accel_flag
    FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY AS qh
    WHERE qh.warehouse_name = 'my_warehouse'
    AND TO_DATE(qh.end_time) BETWEEN
           DATEADD(WEEK, -8, (
             SELECT TO_DATE(MIN(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
              WHERE warehouse_name = 'my_warehouse'
           ))
           AND
           DATEADD(WEEK, +8, (
             SELECT TO_DATE(MAX(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
              WHERE warehouse_name = 'my_warehouse'
           ))
    AND (qh.query_acceleration_bytes_scanned > 0
          OR
          EXISTS (
            SELECT 1
              FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE AS qae
               WHERE qae.query_id = qh.query_id
               AND qae.warehouse_name = qh.warehouse_name
          )
         )
    GROUP BY exec_date
)
SELECT exec_date,
       SUM(exec_time) OVER (
         PARTITION BY NULL ORDER BY exec_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) /
       NULLIFZERO(SUM(num_execs) OVER (
         PARTITION BY NULL ORDER BY exec_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
       ) AS avg_exec_time_7days,
      exec_time / NULLIFZERO(num_execs) AS avg_exec_time,
      qas_accel_flag,
      num_execs,
      exec_time
  FROM qas_eligible_or_accelerated;
Copy

Die Ausgabe der Anweisung enthält die folgenden Spalten:

Spalte

Beschreibung

EXEC_DATE

Datum der Ausführung der Abfrage.

AVG_EXEC_TIME_7DAYS

Die durchschnittliche Ausführungszeit für die letzten 7 Tage einschließlich EXEC_DATE.

AVG_EXEC_TIME

Die durchschnittliche Ausführungszeit der Abfrage.

QAS_ACCEL_FLAG

1, wenn irgendwelche Abfragen beschleunigt wurden; NULL, wenn keine Abfragen beschleunigt wurden.

NUM_EXECS

Anzahl der beschleunigten Abfragen.

EXEC_TIME

Gesamtausführungszeit aller für die Abfragebeschleunigung in Frage kommenden Abfragen.

Kompatibilität mit der Suchoptimierung

Abfragebeschleunigung und Suchoptimierung können zusammen genutzt werden, um die Abfrageleistung zu optimieren. Erstens kann die Suchoptimierung die Mikropartitionen entfernen, die für eine Abfrage nicht benötigt werden. Dann kann die Abfragebeschleunigung für in Frage kommende Abfragen einen Teil der verbleibenden Verarbeitung auf freigegebene Computeressourcen verlagern, die vom Dienst bereitgestellt werden.

Die Verarbeitungsleistung von Abfragen, die durch beide Dienste beschleunigt werden, variiert je nach Workload und verfügbaren Ressourcen.