Tutorial: Workload-Leistung mit dem Abfragebeschleunigungsdienst verbessern¶
Einführung¶
Snowflake bietet eine Vielzahl von Leistungsverbesserungen zur Beschleunigung der verschiedenen Workloads. In diesem Tutorial erfahren Sie, wie Sie den Abfragebeschleunigungsdienst (Query Acceleration Service, QAS) nutzen können, um die Gesamtleistung Ihrer Workloads zu verbessern.
Voraussetzungen¶
Snowflake-Konto mit Enterprise Edition (oder höher)
Eine Rolle mit den folgenden Berechtigungen:
Berechtigungen, die zum Ausführen der Befehle CREATE WAREHOUSE und ALTER WAREHOUSE erforderlich sind.
Berechtigungen, die zum Abfragen der Account Usage-Ansichten im Tutorial erforderlich sind:
Berechtigung, die zum Ausführen der Information Schema-Tabellenfunktionen im Tutorial erforderlich ist:
Fortgeschrittene SQL-Kenntnisse.
Snowsight oder SnowSQL (CLI-Client) zum Ausführen von SQL-Befehlen.
Lerninhalte¶
In diesem Tutorial lernen Sie Folgendes:
Ermitteln einer Abfrage in einem Abfrageverlauf, die für die Beschleunigung geeignet ist.
Ausführen der Abfrage in zwei verschiedenen Warehouses, um die Auswirkungen der Abfragebeschleunigung zu ermitteln.
Vergleichen der Abfrageleistung und der Kosten mit und ohne Beschleunigung.
Ermitteln, welches Ihrer Warehouses am meisten Abfragebeschleunigungsdienst profitieren würde.
Aktivieren des Dienstes für ein bestehendes Warehouse.
Geeignete Abfrage ermitteln¶
Finden Sie eine Abfrage, die für die Beschleunigung geeignet ist. Sie können die folgende Beispielabfrage verwenden, um eine Abfrage zu finden, die für die Beschleunigung geeignet ist.
Diese Abfrage identifiziert Abfragen mit einem in geeigneten Zeitfaktor, der durch das Verhältnis zwischen dem Wert im Feld „eligible_query_acceleration_time“ und der Gesamtdauer der Abfrage aus der Ansicht QUERY_ACCELERATION_ELIGIBLE im Schema ACCOUNT_USAGE bestimmt wird.
SELECT query_id,
query_text,
start_time,
end_time,
warehouse_name,
warehouse_size,
eligible_query_acceleration_time,
upper_limit_scale_factor,
DATEDIFF(second, start_time, end_time) AS total_duration,
eligible_query_acceleration_time / NULLIF(DATEDIFF(second, start_time, end_time), 0) AS eligible_time_ratio
FROM
SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE
start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
AND eligible_time_ratio <= 1.0
AND total_duration BETWEEN 3 * 60 and 5 * 60
ORDER BY (eligible_time_ratio, upper_limit_scale_factor) DESC NULLS LAST
LIMIT 100;
Wählen Sie aus den Ergebnissen die Abfrage mit dem höchsten UPPER_LIMIT_SCALE_FACTOR-Wert aus.
Kopieren Sie den Abfragetext, die Warehouse-Größe und den Skalierungsfaktor für die Obergrenze.
Wenn die obige Abfrage keine Ergebnisse liefert, können Sie diesem Tutorial trotzdem folgen, indem Sie die folgende Beispielabfrage verwenden. Das Beispiel-Dataset für diese Abfrage ist ein Snapshot der TPC-DS-Daten aus den Snowflake-Beispieldaten, auf die Sie Zugriff haben:
SELECT d.d_year as "Year",
i.i_brand_id as "Brand ID",
i.i_brand as "Brand",
SUM(ss_net_profit) as "Profit"
FROM snowflake_sample_data.tpcds_sf10tcl.date_dim d,
snowflake_sample_data.tpcds_sf10tcl.store_sales s,
snowflake_sample_data.tpcds_sf10tcl.item i
WHERE d.d_date_sk = s.ss_sold_date_sk
AND s.ss_item_sk = i.i_item_sk
AND i.i_manufact_id = 939
AND d.d_moy = 12
GROUP BY d.d_year,
i.i_brand,
i.i_brand_id
ORDER BY 1, 4, 2
LIMIT 200;
Wenn Sie diese Beispielabfrage verwenden, hat WAREHOUSE_SIZE den Wert „X-Small“ und UPPER_LIMIT_SCALE_FACTOR den Wert 64.
Kopieren Sie den Abfragetext, die Warehouse-Größe und den Skalierungsfaktor für die Obergrenze.
Zwei neue Warehouses erstellen¶
In diesem Tutorial werden zwei Warehouses benötigt, um die Abfrage auszuführen: eines mit aktiviertem Abfragebeschleunigungsdienst und eines ohne. Wenn Sie dieselbe Abfrage in neuen, separaten Warehouses ausführen, können Sie sowohl die Leistung als auch die Kosten für den Abfragebeschleunigungsdienst in diesem Tutorial vergleichen.
Um die Warehouses zu erstellen, stellen Sie eine Verbindung zu Snowflake her, und führen Sie dann den folgenden Befehl in Snowsight oder über SnowSQL aus. Ersetzen Sie warehouse_size
und upper_limit_scale_factor
durch die im vorherigen Schritt ausgewählten Werte:
CREATE WAREHOUSE noqas_wh WITH
WAREHOUSE_SIZE='<warehouse_size>'
ENABLE_QUERY_ACCELERATION = false
INITIALLY_SUSPENDED = true
AUTO_SUSPEND = 60;
CREATE WAREHOUSE qas_wh WITH
WAREHOUSE_SIZE='<warehouse_size>'
ENABLE_QUERY_ACCELERATION = true
QUERY_ACCELERATION_MAX_SCALE_FACTOR = <upper_limit_scale_factor>
INITIALLY_SUSPENDED = true
AUTO_SUSPEND = 60;
Abfrage ohne QAS¶
Nachdem Sie Ihre Umgebung eingerichtet und eine Abfrage ermittelt haben, die für die Abfragebeschleunigung geeignet ist, führen Sie die Abfrage ohne Aktivierung des Abfragebeschleunigungsdienstes aus.
Wenn Sie die mitgelieferte Beispielabfrage und keine der ermittelten geeigneten Abfragen aus Ihrem Abfrageverlauf verwenden, führen Sie zunächst die folgende Anweisung aus:
USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
Wählen Sie ein Warehouse aus, und führen Sie Ihre Abfrage aus:
Verwenden Sie das Warehouse, in dem QAS nicht aktiviert ist.
USE WAREHOUSE noqas_wh;
Führen Sie Ihre Testabfrage aus (den Abfragetext aus dem vorherigen Schritt).
Ermitteln Sie die Abfrage-ID der zuletzt ausgeführten Abfrage.
Wenn Sie Snowsight verwenden, können Sie die Abfrage-ID aus dem Bereich Query Profile kopieren und in den Bereich Results einfügen. Alternativ können Sie auch die folgende Anweisung ausführen:
SELECT LAST_QUERY_ID();
Kopieren Sie diese Abfrage-ID für künftige Schritte.
Abfrage mit QAS¶
Nachdem Sie die Abfrage in einem Warehouse ohne Abfragebeschleunigung ausgeführt haben, führen Sie dieselbe Abfrage in dem Warehouse mit aktiviertem QAS aus.
Verwenden Sie das Warehouse mit QAS, um Ihre Abfrage auszuführen:
USE WAREHOUSE qas_wh;
Führen Sie Ihre Testabfrage aus (den Abfragetext aus dem vorherigen Schritt).
Ermitteln Sie die Abfrage-ID der zuletzt ausgeführten Abfrage.
Wenn Sie Snowsight verwenden, können Sie die Abfrage-ID aus dem Bereich Query Profile kopieren und in den Bereich Results einfügen. Alternativ können Sie auch die folgende Anweisung ausführen:
SELECT LAST_QUERY_ID();
Kopieren Sie diese Abfrage-ID für künftige Schritte.
Abfrageleistung und Kosten vergleichen¶
In den vorangegangenen Schritten haben Sie dieselbe Abfrage zweimal ausgeführt, einmal mit einem Warehouse mit aktiviertem QAS und einmal mit einem Warehouse ohne aktiviertem QAS. Jetzt können Sie die Abfrageleistung der Abfrage vergleichen.
Führen Sie dazu die Information Schema-Tabellenfunktion QUERY_HISTORY aus, um die Ausführungszeit für die Abfragen anhand der Abfrage-IDs zu vergleichen:
SELECT query_id,
query_text,
warehouse_name,
total_elapsed_time
FROM TABLE(snowflake.information_schema.query_history())
WHERE query_id IN ('<non_accelerated_query_id>', '<accelerated_query_id>')
ORDER BY start_time;
Vergleichen Sie den Wert von TOTAL_ELAPSED_TIME für dieselbe Abfrage, die einmal mit und einmal ohne Beschleunigung ausgeführt wurde.
Wenn Sie nun die Kosten für jedes Warehouse vergleichen möchten, können Sie die Information Schema-Tabellenfunktion WAREHOUSE_METERING_HISTORY für jedes Warehouse ausführen:
Bemerkung
Wenn Sie für dieses Tutorial keine neuen Warehouses erstellt haben, sondern bereits vorhandene Warehouses verwenden, werden die Ergebnisse dieser Tabellenfunktion wahrscheinlich nicht hilfreich sein.
Führen Sie die folgende Abfrage aus, um die Kosten für das Warehouse
noqas_wh
anzuzeigen:SELECT start_time, end_time, warehouse_name, credits_used, credits_used_compute, credits_used_cloud_services, (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'NOQAS_WH' ));
Für das QAS-aktivierte Warehouse addieren Sie die Kosten für das Warehouse und den Abfragebeschleunigungsdienst, um so die Gesamtkosten für den QAS zu berechnen.
Zeigen Sie die Kosten für das Warehouse
qas_wh
an:SELECT start_time, end_time, warehouse_name, credits_used, credits_used_compute, credits_used_cloud_services, (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'QAS_WH' ));
Zeigen Sie die Kosten für den Abfragebeschleunigungsdienst mit der Information Schema-Tabellenfunktion QUERY_ACCELERATION_HISTORY an:
SELECT start_time, end_time, warehouse_name, credits_used, num_files_scanned, num_bytes_scanned FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY( DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()), WAREHOUSE_NAME => 'QAS_WH' ));
Addieren Sie den
credits_used_total
-Wert aus der ersten Abfrage mit demcredits_used
-Wert aus der zweiten Abfrage, um die QAS-Gesamtkosten zu erhalten.
Bisher haben Sie eine Abfrage in zwei Warehouses getestet, einem Warehouse mit QAS und einem ohne, und konnten die Leistung und die Kosten des QAS vergleichen. Als Nächstes erfahren Sie, wie Sie herausfinden, welches Ihrer Warehouses am meisten von QAS profitieren wird.
Geeignete Warehouses für Ihre Workloads ermitteln¶
Sie können die Warehouses ermitteln, die am meisten von einer Abfragebeschleunigung profitieren würden, indem Sie feststellen, welche Warehouses die meisten Abfragen haben, die für eine Beschleunigung geeignet sind, und/oder mit welchen Warehouses sich die meiste Zeit mit der Abfragebeschleunigung einsparen lässt.
Identifizieren Sie die Warehouses mit den meisten Abfragen, die im letzten Monat für den Abfragebeschleunigungsdienst geeignet waren:
SELECT warehouse_name, count(query_id) as num_eligible_queries, MAX(upper_limit_scale_factor) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP()) GROUP BY warehouse_name ORDER BY num_eligible_queries DESC;
Identifizieren Sie die Warehouses, die im letzten Monat mit dem Abfragebeschleunigungsdienst die meiste Zeit einsparen konnten:
SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time, MAX(upper_limit_scale_factor) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP()) GROUP BY warehouse_name ORDER BY total_eligible_time DESC;
In der Regel sind die Warehouses, die am meisten profitieren würden, diejenigen, die entweder die größte Anzahl an zulässigen Abfragen haben, die meiste Zeiteinsparung durch die Abfragebeschleunigung bieten oder eine Kombination aus beidem aufweisen. Wenn zum Beispiel ein Warehouse bei beiden Abfragen ganz oben in den Ergebnissen steht, könnte dieses Warehouse ein guter Kandidat für die Abfragebeschleunigung sein.
Aktivieren von Query Acceleration¶
Nachdem Sie entschieden haben, welche Warehouses am meisten vom Abfragebeschleunigungsdienst profitieren würden, können Sie die Abfragebeschleunigung aktivieren, indem Sie die folgende ALTER WAREHOUSE-Anweisung ausführen:
ALTER WAREHOUSE <warehouse_name> SET
enable_query_acceleration = TRUE;
Nachdem Sie nun QAS für Ihre Warehouses aktiviert haben, können Sie die Vorteile der Abfragebeschleunigung für die geeigneten Abfragen nutzen.
Bereinigen und weitere Informationen¶
Löschen Sie zum Bereinigen die für dieses Tutorial erstellten Warehouses:
DROP WAREHOUSE noqas_wh;
DROP WAREHOUSE qas_wh;
Weiterführende Informationen¶
Weitere Informationen zum Abfragebeschleunigungsdienst finden Sie unter Verwenden des Query Acceleration Service.
Weitere Beispielabfragen zum Identifizieren von geeigneten Abfragen und Warehouses finden Sie unter Identifizieren von Abfragen und Warehouses, die von Query Acceleration profitieren könnten.
Weitere Informationen zum QAS-Skalierungsfaktor:
Eine Beschreibung des Skalierungsfaktors finden Sie unter QUERY_ACCELERATION_MAX_SCALE_FACTOR unter dem Thema CREATE WAREHOUSE.
Weitere Informationen zum Einstellen des Skalierungsfaktors finden Sie unter Anpassen des Skalierungsfaktors.
So können Sie nach dem Start des Abfragebeschleunigungsdienstes (QAS, Query Acceleration Service) Nutzung und Kosten überwachen:
Weitere Informationen zum Überwachen der Nutzung des Abfragebeschleunigungsdienstes finden Sie unter Überwachen der Query Acceleration-Nutzung.
Weitere Informationen zu den Kosten des Dienstes finden Sie unter Kosten für den Abfragebeschleunigungsdienst (Query Acceleration Service).
Beispielabfragen zur Bewertung der Leistung und der Kosten des QAS finden Sie unter Evaluieren von Kosten und Performance.