Tutoriel : améliorez les performances de votre charge de travail avec le service d’accélération des requêtes

Introduction

Snowflake propose une variété d’améliorations de performance pour accélérer ses différentes charges de travail. Dans ce tutoriel, vous apprendrez à tirer parti du service d’accélération des requêtes (QAS) pour améliorer les performances globales de votre charge de travail.

Conditions préalables

Ce que vous apprendrez

Dans ce tutoriel, vous apprendrez à :

  • Rechercher dans l’historique de vos requêtes une requête susceptible d’être accélérée.

  • Exécuter la requête dans deux entrepôts distincts pour identifier les effets de l’accélération de la requête.

  • Comparer la performance et le coût des requêtes avec et sans accélération.

  • Identifier, parmi vos entrepôts, ceux qui bénéficieraient le plus du service d’accélération des requêtes.

  • Activer le service pour un entrepôt existant.

Trouver une requête éligible

Trouvez une requête éligible à l’accélération. Vous pouvez utiliser l’exemple de requête suivant pour trouver une requête éligible à l’accélération.

Cette requête identifie les requêtes ayant un ratio de temps éligible élevé, tel qu’identifié par le ratio du champ eligible_query_acceleration_time et de la durée totale de la requête dans la vue QUERY_ACCELERATION_ELIGIBLE du schéma ACCOUNT_USAGE.

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. Dans les résultats, sélectionnez une requête dont la valeur UPPER_LIMIT_SCALE_FACTOR est la plus élevée.

  2. Copiez le texte de la requête, la taille de l’entrepôt et le facteur d’échelle de la limite supérieure.

Si la requête ci-dessus ne donne aucun résultat, vous pouvez toujours suivre ce tutoriel en utilisant l’exemple de requête suivant. L’exemple de jeu de données pour cette requête est un instantané des données TPC-DS dans les données d’exemple Snowflake partagées avec vous :

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. Si vous utilisez cet exemple de requête, WAREHOUSE_SIZE est « X-Small » et UPPER_LIMIT_SCALE_FACTOR est 64.

  2. Copiez le texte de la requête, la taille de l’entrepôt et le facteur d’échelle de la limite supérieure.

Créer deux nouveaux entrepôts

Ce tutoriel a besoin de deux entrepôts pour exécuter la requête : l’un avec le service d’accélération des requêtes activé et l’autre sans. L’exécution de la même requête dans de nouveaux entrepôts distincts vous permettra de comparer à la fois la performance et le coût du service d’accélération des requêtes de ce tutoriel.

Pour créer les entrepôts, connectez-vous à Snowflake et exécutez la commande suivante dans Snowsight ou en utilisant SnowSQL. Remplacez les valeurs warehouse_size et upper_limit_scale_factor par les valeurs sélectionnées à l’étape précédente :

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

Requête sans QAS

Après avoir configuré votre environnement et trouvé une requête éligible à l’accélération des requêtes, exécutez la requête sans activer le service d’accélération des requêtes pour voir quelles sont ses performances.

Si vous utilisez l’exemple de requête fourni plutôt qu’une requête éligible de votre historique de requêtes, exécutez d’abord l’instruction suivante :

USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
Copy

Sélectionnez un entrepôt et exécutez votre requête :

  1. Utilisez l’entrepôt pour lequel QAS n’est pas activé.

    USE WAREHOUSE noqas_wh;
    
    Copy
  2. Exécutez votre requête de test (le texte de la requête de l’étape précédente).

  3. Obtenez l’ID de la dernière requête exécutée.

    Si vous utilisez Snowsight, vous pouvez copier et coller l’ID de requête du panneau Query Profile dans le panneau Results. Vous pouvez également exécuter l’instruction suivante :

    SELECT LAST_QUERY_ID();
    
    Copy
  4. Copiez cet ID de requête pour les étapes ultérieures.

Requête avec QAS

Après avoir exécuté la requête dans un entrepôt sans accélération des requêtes, exécutez la même requête dans l’entrepôt compatible QAS.

  1. Utilisez l’entrepôt avec QAS activé pour exécuter votre requête :

    USE WAREHOUSE qas_wh;
    
    Copy
  2. Exécutez votre requête de test (le texte de la requête de l’étape précédente).

  3. Obtenez l’ID de la dernière requête exécutée

    Si vous utilisez Snowsight, vous pouvez copier et coller l’ID de requête du panneau Query Profile dans le panneau Results. Vous pouvez également exécuter l’instruction suivante :

    SELECT LAST_QUERY_ID();
    
    Copy
  4. Copiez cet ID de requête pour les étapes ultérieures.

Comparez la performance et le coût des requêtes

Dans les étapes précédentes, vous avez exécuté la même requête deux fois, une fois en utilisant un entrepôt avec QAS activé et une autre fois sans. Vous pouvez maintenant comparer les performances de la requête.

Pour ce faire, vous pouvez exécuter la fonction de table Information Schema QUERY_HISTORY pour comparer le temps d’exécution des requêtes à l’aide de leur IDs de requête :

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

Comparez le site TOTAL_ELAPSED_TIME pour la même requête exécutée avec et sans accélération.

Ensuite, pour comparer les coûts de chaque entrepôt, vous pouvez exécuter la fonction de table Information Schema WAREHOUSE_METERING_HISTORY pour chaque entrepôt :

Note

Si vous n’avez pas créé de nouveaux entrepôts pour ce tutoriel et que vous avez utilisé des entrepôts préexistants, les résultats de cette fonction de table ne seront probablement pas utiles.

  1. Exécutez la requête suivante pour voir les coûts de l’entrepôt noqas_wh :

    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. Dans le cas de l’entrepôt avec QAS activé, additionnez les coûts de l’entrepôt et du service d’accélération des requêtes pour calculer le coût total de QAS.

    • Voyez les coûts de l’entrepôt qas_wh :

      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
    • Visualisez les coûts du service d’accélération des requêtes avec la fonction de table Information Schema QUERY_ACCELERATION_HISTORY :

        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

    Additionnez la valeur credits_used_total de la première requête avec la valeur credits_used de la deuxième requête pour obtenir le coût total de QAS.

Jusqu’à présent, vous avez testé une requête dans deux entrepôts, l’un avec QAS activé et l’autre sans, et vous avez pu comparer la performance et le coût de QAS. Ensuite, vous apprendrez à identifier, parmi vos entrepôts, ceux qui bénéficieront le plus de QAS.

Trouvez les entrepôts éligibles dans vos charges de travail

Vous pouvez trouver les entrepôts qui bénéficieraient le plus de l’accélération des requêtes en déterminant les entrepôts qui ont le plus grand nombre de requêtes éligibles à l’accélération et/ou les entrepôts qui ont le plus de temps d’éligibilité à l’accélération des requêtes.

  • Identifiez les entrepôts ayant le plus de requêtes éligibles au service d’accélération des requêtes au cours du dernier mois :

    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
  • Identifiez les entrepôts dont le temps d’éligibilité au service d’accélération des requêtes a été le plus élevé au cours du dernier mois :

    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

En règle générale, les entrepôts qui en bénéficieraient le plus sont ceux qui ont le plus grand nombre de requêtes éligibles, le plus grand temps d’accélération des requêtes éligibles, ou une combinaison des deux. Par exemple, si un entrepôt se trouve en tête des résultats pour les deux requêtes ci-dessus, cet entrepôt pourrait être un bon candidat pour l’accélération des requêtes.

Activation de Query Acceleration

Après avoir décidé quel(s) entrepôt(s) bénéficierait(ent) le plus du service d’accélération des requêtes, vous pouvez activer l’accélération des requêtes en exécutant l’instruction suivante ALTER WAREHOUSE :

ALTER WAREHOUSE <warehouse_name> SET
  enable_query_acceleration = TRUE;
Copy

Maintenant que vous avez activé QAS pour votre/vos entrepôt(s), vous êtes prêt à tirer parti de l’accélération des requêtes pour les requêtes éligibles.

Nettoyage et ressources supplémentaires

Pour effectuer un nettoyage, supprimez les entrepôts créés pour ce tutoriel :

DROP WAREHOUSE noqas_wh;

DROP WAREHOUSE qas_wh;
Copy