-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
1/30
Dcembre 2013 - 1 -
OPTIMISEZ LES PERFORMANCES DE TRAITEMENT DE VOS DONNEES
AVECSAS/ACCESS
Le BIG DATA nous immerge inexorablement dans unocan
d'informations. Accder toujours plus donnesle plus rapidement
possible na jamais t autant aucur des attentes des utilisateurs.
Aussi, dans cesenvironnements o la vitesse revt une
importancecapitale, il est impensable de ne pas
comprendrelinteraction entre SAS et les bases de donnes.
Savoirquand il est plus avantageux de laisser SAS faire le
traitement ou quand il est prfrable que la basede donnes sen charge
est fondamental dans latteinte de meilleures performances.
Les performances, toujours les performances... Le nerf de la
guerre pour beaucoup d'entre nous.Mais comme pour un virus, il est
toujours plus facile de le traiter quand on sait qui on
aaffaire.Cet article explore les pistes pour traiter efficacement
vos donnes externes et obtenir le
meilleur gain de performance. Il sadresse aux dveloppeurs mais
galement aux architectes encharge de la mise en uvre du systme
dinformation.
Sommaire
Optimisez les performances de traitement de vos donnes avec
SAS/Access............................. 11. Introduction
...............................................................................................................
22. Se connecter une base de donnes
.............................................................................
4
2.1. Jeu de donnes utilis
............................................................................................
42.2. SQL PASS-THROUGH implicite et tape DATA
............................................................ 42.3.
SQL PASS-THROUGH explicite
.................................................................................
52.4. Choisir entre implicite et explicite.
...........................................................................
6
3. Obtenir les meilleurs performance possible
.....................................................................
73.1. Limiter le nombre de lignes et de colonnes retournes
............................................... 73.2. Faire raliser
le traitement par la base de donnes
.................................................... 73.3. Tri et
indexation des donnes
..................................................................................
73.4. Dvoiler les requtes de SAS/ACCESS
......................................................................
93.5. Attention aux fonctions et options SAS
....................................................................
103.6. Loption
DBCOMMIT..............................................................................................
123.7. Utilisation optimale de la mmoire tampon
..............................................................
143.8. Loption SASTRACE? A utiliser en connaissance de cause !
........................................ 173.9. Loption
DBIDIRECTEXEC pour soumettre directement votre requte SQL la base
dedonnes.
........................................................................................................................
193.10. Optimiser vos
jointures..........................................................................................
203.11. Utiliser des tables volatiles
.....................................................................................
24
4. Comment forcer lutilisation du SQL Passthrough Explicit dans
SAS Enterprise Guide 6.1 ? .. 275. Liens utiles et rfrences
............................................................................................
296. Conclusion
................................................................................................................
30
Caractristiques :
Catgories : SAS/AccessOS : Windows, UnixVersion : SAS 9.4Vrifi
en dcembre 2013
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
2/30
Septembre 2013 - 2 -
1. INTRODUCTION
Avant de sattaquer au sujet central de cet article, un rapide
rappel du fonctionnement du moduleSAS/Access peut savrer
ncessaire.Les modules SAS/ Access sont des solutions out-of-the-box
fournissant une connectivit entre SAS et des sources de donnes
tiers, via le client du SGBD, y
compris les data warehouse appliances, Hadoop Distributed File
System et les bases de donnesrelationnelles (Oracle, Sybase, Mysql
).
Le schma ci-dessous montre les interactions entre les clients
SAS, le module SAS/ACCESS et unebase de donnes Oracle. Ce schma
permet davoir une vision globale des changes.
SASEnterpriseGuide
SASBase
Workspace Server
SAS/ACCESSInterface to Oracle
SAS/ACCESSInterface to Oracle
Client Oracle
Client Oracle
Serveur Oracle
Schema
Schema
Schema
Clients SAS Application
Server
Data Server
[tables]
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
3/30
Septembre 2013 - 3 -
La procdure DBLOAD nest pas disponible pour tous les modules
SAS/ACCESS,
Client et serveur peuvent tre localiss sur la mme machine
physique, Les librairies clientes, ncessaires au fonctionnement du
module SAS/ACCESS, sont fournies
par le fournisseur de la base de donnes.
Module SAS/ACCESS
Engine
DBMSCommunication
module
InterfaceView engine
Pass-ThroughFacility
ProcdureACCESS
ProcdureDBLOAD
Librairiescliente
Base
dedonnes
CLIENT CLIENT SERVEUR
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
4/30
Septembre 2013 - 4 -
2. SE CONNECTER A UNE BASE DE DONNEES
2.1. Jeu de donnes utilis
Pour illustrer cet article nous allons travailler sur une base
de donnes Oracle 10G hberge sur unserveur AIX. Nous utiliserons une
table volumineuse que nous avons cre dans le schma scott
Table visiteurs . Cette table compte 270 000 lignes.
2.2. SQL PASS-THROUGH implicite et tape DATA
Vous pouvez utiliser SAS/ACCESS pour lire, mettre jour, insrer
et supprimer des donnes d'unobjet SGBD comme s'il s'agissait d'un
ensemble de donnes SAS. Voici comment faire :
1.
Activation d'une interface SAS/ACCESS en spcifiant un nom de
moteur SGBD et les optionsde connexion appropries dans une
dclaration de LIBNAME,
2. Vous interagissez avec les donnes comme vous le faites avec
nimporte quelle bibliothqueSAS classique,
3.
SAS/ACCESS gnre, si possible, des instructions SQL qui sont
l'quivalent des procdures
SAS que vous avez saisi,4. SAS/ACCESS soumet le SQL gnr pour le
SGBD.
Il existe 2 mthodes pour accder aux tables contenues dans une
source de donnes tiers. Lunedelleconsiste crer une bibliothque en
utilisant linstructionLIBNAME.Cette syntaxe est familire aux
utilisateurs de SAS.
Si vous utilisez SAS en version 64 bits,il est ncessaire que
votre clientdaccs Base de Donnes (librairies) soit en version 64
bits.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
5/30
Septembre 2013 - 5 -
Dans lexemple ci-dessous, nous crons une bibliothque pour nous
connecter oracle :
LIBNAMEoraloc1 ORACLE PATH=ORA10LOCHES SCHEMA=SCOTT USER=scott
PASSWORD=tiger;
NOTE: Libref ORALOC1 was successfully assigned as follows:
Engine: ORACLEPhysical Name: ORA10LOCHES
Avec une dclaration LIBNAME, vous pouvez utiliser votre bote
outils SAS et manipuler vosdonnes via l'tape DATA et les procdures
habituelles comme si vous travailliez avec des donnesSAS
ordinaires.
En effet, le module SAS/ACCESS traduit les instructions SAS en
commandes SQL directementinterprtables par la base de donnes. Si le
code SAS ne peut pas tre traduit en SQL, le contenu dela table est
rapatri dans SAS et le code excut directement par le moteur
SAS.
La connexion se fait lexcution du LIBNAME. Elle reste valide
tant que la session est en cours et
que le LIBNAME nest pas effac. Pour en savoir plus sur le
fonctionnement des connexions et dessessions avec SAS/ACCESS vous
pouvez lire larticle Comprendre les diffrents types de
connexion
lors de la dfinition d'une bibliothque d'accs une base de
donnes
2.3. SQL PASS-THROUGH explicite
Le SQL Pass-Through explicite est une autre faon d'tablir une
connexion la base de donnesexterne.
procsql;connecttooracle(user=scott password=tiger
path=ORA10LOCHES);
createtablevisiteurs as select* fromconnection to oracle(select*
fromvisiteurs);quit;
Dans ce cas, le code SQL est envoy tel quel la base de donnes,
ce qui ncessite lcriture dunerequte SQL comprhensible par le
SGBD.
http://www.sas.com/offices/europe/france/services/support/articles/US2013_Q2_Gestion_des_parametres_libname_Oracle.htmlhttp://www.sas.com/offices/europe/france/services/support/articles/US2013_Q2_Gestion_des_parametres_libname_Oracle.htmlhttp://www.sas.com/offices/europe/france/services/support/articles/US2013_Q2_Gestion_des_parametres_libname_Oracle.htmlhttp://www.sas.com/offices/europe/france/services/support/articles/US2013_Q2_Gestion_des_parametres_libname_Oracle.htmlhttp://www.sas.com/offices/europe/france/services/support/articles/US2013_Q2_Gestion_des_parametres_libname_Oracle.html
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
6/30
Septembre 2013 - 6 -
2.4. Choisir entre implicite et explicite.
Il ny a pas de formule magique pour affirmer quune mthode est
meilleure que lautre.Cela dpend des circonstances, des
connaissances et de lexprience du dveloppeur, notamment
dans le langage SQL.
Cependant quelques points sont prendre en compte afin de choisir
lamthode en fonction :
Utilisez le SQL Pass-through explicite lorsque :
Vous avez besoin dutiliser une requte SQL spcifique la basede
donnes utilise,
Vous voulez garder un contrle sur les requtes SQL envoyes la
base de donnes,
Vous voulez vous assurer que le code soit bien excut par leDBMS,
et non rapatri ct SAS par souci de performance
Utilisez le SQL Pass-through implicite et ltape DATA
lorsque:
Vos besoins sont complexes pour grer la base de
donnes(utilisation du macro-langage, des array, de boucles,
defonctions sans quivalence par le SGBD) ou non grables par
SQL(boucles, conditions, proc tabulate, graphiques, ODS )
Vous tes plus laise avec le langage SAS Base Vos programmes
doivent tre capables de se connecter
diffrentes base de donnes (Oracle,Mysql,DB2) avecseulement des
modifications mineures.
Les donnes du SGBD ont une taille permettant le travail dansce
mode
Enfin, voici un tableau rcapitulatif de la syntaxe utiliser (ces
3exemples sont quivalents) :
SQL Pass-through explicite SQL Pass-through implicite Data
step
procsql;connecttooracle(user=scottpassword=tigerpath=ORA10LOCHES);
createtablevisiteurs asselect* fromconnection tooracle(select*
fromvisiteurs);quit;
procsql;createtablevisiteurs asselect*
fromoraloc1.visiteurs;
datavisiteurs;setoraloc1.visiteurs;run;
Pour plus dinformations, je vous invite visiter laUsage NOTE
41616qui donne des exemples decode pour vous connecter une base
Oracle en utilisant SAS/ACCESSinterface to Oracle.
Vous serez oblig
de mixer le langage
SAS Base et SQL.
Le langage SAS Base
est utilis pour vos
besoins de
reporting ou encore
pour crer du codecomplexe (macro,
array, if, boucle).
Autant de choses
que les bases de
donnes ne savent
pas faire. Noubliez
pas que ltape
DATA offre bien
plus de possibilits
que le SQL.
http://support.sas.com/kb/41/616.htmlhttp://support.sas.com/kb/41/616.htmlhttp://support.sas.com/kb/41/616.htmlhttp://support.sas.com/kb/41/616.html
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
7/30
Septembre 2013 - 7 -
3. OBTENIR LES MEILLEURS PERFORMANCE POSSIBLE
Dans le processus d'optimisation, de nombreux aspects sont
considrer.
Nous allons nous attarder sur les principaux acclrateurs de
performance suivants :
Rduire le volume de donnes transfres entre SAS et la base de
donnes
Transmettre rapidement des donnes ncessaires Optimiser le
traitement dans la base de donnes.
3.1. Limiter le nombre de lignes et de colonnes retournes
Limiter le nombre de lignes retournes par le SGBD est un facteur
de performance extrmementimportant, car il faut viter que trop de
donnes transitent sur le rseau. Autant que possible,prcisez des
critres de slection limitant le nombre de lignes que la base de
donnes retourne SAS. Utilisez la clause WHERE pour rcuprer un
sous-ensemble des donnes.
Si vous tes uniquement intress par les premires lignes d'une
table, pensez ajouter l'optionOBS=. Cette option permet de limiter
le nombre de lignes transitant travers le rseau, ce quiamliore
considrablement les performances lors de la lecture de grandes
tables. Elle est galementutile dans la phase dcriture du programme,
pour tester la validit de son code sans chercher rcuprer toutes les
observations.
Toujours pour limiter la taille des donnes, vous pouvez galement
agir sur le nombre de colonnes.Pour cela, vous pouvez utiliser
linstruction SELECT de la procdure SQL, ou par les
instructionsDROP/KEEP de ltape DATA
3.2. Faire raliser le traitement par la base de donnes
Pour une efficacit optimale, cela parait naturel de dire que
toutes les oprations doivent treralises lintrieur de la base de
donnes. Mais dans la ralit, la mise en uvre nest pas toujoursaise
et ne savre pas toujours simple.
En effet, la solution de facilit consiste se dire quen utilisant
le SQL pass-through explicite,nous avons un contrle total sur les
requtes SQL envoyes la base de donnes. Nanmoins celaimplique que
nous ne changions pas de base de donnesdans le cycle de vie de
votre projet etsurtout cela implique galement davoir des besoins
simples. Comme indiqu dans le prcdentchapitre, il est ncessaire de
jongler avec les deux mthodes en fonction du besoin et du
traitementque lon souhaite mettre en uvre.
La syntaxe SQL, bien que standard, peut varier dune base de
donnes une autre. Certainesspcificits dans la syntaxe dune requte
SQL peuvent tre interprtes correctement parun moteur de base de
donnes mais pas par un autre.Par exemple, la soustraction de
deux
SELECT scrit SELECT MINUS SELECT sous Oracle et SELECT WHERE NOT
EXISTS sous SQL Server.
Dans le cadre dune migration dun SGBD vers un autre , cela
ncessiterait une passe complte surle code SAS et, dans le pire des
scenarios, une rcriture de certaines requtes SQL.
3.3. Tri et indexation des donnes
Trier des donnes est gourmand en ressources, que ce soit en
utilisant la procdure SORT ou uneclause ORDER BY. Triez les donnes
uniquement lorsque cela est ncessaire pour votre programme.
Si vous utilisez une instruction BY, il est recommand dassocier
votre BY avec une colonne indexe.En effet, lors de lutilisation dun
BY, le moteur SAS/ACCESS va transformer ce BY en une clauseORDER BY
comprhensible par la base de donnes (sous condition que les
ventuelles fonctions
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
8/30
Septembre 2013 - 8 -
ajoutes soit interprtables). La clause ORDER BY va trier les
donnes avant de les retourner SAS.Si votre table est volumineuse,
ce tri peut nuire aux performances. Utilisez une variable basesur
une colonne indexe afin de rduire cet impact ngatif.
Cependant, le choix dindexer une table ne se fait pas la lgre.
La cration d'index utilisede l'espace mmoire dans la base de
donnes, et, tant donn qu'il est mis jour chaquemodification de la
table laquelle il est rattach, cela peut alourdir le temps de
traitement du SGBDRlors de la saisie de donnes. L'entretien d'un
index sur une colonne a galement un impactsur les critures de cette
colonne. Aussi, il faut que la cration d'index soit justifie et que
lescolonnes sur lesquelles il porte soient judicieusement choisies,
notamment pour minimiser lesdoublons.
Pour illustrer limpact dun indexsur les performances, nous
allons utiliser une PROC SORT pourclasser une table. Cette table,
visiteurs_ville, contient 10 millions de lignes. Sa structure
est
la suivante :
Id Id_visiteur Code postal
Lid _visiteur est mettre en relation avec la table visiteur
utilise dans lensemble de cet article.
Soumettons le code suivant :
procsortdata=oraloc1.visiteurs_ville
out=testA;byid_visiteur;
run;
NOTE: Sorting was performed by the data source.
NOTE: There were 10353000 observations read from the data set
ORALOC1.VISITEURS_VILLE.
NOTE: The data set WORK.TESTA has 10353000 observations and 3
variables.
NOTE: PROCEDURE SORT used (Total process time):
real time 59.42 secondesuser cpu time 4.32 secondes
system cpu time 0.92 secondes
memory 2744.59k
OS Memory 15940.00k
Timestamp 29/08/2013 12:58:53 PM
Step Count 10 Switch Count 1036
Le temps dexcution est de 59,42 secondes.
Maintenant, positionnons un index sur cette table. Lindex est
ajout sur le champ id_visiteur :
Si nous resoumettons le code, le temps dexcution passe de 59,42
secondes 36,07 secondes :
NOTE: Sorting was performed by the data source.
NOTE: There were 10353000 observations read from the data set
ORALOC1.VISITEURS_VILLE.NOTE: The data set WORK.TESTB has 10353000
observations and 3 variables.
NOTE: PROCEDURE SORT used (Total process time):
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
9/30
Septembre 2013 - 9 -
real time 36.07 secondes
user cpu time 3.52 secondes
system cpu time 0.46 secondes
memory 2744.59k
OS Memory 15940.00k
Timestamp 29/08/2013 01:00:02 PM
Step Count 11 Switch Count 1036
3.4. Dvoiler les requtes de SAS/ACCESS
SAS propose loptionSASTRACEpermettant dindiquerdans le journal
SAS la requte envoye la
base de donnes. Cumule avec loption FULLSTIMER, loption
SASTRACEse rvle dune grandeutilit.
Surtout si le temps de traitement dun programme vous semble
anormalement lent.
Selon les paramtres utiliss, loption SASTRACEdonne un rsultat
diffrent dans le journal SAS.
Gnralement, nous utilisons la syntaxe suivante :
optionssastrace=',,,d'sastraceloc=saslog nostsuffix;
Loption SASTRACE peut prendre dautres paramtres donnant ainsi
accs plus ou moinsdinformations.Reportez-vous la documentation SAS
pour obtenir des dtails sur ces paramtres.
Vous connaissez prsent cette option, reprenons donc les
instructions SAS dtailles dans la partie2 et observons le journal
SAS maintenant que SASTRACE est positionne :
0.5
1.5
2.5
Sans INDEX Avec INDEX
Tempsensecondes 1 minute
37secondes
Il faut savoir que mme en prsence d'un index, l'usage de ce
dernier n'est pas
systmatique. Pour un nombre de lignes retourner important,
l'usage d'un indexest plus coteux qu'un parcours complet de la
table. C'est donc trs courant queles index ne soient pas utiliss ds
que le moteur SQL estime que le nombre delignes rcuprer dpasse une
certaine valeur.
Lorsque vous utilisez la procdure SORT, sachez que les rgles de
tri de SAS et duSGBD peuvent tre diffrentes. Utilisez loption SAS
SORTPGM pour spcifier lesrgles appliquer (SORTPGM System Option:
Windows)
http://support.sas.com/documentation/cdl/en/hostwin/64812/HTML/default/viewer.htm#n13ydoqgm84cl5n126u373x8kb1a.htmhttp://support.sas.com/documentation/cdl/en/hostwin/64812/HTML/default/viewer.htm#n13ydoqgm84cl5n126u373x8kb1a.htmhttp://support.sas.com/documentation/cdl/en/hostwin/64812/HTML/default/viewer.htm#n13ydoqgm84cl5n126u373x8kb1a.htmhttp://support.sas.com/documentation/cdl/en/hostwin/64812/HTML/default/viewer.htm#n13ydoqgm84cl5n126u373x8kb1a.htm
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
10/30
Septembre 2013 - 10 -
SQL Pass-through explicite SQL Pass-through implicite Data
step
procsql;connecttooracle(user=scottpassword=tigerpath=ORA10LOCHES);
createtablevisiteurs asselect* fromconnection tooracle(select*
fromvisiteurs);
ORACLE_1: Prepared: on
connection 1
select * from visiteurs
ORACLE_2: Executed: on
connection 1
SELECT statement ORACLE_1
procsql;createtablevisiteurs asselect*
fromoraloc1.visiteurs;
ORACLE_3: Prepared: on
connection 0
SELECT * FROM VISITEURS
ORACLE_4: Executed: on
connection 0
SELECT statement ORACLE_3
datavisiteurs;setoraloc1.visiteurs;run;
ORACLE_5: Prepared: onconnection 0
SELECT * FROM VISITEURS
ORACLE_6: Executed: on
connection 0
SELECT statement ORACLE_5
Dans les 3 exemples ci-dessus la requte SQL envoye la base de
donnes est identique (SELECT *FROM VISITEURS)
Pour dsactiver les logs SAS/ACCESS utilisez la syntaxe suivante
:
optionssastrace=off;
3.5. Attention aux fonctions et options SAS
Lorsque vous utilisez des fonctions SAS pour extraire des donnes
de tables contenues dans unebase de donnes, il arrive que les
performances obtenues lors de lextraction se trouvent trs
loignes de celles espres.
Lutilisation de loption SASTRACEpour voir lenvers du dcor savre
alors essentielle.
Excutons le programme suivant :
/* Sans condition */
procsql;connecttooracle(user=scott
password=tigerpath=ORA10LOCHES);createtableextract_navigateur
asselect* fromconnection to Oracle(select* fromvisiteurs);quit;
dataextract_navigateur;setoraloc1.visiteurs;run;
procsql;createtableextract_navigateur asselect*
fromoraloc1.visiteurs;
quit;
/* Avec la condition where trim(navigateur)='ie' */
procsql;
connecttooracle(user=scott password=tigerpath=ORA10LOCHES);
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
11/30
Septembre 2013 - 11 -
createtableextract_navigateur asselect* fromconnection to
Oracle(select* fromvisiteurs wheretrim(navigateur)='ie');quit;
dataextract_navigateur;
setoraloc1.visiteurs;wheretrim(navigateur)='ie';run;
procsql;createtableextract_navigateur asselect*
fromoraloc1.visiteurs
wheretrim(navigateur)='ie';quit;
Et observons, pour chaque mthode, le temps dexcution (en
secondes) :
NombredeRsultats
SQL Pass-through
explicite
SQL Pass-through
implicite DATA STEP
Total Oracle Total Oracle Total Oracle
Sans condition 267 148 5,59 4,47 4,97 4,10 5,35 4,29
Avec la conditionwhere
trim(navigateur)='ie'87 934 1,75 1,29 5,08 4,3 5,70 4,18
La diffrence est flagrante mais deux questions se posent :
Pourquoi, le SQL Pass-through explicite est plus rapide que
limplicite, lorsque les rsultatssont filtrs avec trim ? ( 1,75
secondes contre 5,70 secondes en implicite)
Pourquoi, en Pass-through implicite, le temps dexcution du
traitement est similaire bienque nous nayons que87 934 rsultats au
lieu des 267 148 que contient la table visiteurs ?
Loption SASTRACEpeut nous aider lucider ce mystre.
Aprs avoir positionn loption selon la syntaxe suivante :
optionssastrace=',,,d'sastraceloc=saslog nostsuffix;
Relanons notre programme et examinons le journal SAS :
dataextract_navigateur;setoraloc1.visiteurs;
wheretrim(navigateur)='ie';run;
ORACLE_8: Prepared: on connection 0
SELECT "ID", "CODE_POSTAL", "ADRESSE_IP", "NAVIGATEUR",
"RESOLUTION", "OS", "LANGUE",
"MOIS",
"ANNEE" FROM VISITEURS
ORACLE_9: Executed: on connection 0
SELECT statement ORACLE_8
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
12/30
Septembre 2013 - 12 -
Effectuons maintenant le mme test mais en utilisant, cette
fois-ci, la fonction STRIP :
dataextract_navigateur;setoraloc1.visiteurs;
wherestrip(navigateur)='ie';run;
ORACLE_36: Prepared: on connection 0
SELECT "ID", "CODE_POSTAL", "ADRESSE_IP", "NAVIGATEUR",
"RESOLUTION", "OS", "LANGUE", "MOIS",
"ANNEE" FROM VISITEURS WHERE ( TRIM("NAVIGATEUR") = 'ie' )
ORACLE_37: Executed: on connection 0
SELECT statement ORACLE_36
NOTE: L'tape DATA used (Total process time):
real time 1.79 secondes
user cpu time 0.59 secondes
system cpu time 0.34 secondes
memory 368.22k
OS Memory 6768.00k
Remplacer TRIM par la fonction STRIP est beaucoup plus efficace.
SAS remplace le STRIP par lafonction SQL TRIM. La requte avec une
clause WHERE est envoye Oracle et cela se ressent surle temps
dexcution.La cration de la table a demand 1,79 seconde contre 5,70
secondessila fonction TRIM est utilise.
3.6. Loption DBCOMMIT
La clause WHERE nest PAS envoye Oracle et lensemble des
donnes(270 000 lignes) est rapatri ct SAS, laissant le traitement
de la fonction TRIM SAS.
Cet change de donnes a un cot et se ressent sur le temps
dexcution de ltape.
Lorsque vous excutez des requtes en SQL Pass-through implicite,
toutes lesfonctionnalits dfinies dans la norme American National
StandardsInstitute (ANSI) SQL ne sont pas supportes. Leffort de
dveloppement desfonctionnalits SQL par SAS a t port sur la capacit
dinterprter de faon la plusperformante possible les requtes SQL. En
consquence, certaines dentre ellesn'ont pas encore t mises en uvre
dans la PROC SQL.Des fonctions SASpeuvent tre utilises pour
retrouver des fonctionnalits quivalentes cellesprsentes dans la
norme ANSI SQL.
La documentation donne la liste des fonctions que SAS/Access
envoie au SGBD. Parexemple, la liste pour SAS/Access to Oracle est
donne dans la documentationSAS/ACCESS(R) 9.4 for Relational
Databases: Reference.
Lorsque vous utilisez des tapes DATA pour traiter les donnes
dune base dedonnes et que les temps dexcution vous semble longs,
utilisez loptionSASTRACEpour dterminer la requte SQL envoye par
SAS.
http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a003113612.htmhttp://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a003113612.htmhttp://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a003113612.htm
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
13/30
Septembre 2013 - 13 -
Loption DBCOMMIT dfinit le nombre de lignes insres dans la base
de donnes lorsquunetransaction est valide. Pour comprendre comment
cela fonctionne, regardons ce qui se passe en coulisses lors de
l'insertion d'une ligne dans la base de donnes.
En effet, pour insrer une ligne dans une table de base de donnes
il y a beaucoup d'activits qui sedroulent dans les coulisses afin
de finaliser la transaction. Une transaction est un ensemble
cohrentde modifications faites sur les donnes. Une transaction est
soit entirement annule soitentirement valide. Lordre SQL COMMIT
termine et valide (crit) la transaction. Lordre SQLROLLBACK termine
et annule la transaction. Tant qu'il n'y a pas eu COMMIT, seul
l'utilisateur courantvoit ses mises jour.
Le journal des transactions de la base de donnes enregistre
toutes les modifications apportes auxdonnes pour assurer l'intgrit
des donnes.
Pour information, voici les proprits dune transactionvalide
:
Atomicit Transaction s'excute entirement ou pas du
tout.Consistance Cohrence smantique, une transaction assure
lintgrit des donnes.
Isolation Pas de propagation de rsultats non valids et pas
d'interfrence entre les donnes.
Durabilit Persistance des effets valids, les effets d'une
transaction valide ne sont jamaisperdus.
Dans SAS, par dfaut, la transaction est valide tous les 1000
enregistrements. En fonction de lavaleur de DBCOMMIT,le temps de
traitement est plus ou moins long, car le moteur doit valider
latransaction plus ou moins souvent.
Pour dmontrer le gain de temps, utilisons le code suivant en
variant la valeur de loptionDBCOMMIT:
dataoraloc1.
Visiteurs_test(dbcommit=100);setoraloc1.visiteurs;
run;
Par dfaut, la transaction est valide tous les 1000
enregistrements. Nous avons dbut les tests 10 afin de juger de
limpact de loption.
INSERT UPDATE UPDATE DELETE
Transaction
Commit Commit
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
14/30
Septembre 2013 - 14 -
Valeur de loption DBCOMMIT Temps dexcution en secondes
10 310 secondes
100 65 secondes
1000 (valeur par dfaut) 44 secondes
5000 37 secondes
10000 35 secondes
Comme vous pouvez le constater la valeur par dfaut est
pertinente. Dans certains cas, comme celui-ci, positionner une
valeur plus grande pour le DBCOMMIT peut amliorer les
performances
denviron 16%par rapport la valeur par dfaut.
3.7. Utilisation optimale de la mmoire tampon
Temps en secondes
Valeur de loptionDBCOMMIT
Vous pourriez tre tent de positionner loption DBCOMMIT 1 million
par exemplemais cela ne serait pas sans consquence. En effet, lors
dune transaction, leschamps modifis sont verrouills. Plus le nombre
de verrous positionns augmente,plus les ressources ncessaires la
gestion de ces verrous augmentent. C'est danscet esprit que vous
devez rgler la valeur de DBCOMMIT pour quelle soitsuffisamment
grande pour limiter le processus de validation, mais pas trop
grandeafin dviter les problmes de transaction trop longue
(verrouillage, problmed'espace dans le journal de trans
action).
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
15/30
Septembre 2013 - 15 -
La mmoire tampon est une zone de mmoire utilise pour entreposer
temporairement des donnes.Ainsi, lors de lexcution dun traitement
SAS, les donnes envoyes vers la base de donnes sontstockes dans des
mmoires tampon en attente de leur envoi effectif.
Dans SAS, la taille de cette mmoire tampon est dfinie par trois
options : INSERTBUFF,UPDATEBUFFet READBUFF.
Loption INSERTBUFFspcifie le nombre de lignes prendre en compte
pour commande dinsertiondans ma base de donnes.
Sous Oracle par exemple, la valeur de cette option est
positionne 1. Comme nous lavons vu dansle chapitre 3, cela signifie
que, durant une insertion en base de donnes, si nous importons 10
000lignes, le module SAS/ACCESS excute 10 000 requtes de faon
squentielle.
Il est donc primordial dajuster ce paramtre afin doptimiser
lefficacit de son traitement. La valeuroptimale de cette option
varie en fonction de facteurs tels que la mmoire disponible. Vous
pourriezavoir besoin d'exprimenter des valeurs diffrentes afin de
dterminer la meilleure.
Vous trouverez plus de dtails sur ces options ladresse
suivante:
http://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#n1dsqxfjr
3yjegn1lb5uqmmvbegu.htm
Mmoiretampon
Alimentation de lammoire tampon
Lecture des donnesdans la table A
Une fois la limitede la mmoire
tampon atteinte,
envoi de la requtedinsertion dans latable B
http://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#n1dsqxfjr3yjegn1lb5uqmmvbegu.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#n1dsqxfjr3yjegn1lb5uqmmvbegu.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#n1dsqxfjr3yjegn1lb5uqmmvbegu.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#n1dsqxfjr3yjegn1lb5uqmmvbegu.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#n1dsqxfjr3yjegn1lb5uqmmvbegu.htm
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
16/30
Septembre 2013 - 16 -
Pour dmontrer le gain de temps, utilisons le code suivant en
variant la valeur de loptionINSERTBUFF :
dataoraloc1.
Visiteurs_test(insertbuff=100);setoraloc1.visiteurs;
run;
INSERTBUFFest un nombre entier allant de 1 2 147 483 648.
Diffrentes valeurs de INSERTBUFFont t testes pour voir quel impact
cela aurait sur l'tape DATA prcdente :
Valeur de loption INSERTBUFF Temps dexcution en secondes
1 140 secondes
5 40 secondes
10 (valeur par dfaut) 24 secondes
25 17 secondes
50 11 secondes
100 11 secondes
1 000 7 secondes
1 000 000 9 secondes
Temps en secondes
Valeur de loptionINSERTBUFF
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
17/30
Septembre 2013 - 17 -
Dans notre test, l'augmentation de la valeur de INSERTBUFF de 1
25 a eu un impact significatif surles performances. Il est
important de noter que les rsultats obtenus illustrent une mthode
de testset non pas des rsultats absolus, la valeur optimale dun
paramtre dpendant du code et desdonnes.
Le gain de performance est galement prsent lors de la mise jour
des donnes de la table, vialinstruction SQL UPDATE et la
configuration de loption UPDATBUFF.
Valeur de loptionUPDATEBUFF
Temps dexcution en secondes
1(valeur par dfaut) 42 secondes
10 000 12 secondes
25 000 6 secondes
3.8. Loption SASTRACE? A utiliser en connaissance de cause !
Vous tes maintenant convaincu de limportance de loption
SASTRACE.
Faut-il alors positionner cette option, cote que cote, dans tous
vos programmes ?
Non.
Cette option est manier avec prcaution.Une utilisation abusive
peut avoir des impacts non ngligeables sur les performances, car le
tempsdcriture des messages dans la log peut devenir plus long que
lexcution de la requte elle-mme.
Excutons le programme suivant :
optionssastrace=off;
dataoraloc1. Visiteurs_lot1;set
oraloc1.visiteurs(obs=10000);run;
Les 10000 observations ont t insres dans la table Oracle
Visiteurs_lot1 en 1,24 seconde.
Maintenant, excutons la mme tape DATA mais en ayant au pralable
positionn une optionSASTRACE.
optionssastrace=',,,d'sastraceloc=saslog nostsuffix;
Avec loption SASTRACE active, la cration de la table a ncessit
6,49 secondes!
Loption UPDATEBUFF nest disponible que pour les connexions aux
bases dedonnes Oracle.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
18/30
Septembre 2013 - 18 -
Pourquoi ?
La rponse dans le journal SAS :
ORACLE_22: Executed: on connection 2
CREATE TABLE VISITEURS_LOT1(ID NUMBER (22),CODE_POSTAL NUMBER
(13),ADRESSE_IP VARCHAR2
(50),NAVIGATEUR VARCHAR2 (50),RESOLUTION VARCHAR2 (50),OS
VARCHAR2 (50),LANGUE VARCHAR2
(20),MOIS NUMBER (13),ANNEE NUMBER (13))
ORACLE_23: Executed: on connection 0
SELECT statement ORACLE_20
ORACLE_24: Prepared: on connection 2
INSERT INTO VISITEURS_LOT1
(ID,CODE_POSTAL,ADRESSE_IP,NAVIGATEUR,RESOLUTION,OS,LANGUE,MOIS,ANNEE)
VALUES
(:ID,:CODE_POSTAL,:ADRESSE_IP,:NAVIGATEUR,:RESOLUTION,:OS,:LANGUE,:MOIS,:ANNEE)
Le journal SAS indique dabord la requte de cration de la table
puis la requte dinsertion.Cependant, lors dune insertion dans une
table Oracle, les insertions sont ralises, par dfaut, pargroupe de
10 observations. Toutes les 10 observations, les donnes insrer sont
envoyes labase de donnes.
Le problme est quavec loption SASTRACE active le journal SAS est
vite pollu par les tracesdinsertion de ces paquets de 10:
ORACLE_25: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE_26: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE_27: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE_28: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE: *-*-*-*-*-*-* COMMIT *-*-*-*-*-*-*
.
.
.
.
ORACLE_25: Executed: on connection 2INSERT statement
ORACLE_24
ORACLE_26: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE_27: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE_28: Executed: on connection 2
INSERT statement ORACLE_24
ORACLE: *-*-*-*-*-*-* COMMIT *-*-*-*-*-*-*
Ainsi, le journal SAS fait plusieurs milliers de lignes. Nous
avons des EXECUTE toutes les 10observations et des COMMIT toutes
les 1000 observations.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
19/30
Septembre 2013 - 19 -
Il est facile dimaginer limpact si nous travaillons sur une
table contenant plusieurs millionsdenregistrement.
3.9. Loption DBIDIRECTEXEC pour soumettre directement
votrerequte SQL la base de donnes.
Dernire option SAS qui nous intresse, loption DBIDIRECTEXEC.
Avec cette option, les instructionsDELETE et CREATE TABLE sont
transmises directement au SGBD afin que le traitement soit
beaucoupplus efficace.
Par dfaut, cette option nest pas active.
optionsNODBIDIRECTEXEC;
dataoraloc1.NODBIDIRECTEXEC;setoraloc1.visiteurs;
run;
procsql;createtableoraloc1.NODBIDIRECTEXEC_SQL
asSELECT*fromoraloc1.visiteurs;
quit;
Dans les deux cas ci-dessus le temps dexcution est de 30
secondes.Le moteur SAS/ACCESS envoie les instructions suivantes la
base de donnes :
1. SELECT * FROM VISITEURS
2.
CREATE TABLE NODBIDIRECTEXEC .
3.
INSERT INTO NODBIDIRECTEXEC ..
En positionnant loption, les gains sont importants.
optionsDBIDIRECTEXEC;
En effet, avec une tape DATA, on ne constate aucune amlioration
du temps de traitement :
options DBIDIRECTEXEC;
data oraloc1.DBIDIRECTEXEC_DATA;
set oraloc1.visiteurs;
run;NOTE: L'tape DATA used (Total process time):
real time 29.43 secondes
Utilisez loption SASTRACElorsque vous tes dans la phase de
dveloppementde votre programme. Si votre programme est destin tre
excut en modebatch ou que les performances ne sont pas au
rendez-vous, vrifiez quune
option SASTRACE ne sest pas glisse dans votre code.
Limitez, autant que vous le pouvez, le nombre dobservations
lorsque vousdveloppez ou dbuggez avec loption SASTRACEactive.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
20/30
Septembre 2013 - 20 -
user cpu time 4.83 secondes
system cpu time 2.65 secondes
memory 430.48k
OS Memory 6768.00k
Timestamp 18/07/2013 15 h 24
Cependant, avec une PROC SQL, le temps dexcution passe 1,5
seconde :
create table oraloc1.DBIDIRECTEXEC as
SELECT *from oraloc1.visiteurs;
quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 1.64 secondes
user cpu time 1.04 secondes
system cpu time 1.01 secondes
memory 370.22k
OS Memory 6768.00k
Timestamp 18/07/2013 15 h 26
Dans le cas de lutilisation dune PROC SQL associe loption
DBDIRECTEXEC, le moduleSAS/ACCESS envoie une unique requte la base
de donnes :
CREATE TABLE DBIDIRECTEXEC as select * from VISITEURS
3.10. Optimiser vos jointures
Toujours dans lide de limiter les donnes transitant entre la
base de donnes et SAS, loptionMULTI_DATASRC_OPTapporte un gain
significatif lors dune jointure entre deux tables.
Lorsque vous ralisez cette jointure, le moteur SAS/ACCESS va
dterminer la plus petite table desdeux. Il utilisera les donnes de
cette petite table pour filtrer directement la table plus
5
10
20
NODBIDIRECTEXE
DBIDIRECTEXEC
DATAS
TEP
DATAS
TEP
PROCSQL
PROCS
QL
Tempsen
secondes
Loption DBIDIRECTEXEC ne fonctionne pas avec les tapes DATA
Loption DBIDIRECTEXEC fonctionne uniquement lorsque les
instructions SQLne concernent quune seule et mme base de
donnes.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
21/30
Septembre 2013 - 21 -
volumineuse. Cette opration a pour but de limiter directement le
nombre de rsultats retourns parla requte.
Prenons un exemple pour comprendre :
Nous avons une table VIP qui contient une liste de 4 visiteurs
privilgis.Cette table nest pas stocke dans la base de donnes mais
il sagit dune table SAS stocke dans laWORK :
Nous souhaitons extraire de notre table visiteurs Oracle les
informations les concernant.
Aprs avoir positionn loption dans le libname
(MULTI_DATASRC_OPT=in_clause), la requteest la suivante :
procsql;createtablevisiteurs_vip as
selecta.* fromoraloc1.visiteurs a,vip bWHEREa.id=b.id;
quit;
Le moteur SAS/ACCESS excute la requte suivante :
ORACLE_1: Prepared: on connection 1
SELECT * FROM SCOTT.VISITEURS
NOTE: Table WORK.VISITEURS_VIP created, with 8 rows and 9
columns.
76 quit;
NOTE: PROCEDURE SQL used (Total process time):
real time 2.06 secondesuser cpu time 0.48 secondes
system cpu time 0.07 secondes
memory 1697.43k
OS Memory 11176.00k
Timestamp 24/07/2013 03:51:03 PM
Step Count 8 Switch Count 660
Avec loptionMULTI_DATASRC_OPTpositionne sur le LIBNAME, la
requte envoye la base dedonnes est toute autre :
SELECT "ID", "CODE_POSTAL", "ADRESSE_IP", "NAVIGATEUR",
"RESOLUTION", "OS", "LANGUE",
"MOIS",
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
22/30
Septembre 2013 - 22 -
"ANNEE" FROM SCOTT.VISITEURS WHERE ( ("ID" IN ( 132812007729 ,
132844143354 , 132851587292
, 132933250498 ) ) )
NOTE: Table WORK.VISITEURS_VIP created, with 8 rows and 9
columns.
NOTE: PROCEDURE SQL used (Total process time):
real time 0.14 secondesuser cpu time 0.00 secondes
system cpu time 0.01 secondes
Le moteur SAS/ACCESS a modifi la clause WHERE de la requte
envoye afin de limiter le nombrede rsultats retourn SAS.
Le schma ci-dessous prsente en dtail le fonctionnement lorsque
cette option est positionne :
La table SAS contient moins de
lignes que la table Oracle.Le moteur va extraire les idservant
faire la jointure et lesajouter en clause WHERE de la
table la plus volumineuse.
Le moteur SAS/ACCESScompte le nombre de lignesdans les deux
tables (une
table SAS et une tableOracle)
ORACLE_9: Prepared: on connection 0SELECT "ID", "CODE_POSTAL",
"ADRESSE_IP", "NAVIGATEUR", "RESOLUTION", "OS","LANGUE",
"MOIS","ANNEE" FROM SCOTT.VISITEURS WHERE ( ("ID" IN ( 132812007729
, 132844143354, 132851587292 , 132933250498 ) ) )
La requte tant slective viala clause WHERE, les donnesenvoyes
SAS sont limites
et le temps dexcution dutraitement est optimis.
4 lignes
270 000lignes
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
23/30
Septembre 2013 - 23 -
0.5
1.5
2.5
Sans loptionMULTI_DATASRC_OPT
Avec loptionMULTI_DATASRC_OPT
Tempsensecond
es 2,06 secondes
0,14secondes
Le nombre dlments possible dans la clause IN est limit 4500.
Oracle limite la taille de la clause IN 1000 lments. Si la
taille de la pluspetite taille est suprieure 1000, par exemple
4000, le moteur SAS/ACCESSva gnrer 4 clauses IN contenant chacune
1000 lments.
Dans le cadre dune bibliothque OLE DB cette limite est de
255.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
24/30
Septembre 2013 - 24 -
3.11. Utiliser des tables volatiles
Lorsque vous effectuez des oprations complexes en base de
donnes, le moteur de cette base stockeles rsultats de certaines
tapes intermdiaires et requtes SQL dans autant de tables
temporaires.
Ces tables temporaires sont similaires des tables classiques et
utilisent le mme espace destockage. Lutilisation de tables
volatiles permet doptimiser les temps detraitement de
certainesoprations.
Les tables volatiles sont des tables ayant une dure de vie trs
limite. Elles sont cres en mmoireet nexistent que dans la session
qui les a cres. Ds que la session se termine (dconnexionvolontaire
ou accidentelle), les tables volatiles sont supprimes.
Il est possible dexcuter sur ces tables toutes les oprations que
nous excutons sur une tableclassique : insrer des donnes, les
modifier, les supprimer, et bien sr les slectionner.
Dans une mme session, si vous devez effectuer des calculs et/ou
des requtes plusieurs fois sur lemme set de donnes, il est
intressant de stocker ce set de donnes dans une table volatile,
pourtravailler sur cette table. Une fois vos donnes de travail
isoles dans cette table volatile, les requtesvous servant
slectionner les donnes qui vous intressent seront simplifies et
plus rapides.
Pour connaitre la liste des SGBD compatibles avec les tables
volatiles, veuillez-vous reporter la
documentation SAS 9.4
Afin dillustrer lutilisation des tables temporaires nous allons
nous connecter une base TERADATA.
La premire tape consiste initialiser la connexion cette base de
donnes via une instructionLIBNAME.
La premire tape que nous allons mettre en place est de spcifier
une option SASTRACE permettantdavoir le plus dinformations possible
dans le journal SAS:
optionssastrace=(,,d,d) nostsuffix sastraceloc=saslog;
Excutons ensuite linstruction LIBNAME pour crer la bibliothque
:
LIBNAME test_vol TERADATA user="dbc" pw="dbc"
server="192.168.72.130" connection=global
dbmstemp=yes;
Les SASTRACE indiquent la cration dune connexion lactivation de
la bibliothque.
ACCESS ENGINE: Successful physical conn id 0
ACCESS ENGINE: Number of connections is 1
NOTE: Libref TEST_VOL was successfully assigned as follows:
Engine: TERADATA
Physical Name: 192.168.72.130
Nous avons utilis deux options ncessaires lutilisation des
tables volatiles : connexion,positionne GLOBAL,
etdmbstemppositionne YES.Crons maintenant une table volatile dans
la base de donnes en nous basant sur la table
SASsashelp.pricedata:
http://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n0irpkyp22l7vzn1il9lx6f4wmx9.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n0irpkyp22l7vzn1il9lx6f4wmx9.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n0irpkyp22l7vzn1il9lx6f4wmx9.htmhttp://support.sas.com/kb/21/038.htmlhttp://support.sas.com/kb/21/038.htmlhttp://support.sas.com/kb/21/038.htmlhttp://support.sas.com/kb/21/038.htmlhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n0irpkyp22l7vzn1il9lx6f4wmx9.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n0irpkyp22l7vzn1il9lx6f4wmx9.htm
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
25/30
Septembre 2013 - 25 -
PROCAPPENDDATA=sashelp.pricedataBASE=test_vol.volatile ;
RUN;
Les traces gnres par loption SASTRACE nous indiquent que les
tables cres seront des tablesvolatiles. Nous avons galement
lindication que la PROC APPEND partage la connexion cre lors de
linstruction LIBNAME:
ACCESS ENGINE: Entering DBIEXST with table name being
volatile
ACCESS ENGINE: Successful SHARING existing connection id 0
ACCESS ENGINE: Entering dbrload with SQL Statement set to
ACCESS ENGINE: Entering dbrload with SQL Statement set to
CREATE VOLATILE MULTISET
ACCESS ENGINE: Entering dbrload with SQL Statement set to
CREATE VOLATILE MULTISET TABLE "volatile"
Enfin, nous crons une table test, dans la bibliothque WORK,
partir de cette table volatile :
PRO SQL;
createtabletest asSELECT* FROMtest_vol.volatile;
QU T;
Vous trouverez, ci-dessous, un extrait de SASTRACE correspondant
la PROC SQL. Comme pour laPROC APPEND, le moteur SAS/ACCESS
rutilise la connexion id 0 .A la fin de lexcution de la PROC SQL,
la connexion logique est bien termine.
ACCESS ENGINE: Successful SHARING existing connection id 0
ACCESS ENGINE: Entering dbiopen
TERADATA_4: Prepared: on connection 0
SELECT * FROM "volatile"
TERADATA: trnvar()
TERADATA: trnvar(): Number of columns is 28
.
.
.
ACCESS ENGINE: Entering dbiclose
TERADATA: trclose()TERADATA: trforc()
TERADATA: trforc: COMMIT WORK
DBMS_TIMER: summary statistics
DBMS_TIMER: total SQL execution seconds were: 0
DBMS_TIMER: total SQL prepare seconds were: 0
DBMS_TIMER: dbiopen/dbiclose timespan was 0.
ACCESS ENGINE: DBICLOSE open_id 0, connect_id 0
ACCESS ENGINE: Exiting dbiclos with rc=0X00000000
ACCESS ENGINE: Successful logical disconnect, id 0
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
26/30
Septembre 2013 - 26 -
Comparons les temps de traitement pour ces deux tapes dans le
cadre dune utilisation avec etsans passer par une table volatile
(en secondes ) :
Table physique Table volatile
Etape 1 : PROC APPEND15,46 7,12
Etape 2 : PROC SQL4,81 0,07
TOTAL20,27 7,19
5
10
Table physique Table volatile
Tempsensecondes 20,27 secondes
7,19secondes
Lorsque vous utilisez des tables volatiles, il nest pas
ncessaire que lutilisateurpossde les droits dcriture dans la base
de donnes puisque la cration de cettetable seffectue en mmoire.
15
20
25
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
27/30
Septembre 2013 - 27 -
4. COMMENT FORCER LUTILISATION DU SQLPASSTHROUGH EXPLICIT DANS
SASENTERPRISE GUIDE 6.1 ?
Les comportements et concepts dcritsprcdemment sont aussi
applicables SASEnterprise Guide.
Par exemple, l'utilisateur peut utiliser plusieursmthodes pour
soumettre loption SASTRACE ouloption DBIDIRECTEXEC, notamment par
le biais del'option code personnalis , comme le montre lafigure
suivante :
Dans SAS Enterprise Guide, les requtes SQL utilisent par dfaut
le SQL Pass-throughimplicite.
Le Gnrateur de requtes permet de basculer vers du SQL
Pass-through explicite.
Pour accder cette option, effectuez les manipulations suivantes
:
Dans le gnrateur de requtes, cliquez sur le menu Options et
selectionnez Options decette requte
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
28/30
Septembre 2013 - 28 -
Slectionnez Pass-through dans le menu de gauche Cochez loption
Gnrer le code source pour pass-through explicit . Vous pouvez
galement saisir les options de votre choix, comme le nom de la
base de donnes,lutilisateur, le mot de passe.
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
29/30
Septembre 2013 - 29 -
5. LIENS UTILES ET REFERENCES
Pour ceux qui souhaitent approfondir le sujet, voici quelques
rfrences et liens utiles pour vousaccompagner dans vos recherches
:
Levin, Louid. Methods of Storing SAS Data into Oracle Tables.
Proceedings of SUGI 29,May
2004.http://www2.sas.com/proceedings/sugi29/106-29.pdf
SAS 9.4 SQL Procedure Users Guid
:http://support.sas.com/documentation/cdl/en/sqlproc/65065/PDF/default/sqlproc.pdf
Frank Capobianco, (Teradata Corporation) : Explicit SQL
Pass-Through: Is It Still :Useful
?:http://support.sas.com/resources/papers/proceedings11/105-2011.pdf
Liming, Douglas B. Five Ways to Speed Up Your Data Loading Using
SAS/ACCESS forRelational Databases :
http://support.sas.com/resources/papers/proceedings11/103-2011.pdf
Functions that are added via the SQL_FUNCTIONS= option might not
be passed to the
database management system (DBMS)
:http://support.sas.com/kb/42/934.html
SAS/ACCESS(R) 9.4 for Relational Databases: Maximizing Oracle
Performance
:http://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#p0fmgbpjwgbnvkn1sysefnr22fow.htm
SAS/ACCESS(R) 9.4 for Relational Databases: Reference, Second
Edition : PerformanceConsiderations
:http://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n1v1cfazem7dejn1xiq60o8zd45g.htm
Usage Note 23194: When using SAS/ACCESS software, the PROC SQL
queries that are
included in my code do not always pass through to the DBMS
engine. How can I make sure
my queries are passed through?
:http://support.sas.com/kb/23/194.html
Usage Note
41616:
Sample of LIBNAME statement and SQL Pass-Through code to
connect
to Oracle database using SAS/ACCESS Interface to Oracle
:http://support.sas.com/kb/41/616.html
Problem Note47918:The TODAY() and DATEPART() functions might
return a DATETIME
rather than a DATE variable when you query a database management
system (DBMS) table:http://support.sas.com/kb/47/918.html
Passing SAS Functions to Oracle
:http://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#p0f64yzzxbsg8un1uwgstc6fivjd.htm
A Guide to Efficient PROC SQL Coding
:http://support.sas.com/resources/papers/sgf09/336-2009.pdf
Problem Note 47859: READBUFF values that are set to more than
10,000 are truncated to10,000 by DataDirect drivers
:http://support.sas.com/kb/47/859.html
Graldine Cade-Deschamps (mars 2012) : SAS In-Database : Quand le
traitement SASs'excute dans le SGDB
:http://www.sas.com/offices/europe/france/US2012_Q1_InDatabase.html
http://www2.sas.com/proceedings/sugi29/106-29.pdfhttp://www2.sas.com/proceedings/sugi29/106-29.pdfhttp://www2.sas.com/proceedings/sugi29/106-29.pdfhttp://support.sas.com/documentation/cdl/en/sqlproc/65065/PDF/default/sqlproc.pdfhttp://support.sas.com/documentation/cdl/en/sqlproc/65065/PDF/default/sqlproc.pdfhttp://support.sas.com/resources/papers/proceedings11/105-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/105-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/105-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/103-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/103-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/103-2011.pdfhttp://support.sas.com/kb/42/934.htmlhttp://support.sas.com/kb/42/934.htmlhttp://support.sas.com/kb/42/934.htmlhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#p0fmgbpjwgbnvkn1sysefnr22fow.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#p0fmgbpjwgbnvkn1sysefnr22fow.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#p0fmgbpjwgbnvkn1sysefnr22fow.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n1v1cfazem7dejn1xiq60o8zd45g.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n1v1cfazem7dejn1xiq60o8zd45g.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n1v1cfazem7dejn1xiq60o8zd45g.htmhttp://support.sas.com/kb/23/194.htmlhttp://support.sas.com/kb/23/194.htmlhttp://support.sas.com/kb/23/194.htmlhttp://support.sas.com/kb/41/616.htmlhttp://support.sas.com/kb/41/616.htmlhttp://support.sas.com/kb/47/918.htmlhttp://support.sas.com/kb/47/918.htmlhttp://support.sas.com/kb/47/918.htmlhttp://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#p0f64yzzxbsg8un1uwgstc6fivjd.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#p0f64yzzxbsg8un1uwgstc6fivjd.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#p0f64yzzxbsg8un1uwgstc6fivjd.htmhttp://support.sas.com/resources/papers/sgf09/336-2009.pdfhttp://support.sas.com/resources/papers/sgf09/336-2009.pdfhttp://support.sas.com/resources/papers/sgf09/336-2009.pdfhttp://support.sas.com/resources/papers/sgf09/336-2009.pdfhttp://support.sas.com/kb/47/859.htmlhttp://www.sas.com/offices/europe/france/US2012_Q1_InDatabase.htmlhttp://www.sas.com/offices/europe/france/US2012_Q1_InDatabase.htmlhttp://support.sas.com/kb/47/859.htmlhttp://support.sas.com/resources/papers/sgf09/336-2009.pdfhttp://support.sas.com/resources/papers/sgf09/336-2009.pdfhttp://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#p0f64yzzxbsg8un1uwgstc6fivjd.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#p0f64yzzxbsg8un1uwgstc6fivjd.htmhttp://support.sas.com/kb/47/918.htmlhttp://support.sas.com/kb/41/616.htmlhttp://support.sas.com/kb/23/194.htmlhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n1v1cfazem7dejn1xiq60o8zd45g.htmhttp://support.sas.com/documentation/cdl/en/acreldb/66690/HTML/default/viewer.htm#n1v1cfazem7dejn1xiq60o8zd45g.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#p0fmgbpjwgbnvkn1sysefnr22fow.htmhttp://support.sas.com/documentation/cdl/en/acreldb/65053/HTML/default/viewer.htm#p0fmgbpjwgbnvkn1sysefnr22fow.htmhttp://support.sas.com/kb/42/934.htmlhttp://support.sas.com/resources/papers/proceedings11/103-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/103-2011.pdfhttp://support.sas.com/resources/papers/proceedings11/105-2011.pdfhttp://support.sas.com/documentation/cdl/en/sqlproc/65065/PDF/default/sqlproc.pdfhttp://www2.sas.com/proceedings/sugi29/106-29.pdf
-
5/20/2018 Optimisez Performances Traitement Donnees Sas
Access
30/30
Septembre 2013 - 30 -
6. CONCLUSION
L'optimisation est un art mais aussi un combat de tous les
jours. Vous ne serez jamais totalementform. Mais mme pour un
dbutant il y a juste quelques boutons pousser pour rendre les
traitements flux de donnes plus rapides.
Mais noubliez jamaisque :
SAS offre de nombreuses possibilits d'optimisation,
Ces solutions sont simples mettre en uvre,
Ces solutions sont bnfiques avec peu d'effort,
Assurez-vous duneutilisation efficace des ressources,
La mmoire tampon consomme de la mmoire,
Il vous faudra un certain effort pour trouver les rglages
optimaux en fonctionnement devotre environnement et de son
utilisation,
Utilisez les SASTRACE durant la phase de dveloppement mais
noubliez pas de la dsactiveravant le passage en production,
Et enfin, mais non des moindres, toujours tester les options sur
de petits sous-ensembles dedonnes.
Nicolas HoussetConsultant Support Clients SAS France