Optimiser vos performances SAS Viya : Comment afficher et analyser un Query Plan FedSQL
Stéphanie 9 Aufrufe
Schwierigkeitsgrad
Confirmé
Veröffentlicht am :
Expertenrat
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.
Wichtiger Haftungsausschluss
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.