Fedsql

Maîtriser le Plan d'Exécution FedSQL dans SAS Viya : Guide Complet d'Optimisation

Michael 13 vues
Niveau de difficulté
Débutant
Publié le :
Michael

Le conseil de l'expert

Michael

Dans un environnement distribué, le secret de la performance réside moins dans le code SQL lui-même que dans la gestion des mouvements de données. Mon conseil : utilisez systématiquement le mode "Dry Run" (_METHOD + NOEXEC) pour valider votre logique à coût zéro, mais basculez impérativement sur showStages pour traquer les redondances de shuffling qui brisent le parallélisme de CAS

Dans l'environnement distribué de SAS© Viya et du moteur CAS (Cloud Analytic Services), comprendre comment vos requêtes sont traitées est crucial pour la performance. Le langage FedSQL, grâce à sa capacité à distribuer les calculs, est puissant, mais peut parfois sembler être une "boîte noire".

Pour optimiser vos traitements et débugger vos requêtes, vous devez analyser le Plan d'Exécution (Query Plan). Cet article technique vous détaille les méthodes pour visualiser ces plans, que vous utilisiez PROC FEDSQL ou l'action fedSql.execDirect.

Pourquoi visualiser le Plan de Requête FedSQL ?

Avant de plonger dans le code, comprenons l'enjeu. Le plan d'exécution vous révèle comment l'optimiseur FedSQL transforme votre requête SQL en instructions CAS. Il vous permet de répondre à ces questions vitales :

  • Ma requête est-elle exécutée en parallèle (multi-thread) ?

  • Y a-t-il des goulots d'étranglement lors du brassage des données (shuffling) ?

  • Les tables sont-elles dupliquées sur tous les nœuds ou partitionnées ?

Les deux options clés : Method vs showStages

SAS© Viya offre deux niveaux de détails pour inspecter ces plans.

1. L'option Method (Vision Structurelle)

Cette option fournit une description textuelle brève des nœuds et des étapes du plan.

  • Comportement : Elle écrit dans la log client.

  • Mode "Dry Run" : Si couplée avec une option de validation (NOEXEC ou validateOnly), elle affiche le plan sans exécuter la requête.

  • Note importante (SAS© Viya 3.5+) : Depuis la version 3.5, l'option Method est plus concise. Elle n'affiche plus la requête de l'étape ni le nombre de threads SQL utilisés. Pour ces détails, il faut passer à l'option suivante.

2. L'option showStages (Vision Performance)

Introduite avec SAS© Viya 3.5, c'est l'option recommandée pour l'optimisation fine. Elle inclut tout ce que fait Method, plus :

  • La requête exacte générée pour chaque étape (stage query).

  • Le nombre de threads SQL par étape.

  • Métriques d'exécution : Temps écoulé, nombre de lignes en sortie, et détails sur le partitionnement (repliqué vs auto-partitionné).

Attention : showStages ne fonctionne pas avec l'option de validation seule (validateOnly), car elle nécessite l'exécution réelle pour collecter les temps de calcul.

Implémentation via PROC FEDSQL

Si vous codez en SAS© classique, vous utiliserez la procédure PROC FEDSQL. Voici comment activer ces options.

Cas 1 : Voir le plan sans exécuter la requête (Debugging)

C'est idéal pour vérifier la syntaxe et la logique de l'optimiseur sans consommer de ressources serveur. Utilisez l'option _METHOD (notez l'underscore) combinée à NOEXEC.

1/* Affichage du plan uniquement (Pas d'exécution) */
2PROC FEDSQL sessref=mysess _method noexec;
3 select * from casuser.ma_table_massive
4 where montant > 1000;
5QUIT;
Maîtriser le Plan d'Exécution FedSQL dans SAS Viya : Guide Complet d'Optimisation -

Cas 2 : Voir le plan durant l'exécution

Pour voir les étapes pendant que le traitement tourne :

1/* Exécution + Affichage de la structure du plan */
2PROC FEDSQL sessref=mysess _method;
3 create TABLE casuser.resultat as
4 select region, sum(montant) as total
5 from casuser.ventes
6 group BY region;
7QUIT;

Cas 3 : L'analyse complète avec showStages

Pour obtenir les métriques de temps et de threads, showStages se déclare dans l'instruction CNTL.

1/* Analyse de performance détaillée (Viya 3.5+) */
2PROC FEDSQL sessref=mysess cntl=(showStages);
3 select a.id, b.nom
4 from casuser.commandes a, casuser.clients b
5 where a.client_id = b.client_id;
6QUIT;
Maîtriser le Plan d'Exécution FedSQL dans SAS Viya : Guide Complet d'Optimisation -

Pour les développeurs utilisant CASL, Python (SWAT) ou R, vous passerez par l'action execDirect.

Cas 1 : Plan structurel sans exécution (Dry run

Ici, on utilise les paramètres booléens method et validateOnly.

1PROC CAS;
2 fedsql.execdirect /
3 method=true
4 validateOnly=true
5 query="select * from casuser.ventes";
6QUIT;

Implémentation via l'Action CAS fedSql.execDirect

Cas 2 : Plan structurel avec exécution

1PROC CAS;
2 fedsql.execdirect /
3 method=true
4 query="select region, count(*) from casuser.ventes group by region";
5QUIT;
Maîtriser le Plan d'Exécution FedSQL dans SAS Viya : Guide Complet d'Optimisation -
1PROC CAS;
2 fedsql.execdirect /
3 method=true
4 query="select region, count(*) from casuser.ventes group by region";
5QUIT;

Cas 3 : Analyse complète (showStages)

Pour récupérer les temps d'exécution par étape (staging) dans vos logs :

1PROC CAS;
2 fedsql.execdirect /
3 showstages=true
4 query="select a.* from casuser.t1 a inner join casuser.t2 b on a.id=b.id";
5QUIT;
Maîtriser le Plan d'Exécution FedSQL dans SAS Viya : Guide Complet d'Optimisation -

Tableau Récapitulatif

Maîtriser le Plan d'Exécution FedSQL dans SAS Viya : Guide Complet d'Optimisation -

Si vous travaillez sur de très volumétries dans SAS© Viya, ne lancez jamais une requête complexe sans avoir d'abord testé un _METHOD NOEXEC. Cela vous évitera de lancer un produit cartésien accidentel ou une requête qui ne tire pas profit de l'architecture MPP (Massively Parallel Processing) de CAS. Une fois la logique validée, utilisez showStages pour tuner vos performances.