Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2011, 10h57   #1
Membre régulier
 
Homme Loïc JUSTIN
Administrateur de base de données
Inscription : novembre 2004
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Loïc JUSTIN
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2004
Messages : 234
Points : 91
Points : 91
Par défaut Temps de traitement de plus en plus long

Bonjour,


j'aimerais avoir une piste pour améliorer le temps de traitement sur un infocentre.En effet, au début, j'avais un temps de traitement de 30mn ce qui était raisonnable. Maintenant ce temps de traitement est passé à deux heures.
Base Postgresql version 7.4.13
(Impossible de mettre à jour )
Pour information
La mise à jour consiste à la récupération de fichier plat.
(Cela fonctionne par lot de deux)
1) création d'une table temporaire
2) récupération des données dans un premier fichier pour mise à jour de la table temporaire
3) récupération des données du second fichier comparaison avec ce qui se trouve dans la table temporaire et mise à jour de la base si et seulement si on trouve bien une correspondance
J'espère avoir été suffisamment clair.
D'avance merci pour votre aide
__________________
Si tu tapes ta tête contre une cruche et que ça sonne creux,
n'en déduits pas que c'est la cruche qui est vide.
JUSTIN Loïc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h11   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 431
Points : 6 431
Bonjour,

Si la base continue d'augmenter, pas nécessairement étonnant que les temps de traitement augmentent au fur et à mesure.
Avec le peu d'informations dont on dispose, c'est difficile de pouvoir vous aider plus que ça...
Une première piste : les tables sont-elles correctement indexées ? Voici le lien vers un tutoriel pour vous aider : http://sqlpro.developpez.com/cours/quoi-indexer/

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 09h13   #3
Membre régulier
 
Homme Loïc JUSTIN
Administrateur de base de données
Inscription : novembre 2004
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Loïc JUSTIN
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2004
Messages : 234
Points : 91
Points : 91
Bonjour,

Merci ced pour ta réponse. Mais, je connaissais déjà ce lien. Et je n'ai pas trouvé de piste d'amélioration.
Petit complément d'explication
L'infocentre permet d'afficher le bon fonctionnement des sauvegardes.
Pour cela
On a donc une table serveurs qui liste l'ensemble des serveurs sauvegardés
une table "strategies" qui liste l'ensemble des stratégies sauvegardes en lien avec la table "serveurs" et une table "sauvegardes" qui liste l'ensemble des sauvegardes en lien avec la table "strategies".
Lors de la mise à jour, si un serveur n'existe pas, il est créé, si une stratégie n'existe pas elle est créée,tout cela pour pouvoir insérer la nouvelle sauvegarde.
Donc à chaque insertion, il y a d'abord une vérification pour savoir si existant.
Est-ce que cela est plus claire?
__________________
Si tu tapes ta tête contre une cruche et que ça sonne creux,
n'en déduits pas que c'est la cruche qui est vide.
JUSTIN Loïc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2011, 03h41   #4
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 577
Points : 1 209
Points : 1 209
Bonsoir,

Tu passes par des tables temporaires pour mettre à jour des données si elles existent? Donc à priori je suppose qu'il y a pas mal de requêtes UPDATE et DELETE (voire DROP avec les tables temporaires)?

As-tu regardé si ton serveur fait des vacuum tout seul? Si ce n'est pas le cas il faut peut-être envisager d'en faire (et faire un vacuum full de temps en temps): ça peut augmenter nettement les performances.
__________________
Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


Code C :
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(int argc, char **argv) {
 
    printf("So long, and thanks for the fish, Dennis...\n");
    return 0;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h06   #5
Membre régulier
 
Homme Loïc JUSTIN
Administrateur de base de données
Inscription : novembre 2004
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Loïc JUSTIN
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2004
Messages : 234
Points : 91
Points : 91
Bonjour kain_tn

Merci pour ton aide. Je confirme qu'il y a beaucoup d'insert, update et de delete et qu'il y a régulièrement des vacuum pendant le traitement et à la fin du traitement. Mais on travaille avec une seule table temporaire qui est créée au début du traitement et supprimée à la fin.
__________________
Si tu tapes ta tête contre une cruche et que ça sonne creux,
n'en déduits pas que c'est la cruche qui est vide.
JUSTIN Loïc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 13h21   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bah sur de l'opti de process :
- identifier ce qui est "lent", ca n'est pas forcément 1 requête mais la répétition de certaine.
- identifer les parties itératives => peut-on les changer pour faire de l'ensembliste (vous traitez des fichiers palt donc..?)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 16h46   #7
Membre régulier
 
Homme Loïc JUSTIN
Administrateur de base de données
Inscription : novembre 2004
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Loïc JUSTIN
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2004
Messages : 234
Points : 91
Points : 91
@Punkoff oui, effectivement, la mise à jour se fait à partir de fichier plat
__________________
Si tu tapes ta tête contre une cruche et que ça sonne creux,
n'en déduits pas que c'est la cruche qui est vide.
JUSTIN Loïc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 16h52   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bein, prend ton process et trouve combien de temps chaque étape (lecture sequentiel, insert, update, ....) prend sur tes 2h.

Une fois que tu saura ca tu pourras commencer à présenter correctement ton problème.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 08h49   #9
Membre régulier
 
Homme Loïc JUSTIN
Administrateur de base de données
Inscription : novembre 2004
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Loïc JUSTIN
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : novembre 2004
Messages : 234
Points : 91
Points : 91
Bonjour,

C'est bon, j'ai trouvé en rajoutant 5 index mon temps de traitement est passé de 2h à 35mn
Voici en résumé ma démarche.
1) recherche de l'ensemble des requêtes utilisées pendant le traitement batch.
Dont énormément de SELECT. Contrôle pour chaque requête si elle utilisait bien un index. Si,non création et nouveau test, pour vérifier la pertinence de celui-ci.
2)le traitement batch se faisant en deux temps.
- Création d'une table temporaire (création d'un index pour accélérer le traitement de la deuxième partie)
- relance de l'ensemble (très concluant)
Conclusion
Ced : tu avais raison, c'était bien un problème d'index. La commande "explain analyze" m'a bien aidé car je voyais tout de suite si il l'utilisait ou non
__________________
Si tu tapes ta tête contre une cruche et que ça sonne creux,
n'en déduits pas que c'est la cruche qui est vide.
JUSTIN Loïc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h13.


 
 
 
 
Partenaires

Hébergement Web