Précédent   Forum du club des développeurs et IT Pro > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/02/2013, 11h32   #1
Gutsy
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut Taille des variables et performances

Bonjour,

Je développe un gros programme qui travaille sur des tables assez conséquentes (10k lignes x 200 variables facilement, traité avec énormément d'étapes data/sql sur des dizaines de macros, pour un temps d'exécution de 30h sur un bi-Xeon/64Go de RAM/raid0 SSD).

Je cherche donc à gagner un peu en performances, et je me pose la question de l'importance de la définition des variables.

Actuellement, elles ont toutes les tailles/formats standards, sauf à la fin au moment du reporting où je les met en forme. L'idée serait donc, dès l'input du programme, de mettre en forme toutes ces données de manière à ce que le traitement se fasse de manière optimale.

Pensez-vous qu'il soit possible de gagner en performance de cette manière ?

L'idée principale était d'adapter précisément la taille de la variable à son contenu (par exemple, une variable contenant une année serait mise en taille 4, plutôt qu'en 8 comme actuellement).

Cependant, j'ai lu récemment dans un article qu'adapter les variables de cette manière, bien qu'améliorant le temps d'écriture/espace disque, consomme beaucoup plus de processeur que d'avoir des tailles de variables uniformes dans un même dataset.

Est-ce vraiment significatif ? Qu'en pensez-vous ?

Merci
Gutsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 15h36   #2
sasadm
Membre confirmé
 
Inscription : janvier 2010
Messages : 214
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 214
Points : 286
Points : 286
Bonjour,

La taille des variables est un des leviers d'optimisation à ne pas négliger mais dans ton cas c'est la multiplication des lectures de la table par étapes data et sql qui entraine le dérapage du temps de traitement d'autant que la table en entrée n'a pas l'air monstrueuse.
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 15h51   #3
Gutsy
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 0
Points : 0
Je sais que le temps de traitement est principalement dû au nombre d'étapes, mais c'est malheusement très compliqué à revoir car le travail réalisé par le code est extrêment complexe.
Cela fait quand même l'objet d'un projet d'optimisation en cours, mais nous cherchons à trouver d'autres leviers, et le travail sur les données nous a paru intéressant à mener.

Ce qui m'intrigue beaucoup, c'est de savoir quel est la meilleure façon de faire : uniformiser le taille des variables ou bien avoir une taille de variable strictement définie par rapport à son contenu (taille 4 pour une année par exemple). Je serais parti sur la seconde solution, mais la lecture d'un article mettant en garde contre l'impact processeur de ce type de différenciation m'a poussé à creuser un peu plus le sujet avant de lancer le projet.
Gutsy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 16h56   #4
sasadm
Membre confirmé
 
Inscription : janvier 2010
Messages : 214
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 214
Points : 286
Points : 286
Pourrais-tu donner la référence de cet article ?
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 17h21   #5
jmarandet
Membre du Club
 
Homme julien marandet
Ingénieur Statisticien
Inscription : janvier 2013
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme julien marandet
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur Statisticien
Secteur : Service public

Informations forums :
Inscription : janvier 2013
Messages : 28
Points : 54
Points : 54
Bonjour Gutsy,

A première vue, sans connaître parfaitement les contraintes de votre projet, l'idée de formater la table en input présente les avantages/inconvénients suivants :
- Avantages : Peut être gagner en volume de stockage, et par là faciliter le travail de calcul/mise en mémoire tampon de lecture pour la chaîne de traitement qui va suivre. Le gain espéré est-il réel ??? Votre machine me semble être une bête de course.

- Inconvénients : Nécessite, pour ce faire, d'intercaler un traitement très gourmand en ressources et potentiellement dangereux (réduire les tailles de variables à postériori peut présenter un risque de perte de données).

Avant de m'aventurer sur une piste aux perspectives aussi sombres, je serais d'avis de me renseigner sur d'autres possibilités :

1. Si vous utilisez l'option fullstimer, peut être pourriez vous identifier les points noirs de votre processus et faire une remise à plat ciblée ?

2. Si les traitements se focalisent sur des variables ou catégories de données particulières, avez-vous envisagé d'indexer vos données ?
jmarandet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2013, 00h58   #6
LaurentP75
Invité régulier
 
Homme Laurent
Inscription : octobre 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Localisation : France

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2010
Messages : 6
Points : 8
Points : 8
Bonjour,
Je pense que les conseils proposés ci-dessus sont pertinents.

Mais je prévoirai aussi de travailler sur les thèmes suivants :

1) si le domaine de définition des modalités d'une variable est connu, adapter sa longueur en octet afin de minimiser la place occupée, autant en mémoire que sur disque, essentiellement pour les variables caractères.

2) pour les nombres Entiers (jamais de décimale) prenant peu de valeurs, avec peu de chiffres significatif, les mettre en Length 4, sinon 8.

3) Si beaucoup de variables sont caractères, de longueurs variables, de remplissage variable, utiliser lors de la création des DATA les options
(Compress=YES Pointobs=Yes). La perte de temps lors des compression/décompression est largement récupéré lors des accès disques ou accès réseau.

4) ne pas oublier de "Dropper" les variables temporaires des étapes data (indice de boucles Do par exemple) et les variables inutiles créées en systématique par certaines procédures SAS (telle les Percent d'un Freq si l'on utilise que les COUNT).
LaurentP75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h20.


 
 
 
 
Partenaires

Hébergement Web