Optimiser vos performances SAS Viya : Comment afficher et analyser un Query Plan FedSQL
Stéphanie 9 vistas
Nivel de dificultad
Confirmé
Publicado el :
Consejo del experto
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.
Aviso importante
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.