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¶
Un compte Snowflake de type Enterprise Edition (ou supérieur)
Un rôle avec les privilèges suivants :
Les privilèges requis pour exécuter les commandes CREATE WAREHOUSE et ALTER WAREHOUSE.
Les privilèges requis pour interroger la vue Account Usage dans le tutoriel :
Le privilège requis pour exécuter les fonctions de table Information Schema dans le tutoriel :
Connaissance intermédiaire de SQL.
Snowsight ou SnowSQL (CLI client) pour l’exécution de commandes SQL.
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;
Dans les résultats, sélectionnez une requête dont la valeur UPPER_LIMIT_SCALE_FACTOR est la plus élevée.
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;
Si vous utilisez cet exemple de requête, WAREHOUSE_SIZE est « X-Small » et UPPER_LIMIT_SCALE_FACTOR est 64.
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;
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;
Sélectionnez un entrepôt et exécutez votre requête :
Utilisez l’entrepôt pour lequel QAS n’est pas activé.
USE WAREHOUSE noqas_wh;
Exécutez votre requête de test (le texte de la requête de l’étape précédente).
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();
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.
Utilisez l’entrepôt avec QAS activé pour exécuter votre requête :
USE WAREHOUSE qas_wh;
Exécutez votre requête de test (le texte de la requête de l’étape précédente).
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();
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;
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.
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' ));
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' ));
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' ));
Additionnez la valeur
credits_used_total
de la première requête avec la valeurcredits_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;
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;
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;
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;
Que lire ensuite ?¶
Pour plus d’informations sur le service d’accélération des requêtes, reportez-vous à Utilisation du service Query Acceleration.
Pour d’autres exemples de requêtes permettant d’identifier les requêtes et les entrepôts éligibles, reportez-vous à Identification des requêtes et des entrepôts qui pourraient bénéficier de Query Acceleration.
Pour plus d’informations sur le facteur d’échelle QAS :
Pour une description du facteur d’échelle, reportez-vous à QUERY_ACCELERATION_MAX_SCALE_FACTOR dans la rubrique CREATE WAREHOUSE.
Pour plus d’informations sur la configuration du facteur d’échelle, reportez-vous à Ajustement du facteur d’échelle.
Après avoir commencé à utiliser le service d’accélération des requêtes, vous pouvez surveiller l’utilisation de QAS et les coûts :
Pour plus d’informations sur la surveillance de l’utilisation du service d’accélération des requêtes, reportez-vous à Surveillance de l’utilisation du service Query Acceleration.
Pour plus d’informations sur les coûts du service, consultez Coût de Query Acceleration Service.
Par exemple, pour évaluer les performances et le coût de QAS, voir Évaluation des coûts et des performances.