Verwenden des Query Acceleration Service

Der Abfragebeschleunigungsdienst 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 Query Acceleration profitieren könnten

Um die Abfragen zu identifizieren, die von dem Abfragebeschleunigungsdienst profitieren könnten, können Sie die Funktion SYSTEM$ESTIMATE_QUERY_ACCELERATION verwenden oder die Funktion Ansicht QUERY_ACCELERATION_ELIGIBLE abfragen. In der QUERY_ACCELERATION_ELIGIBLE-Ansicht werden auch Warehouses identifiziert, die von dem Abfragebeschleunigungsdienst profitieren könnten.

Ungeeignete Abfragen

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

  • Es gibt keine Filter oder keine Aggregation (d. h. GROUP BY). Der Abfragebeschleunigungsdienst ist derzeit nicht in der Lage, solche Abfragen zu beschleunigen.

  • Die Filter sind nicht selektiv genug. Oder der GROUP BY-Ausdruck hat eine hohe Kardinalität.

  • Es sind nicht genügend Partitionen vorhanden. Der Vorteil der Abfragebeschleunigung würde durch die Latenz bei der Beschaffung zusätzlicher Server für den Dienst aufgehoben, wenn nicht genügend Partitionen zum Scannen vorhanden sind.

  • Der Abfragebeschleunigungsdienst beschleunigt keine Abfragen auf Tabellen, für die die Suchoptimierung aktiviert ist.

  • Die Abfrage enthält eine LIMIT-Klausel. Eine Ausnahme bilden LIMIT-Klauseln mit einer ORDER BY-Klausel unterstützt.

Identifizieren von Abfragen mit der SYSTEM$ESTIMATE_QUERY_ACCELERATION-Funktion

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, die möglicherweise von dem Dienst profitieren könnten, indem Sie den 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
ORDER BY eligible_query_acceleration_time DESC;
Copy

Identifizieren Sie die Abfragen, die möglicherweise von dem Dienst in dem spezifischen Warehouse mywh profitieren könnten:

SELECT query_id, eligible_query_acceleration_time
FROM snowflake.account_usage.query_acceleration_eligible
WHERE warehouse_name = 'mywh'
ORDER BY eligible_query_acceleration_time DESC;
Copy

Identifizieren Sie für einen bestimmten Zeitraum die Warehouses mit den meisten Abfragen, die für den Abfragebeschleunigungsdienst in Frage kommen:

SELECT warehouse_name, COUNT(query_id) AS num_eligible_queries
FROM snowflake.account_usage.query_acceleration_eligible
WHERE start_time > 'Tue, 18 January 2022 12:00:00'::timestamp
AND end_time < 'Tue, 19 January 2022 00:00:00'::timestamp
GROUP BY warehouse_name
ORDER BY num_eligible_queries DESC;
Copy

Ermitteln Sie die Warehouses, die möglicherweise von dem Abfragebeschleunigungsdienst profitieren würden. Berechnen Sie für jedes Warehouse die gesamte Abfrageausführungszeit, die für die Beschleunigung in Frage kommt:

SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time
FROM snowflake.account_usage.query_acceleration_eligible
GROUP BY warehouse_name
ORDER BY total_eligible_time DESC;
Copy

Ermitteln Sie die Obergrenze des Skalierungsfaktors für den Abfragebeschleunigungsdienst eines bestimmten Warehouses:

SELECT MAX(upper_limit_scale_factor)
FROM snowflake.account_usage.query_acceleration_eligible
WHERE warehouse_name = 'mywh';
Copy

Aktivieren von Query Acceleration

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.

Bemerkung

Der Abfragebeschleunigungsdienst beschleunigt keine Abfragen auf Tabellen, für die die Suchoptimierung aktiviert ist.

Unterstützte SQL-Befehle

Der Abfragebeschleunigungsdienst unterstützt die folgenden SQL-Befehle:

  • SELECT

  • INSERT (wenn die Anweisung eine SELECT-Anweisung enthält)

  • CREATE TABLE AS SELECT (CTAS)

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.

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 Query Acceleration 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 Query Acceleration-Nutzung

Verwenden der Weboberfläche zur Überwachung der Query Acceleration-Nutzung

Sobald Sie den Abfragebeschleunigungsdienst aktivieren, können Sie den Bereich Profilübersicht in 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 (weitere Informationen dazu siehe Profilübersicht/Operatordetails) 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.

Verwendung der Account Usage-Ansicht QUERY_HISTORY zur Überwachung der Query Acceleration-Nutzung

Um die Auswirkungen der Abfragebeschleunigung auf eine Abfrage anzuzeigen, können Sie die folgenden Spalten der QUERY_HISTORY-Ansicht 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 QUERY_HISTORY-Ansicht.

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

SELECT * 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 * 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 (Query Acceleration Service)

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 Abfragebeschleunigungsdienst (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 QUERY_ACCELERATION_HISTORY-Ansicht 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 mit der QUERY_ACCELERATION_HISTORY-Funktion

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 * from
table(information_schema.query_acceleration_history(
  date_range_start=>dateadd(H, -12, current_timestamp)));
Copy