Optimiser vos performances SAS Viya : Comment afficher et analyser un Query Plan FedSQL
Stéphanie 9 vues
Niveau de difficulté
Confirmé
Publié le :
Le conseil de l'expert
Michael
Ne vous contentez pas d'écrire du code qui fonctionne, écrivez du code qui scale : l'analyse du plan de requête est votre seul moyen de vérifier que vos jointures s'exécutent en parallèle sur tous les workers CAS plutôt que de saturer le contrôleur. Ma règle d'or : utilisez systématiquement METHOD avec VALIDATEONLY en phase de test pour débusquer les nœuds Sort ou Limit qui brisent le multi-threading avant même de lancer vos traitements sur des téraoctets de données
proc fedsql sessref=casauto _method;
select
C.ID_CLIENT,
C.NOM,
C.REGION,
V.TOTAL_ACHATS,
V.NB_TRANSACTIONS
from CLIENTS_DATA C
inner join (
select ID_CLIENT, sum(MONTANT) as TOTAL_ACHATS, count(*) as NB_TRANSACTIONS
from VENTES_TRANSACTIONS
group by ID_CLIENT
) V on C.ID_CLIENT = V.ID_CLIENT
order by TOTAL_ACHATS desc;
quit;
1
PROC FEDSQL sessref=casauto _method;
2
select
3
C.ID_CLIENT,
4
C.NOM,
5
C.REGION,
6
V.TOTAL_ACHATS,
7
V.NB_TRANSACTIONS
8
from CLIENTS_DATA C
9
inner join (
10
select ID_CLIENT, sum(MONTANT) as TOTAL_ACHATS, count(*) as NB_TRANSACTIONS
11
from VENTES_TRANSACTIONS
12
group BY ID_CLIENT
13
) V on C.ID_CLIENT = V.ID_CLIENT
14
order BY TOTAL_ACHATS desc;
15
QUIT;
Comprendre les nœuds d'exécution
Le Query Plan va afficher des nœuds spécifiques. Voici ce qu'ils signifient pour vos performances :
Attention : Souvent effectué sur un seul nœud à la fin.
select *
SeqScan
Lecture séquentielle des données.
Décryptage d'un Log showStages
Si vous activez cntl=(showStages), vous verrez des sections comme celle-ci :
Stage 2 : Aggregation (VENTES_TRANSACTIONS)
Input: 50 000 000 rows
Output: 1 200 000 rows (Résultats groupés par client)
Action: Partitionnement local et tri par thread.
Stage 3 : Join (CLIENTS_DATA + Stage 2)
Detail: Table CLIENTS_DATA Replicated to all workers.
Note de l'expert :FedSQL a jugé que la table Client était assez petite pour être copiée partout, évitant ainsi un transfert massif de la table de transactions.
3 conseils d'expert pour vos plans FedSQL
Surveillez le nœud "Sort" : Si votre requête finit par un order by sur des millions de lignes, FedSQL devra peut-être rapatrier les données sur un seul worker (ou le client), créant un goulot d'étranglement.
Vérifiez le "Replicated" : Dans le log de showStages, si vous voyez qu'une table géante est répliquée (Replicated to all workers), cela peut saturer la mémoire. Assurez-vous que vos tables sont distribuées sur une clé commune.
Utilisez validateOnly en prod : Avant de planifier un job batch lourd, lancez-le une fois avec NOEXEC pour valider que le planificateur n'a pas choisi une stratégie de jointure sous-optimale.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.