Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 11/03/2011, 09h31   #1
Invité de passage
 
Inscription : février 2011
Messages : 48
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 48
Points : 1
Points : 1
Par défaut base presque saturée

Bonjour,
Je travaille sous Postgres, j'ai une base de données de 100 tables et j'ai des tables avec des millions d'enregistrements, ce qui bouffe énormement la mémoire dans les applications.
Ça rame beaucoup, ça prend beaucoup de temps pour générer une page.
Je voulais savoir s'il y a une solution pour diminuer les enregistrements de la table, c'est-à-dire par exemple créer une autre base avec les mêmes tables qui possèdent le plus d'enregistrement. Et dans cette base ne faire migrer que les enregistrements qu'on utilise plus, et garder les enregistrements qui datent de 3 ans et tout le reste, le migrer vers l'autre base.
souf_87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 10h36   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par souf_87 Voir le message
j'ai une base de données de 100 tables
Ça fait beaucoup !
Le modèle de données est-il optimisé ?

Citation:
et j'ai des tables avec des millions d'enregistrements
Ça commence à faire beaucoup en effet ! Mais ce n'est pas encore énorme pour une BDD optimisée.

Citation:
je voulais savoir est ce qu'il a une solution pour diminuer les enregistrements de la table,c'est à dire par exemple creer une autre base avec les meme tables qui possèdent le plus d'enregistrement. et dans cette base ne faire migré que les enregistrement qu on utilise plus, et garder les enregistrement qui date depuis 3ans et tout le reste le migré vers l'autre base
Oui bien sûr !
Plutôt qu'une autre BDD, si ça doit être sur le même serveur, il vaut peut-être mieux utiliser un autre schéma dans la même BDD. Ainsi tu pourras requêter sur les deux schémas si tu as besoin d'analyser des données anciennes avec les récentes.

À toi de déterminer quelles sont les lignes (et pas enregistrements ! ) des tables à migrer et de faire attention aux clés étrangères.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/03/2011, 15h11   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
100 tables, c'est franchement pas énorme. En règle générale mes bases ont ua minimum cela, voire beaucoup plus (uqleques centaines).
Quelques millions de lignes ce n'est pas gênant, quelques une des bases sur lesquelles je travaille ont plusieurs centaines de millions et jusqu'à un milliard.

Le secret pour que cela fonctionne bien est, dans l'ordre :
1) le respect du modèle relationnel
2) une RAM adéquat à la taille de la fenêtre de données
3) une bonne indexation

1) le respect du modèle relationnel
Avez vous respecté toutes les formes normales (1, 2, 3, FNBC, 4, 5, FNDC...) ?
Si ce n'est pas le cas, vous avez donc de la redondance et donc un volume de données trop important !
Remodélisez !

2) une RAM en adéquation
Les données de toutes les requêtes manipulées dans le SGBDR doivent être en mémoire pour pouvoir être traité. Il n'est pas possible pour le SGBDR de traiter une requête si elle n'est pas en RAM. Dans le cas ou les données ne sont pas en RAM, le SGBRD commence par les y placer avant de faire la requête. SI votre RAM est trop juste cous consommez du disque. Or la différence de vitesse entre RAM et disque est de l'ordre de 1000 fois minimum (souvent 10000...)

3) une bonne indexation
Un index permet de réduire de manière logarithmique les lectures lors de recherches, des tris, des groupages notamment. En l'absence d'index, le coût et exponentiel !
Lisez l'article que j'ai écrit sur l'indexation : http://sqlpro.developpez.com/cours/quoi-indexer/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/03/2011, 20h26   #4
Invité de passage
 
Inscription : février 2011
Messages : 48
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 48
Points : 1
Points : 1
Merci pour votre reponse
Je voulais savoir aussi est ce qu'il a un logiciel a télécharger pour connaitre les requetes qui ramennent bcp de lignes,les requetes qui nécessitent de manipuler bcp de données dans la base de données comme v$sql ou AWR statspack sur oracle meme si je c pas comment il marche.
Pour connaitre les statistiques
souf_87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 01h05   #5
Inactif
 
Inscription : novembre 2004
Messages : 247
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 247
Points : 217
Points : 217
Bonsoir
Lisez la section (EXPLAIN) dans la documentation.
Cordialement
bustaf est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 15/03/2011, 11h10   #6
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Citation:
Envoyé par souf_87 Voir le message
Merci pour votre reponse
Je voulais savoir aussi est ce qu'il a un logiciel a télécharger pour connaitre les requetes qui ramennent bcp de lignes,les requetes qui nécessitent de manipuler bcp de données dans la base de données comme v$sql ou AWR statspack sur oracle meme si je c pas comment il marche.
Pour connaitre les statistiques
Tu seras vite limité, au jour d'aujourd'hui sur Postgresql tu ne trouveras jamais un seul outil aussi performant que le Statpack/AWR d'Oracle.
Il existe néanmoins quelques outils utiles qui peuvent te permettre, dans le meilleur des cas (seulement dans les dernières versions de Postgresql), de:
- tracer les requêtes les plus longues et les sortir sous forme de rapport avec par exemple pgfouine
- avoir les plans d'exécution de ces requêtes avec la contrib autoexplain
- avoir les statistiques d'utilisation des différents objets (nb d'updates dans une table, nb de lignes ramenées au total issu de requêtes "select", nb d'accès I/O sur un index, ...) avec les vues système pg_stat_* et pg_statio_*

Après, il faut coupler les points précédents avec la supervision OS (CPU, mémoire, disques) pour essayer de trouver les pistes d'optimisation possibles (réécriture de requêtes, ajout de RAM, ...)

Bref les problèmes d'optimisation sont rarement simples à investiguer, d'autant plus sur Postgresql (comparé à des SGBDs payants comme Oracle qui disposent d'outils te sortant en quelques clics les requêtes les plus longues et le temps passé en CPU, I/O, ...)
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h09.


 
 
 
 
Partenaires

Hébergement Web