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 :
Ce qui donne :
Ajoutons maintenant les options UseServerSidePrepare et UseDeclareFetch via l'ajout de conopts dans l'instruction libname :
Ce qui donne :
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 :
Sans les options, le temps d’exécutions dépasse les 3 minutes :
On voit également que la requête est consommatrice de ressource du coté du serveur PostgreSQL :
Maintenant, en positionnant les options UseServerSidePrepare et UseDeclareFetch, l’exécution de la proc et l'affichage sont instantanés :
1 2 3 4 5 |
options sastrace=',,,s' nostsuffix sastraceloc=saslog; libname pslib postgres server="mabase" database=sasdb user=sasdb password=monpassword; data matableE; set pslib.matableE; run; |
1 |
libname pslib postgres server="mabase" database=sasdb user=sasdb password=monpassword conopts="UseServerSidePrepare=1;UseDeclareFetch=1" readbuff=32767; |
1 2 |
proc print data=pslib.tablevar (obs=10); run; |