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

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;
Copy
  1. Wählen Sie aus den Ergebnissen die Abfrage mit dem höchsten UPPER_LIMIT_SCALE_FACTOR-Wert aus.

  2. 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;
Copy
  1. Wenn Sie diese Beispielabfrage verwenden, hat WAREHOUSE_SIZE den Wert „X-Small“ und UPPER_LIMIT_SCALE_FACTOR den Wert 64.

  2. 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;
Copy

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;
Copy

Wählen Sie ein Warehouse aus, und führen Sie Ihre Abfrage aus:

  1. Verwenden Sie das Warehouse, in dem QAS nicht aktiviert ist.

    USE WAREHOUSE noqas_wh;
    
    Copy
  2. Führen Sie Ihre Testabfrage aus (den Abfragetext aus dem vorherigen Schritt).

  3. 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();
    
    Copy
  4. 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.

  1. Verwenden Sie das Warehouse mit QAS, um Ihre Abfrage auszuführen:

    USE WAREHOUSE qas_wh;
    
    Copy
  2. Führen Sie Ihre Testabfrage aus (den Abfragetext aus dem vorherigen Schritt).

  3. 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();
    
    Copy
  4. 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;
Copy

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.

  1. 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'
      ));
    
    Copy
  2. 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'
        ));
      
      Copy
    • 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'
      ));
      
      Copy

    Addieren Sie den credits_used_total-Wert aus der ersten Abfrage mit dem credits_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;
    
    Copy
  • 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;
    
    Copy

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;
Copy

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;
Copy