30
 Décembre 2013 - 1 - OPTIMISEZ LES PERFORMANCES DE TRAITEMENT DE VOS DONNEES AVEC SAS/ACCESS ®  Le BIG DATA nous immerge inexorablement dans un océan d'informations. Accéder à toujours plus données le plus rapidement possible n’a jamais été autant au cœur des attentes des utilisateurs. Aussi, dans ces environnements où la vitesse revêt une importance capitale, il est impensable de ne pas comprendre l’interaction entre SAS et les bases de données. Savoir quand il est plus avantageux de laisser SAS faire le traitement ou quand il est préférable que la base de données s’en charge est fo ndamental dans l’atteinte 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 a affaire. Cet article explore les pistes pour traiter efficacement vos données externes et obtenir le meilleur gain de performance. Il s’adresse aux développeurs mais également aux architectes en charge de la mise en œuvre du système d’information.  Sommaire Optimisez les performances de traitement de vos données avec SAS/Access ®  ...... ....................... 1  1. Introduction .......................................................................................................... ..... 2  2. Se connecter à une base de données ............................................................................. 4  2.1. Jeu de données utilisé ................ ............................................................................ 4  2.2. SQL PASS-THROUGH implicite et étape DATA ............................................................ 4  2.3. SQL PASS-THROUGH explicite ................................................................................. 5  2.4. Choisir entre implicite et explicite. ........................................................................... 6  3. Obtenir les meilleurs performance possible ..................................................................... 7  3.1. Limiter le nombre de lignes et de colonnes retournées ............................................... 7  3.2. Faire réaliser le traitement par l a base de données .................................................... 7  3.3. Tri et indexation des données .................................................................................. 7  3.4. Dévoiler les requêtes de SAS/ACCESS ...................................................................... 9  3.5. Attention aux fonctions et options SAS .................................................................... 10  3.6. L’option DBCOMMIT ............................................................................................ .. 12  3.7. Utilisation optimale de la mémoire tampon ..............................................................14  3.8. L’option SASTRACE ? A utiliser en connaissance de cause ! ........................................17  3.9. L’option DBIDIRECTEXEC pour soumettre directement votre requête SQL à la base de données. ........................................................................................................... ............. 19  3.10. Optimiser vos jointures............. ............................................................................. 20  3.11. Utiliser des tables volatiles .....................................................................................24  4. Comment forcer l’utilisation du SQL Passthrough Explicit dans SAS Enterprise Guide 6. 1 ? ..27 5. Liens utiles et références ............................................................................................29  6. Conclusion .......................................................................................................... ...... 30  Caractéristiques : Catégories : SAS/Access OS : Windows, Unix Version : SAS® 9.4 Vérifié en décembre 2013

Optimisez Performances Traitement Donnees Sas Access

Embed Size (px)

DESCRIPTION

Cet article explore les pistes pour traiter efficacement vos données externes et obtenir le meilleur gain de performance. Il s’adresse aux développeurs mais également aux architectes en charge de la mise en œuvre du système d’information.

Citation preview

  • 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