SAS/ACCESS interface to PostgreSQL et les performances

Si vous utilisez SAS/ACCESS interface to PostgreSQL, vous pouvez être confronté à des problèmes de lenteurs lors de l’exécution de certains requêtes. Dans cet article, je vous présente deux options PostgreSQL utiles pour améliorer les performances du moteur, UseServerSidePrepare et UseDeclareFetch. En couplant ces deux options, et dans certains d'utilisation, vous constaterez un gain de performance. Prenons d'abord le cas d'une étape data. Nous souhaitons copier l'intégralité d'une table PostgreSQL dans une bibliothèque SAS. Cette table, matableE, contient 100 000 000 (100 millions d'entrées) Le code utilisé est le suivant :
options sastrace=',,,s' nostsuffix sastraceloc=saslog;
libname pslib postgres server="mabase" database=sasdb user=sasdb password=monpassword;
data matableE;
set pslib.matableE;
run;
Ce qui donne : etape-data-grosse-table-sas-postgresql Ajoutons maintenant les options UseServerSidePrepare et UseDeclareFetch via l'ajout de conopts dans l'instruction libname :
libname pslib postgres server="mabase" database=sasdb user=sasdb password=monpassword conopts="UseServerSidePrepare=1;UseDeclareFetch=1" readbuff=32767;
Ce qui donne : etape-data-grosse-table-sas-postgresql-avec-options-performances   Maintenant examinons les performances dans le cadre de l'utilisation d'une proc print. Nous souhaitons afficher uniquement les 10 première lignes de la table tablevar. Cette table contient 10 000 000 (10 millions d'entrées) Le code est le suivant :
proc print data=pslib.tablevar (obs=10);
run;
Sans les options, le temps d’exécutions dépasse les 3 minutes : proc-print-postgress-table-dix-millions-de-lignes   On voit également que la requête est consommatrice de ressource du coté du serveur PostgreSQL : postgresql-et-sas-consommation-cpu Maintenant, en positionnant les options UseServerSidePrepare et UseDeclareFetch, l’exécution de la proc et l'affichage sont instantanés :   proc-print-postgress-table-dix-millions-de-lignes-avec-options-performance  

Pour aller plus loin :

Problem Note 52585: SAS/ACCESS® Interface to PostgreSQL might require the use of the driver setting "UseServerSidePrepare" to improve query performance    

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.