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 29/06/2007, 16h23   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
Par défaut Acces tres lent

Bonjour,

CONTEXTE
Une table (myTable) contenant :
  • 5 champs (int8, timestamp, float8, int8 char(1)).
  • 110 millions de lignes
  • Une clef primaire de 4 champs
  • Une clef etrangere referencée par une table de 8 champs avec une cle primaire d'un champ.
1 PC sous Windows XP pro:
  • Biprocesseur IntelPentium(R) D CPU 2.80GHz
  • 3Go RAM
  • Disque dur: WDC WD2500JS-75NCB1(229Go)

1 PC sous Windows Server 2003:
  • Biprocesseur Xeon CPU 3GHz
  • 3Go de RAM
  • Disque dur: IBM ServeRAID SCSI Disk Device (136Go)
Base de donnée sur les 2 PC : Postgres SQL 8.1
Fichier de configuration : Celle d'origine, puis en changeant suivant http://sitening.com/seo-tools/postgresql-benchmark/ en multipliant par 3/8 (c'est une config pour 8G de RAM)


Probleme
En lançant la commande "SELECT count(*) FROM myTable;", il se passe 8 minutes avant d'avoir une réponse. Ce qui me parrait enorme. D'autant plus que le CPU ne décole pas et le Disque Dur n'a pas l'air de réagir (DEL qui ne s'allume que tres rarement)
J'ai exactement le meme temps de reponse sur les deux bécanes.

Est-ce normal? Quoi faire dans le cas contraire?
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 21h17   #2
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
8 minutes...Ca fait beaucoup !!!
C'est le temps que la lumière du soleil met pour atteindre la terre


As-tu fait un vacuum sur ta base ainsi qu'un Reindex database?
  Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 09h15   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
J'avais fait des vacuums (j'ai presque essayé toutes les options ^^)
Ca me prennait generalement une heure ou deux pour se finir.

J'ai rajouté aussi un index sur la premiere colonne (create index).

Le Reindex est en cours (mais il me semble que je l'avais deja fait)

Pour 110 millions de ligne, quelle est l'ordre d'idée concernant le temps d'un count(*)?
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 10h22   #4
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
En local, ma requete dure maintenant 4 minutes.
La deuxieme requête me ramene à 3 minutes.
Il y a un utilitaire de surveillance intégré à windows Server qui me dit qu'il lit à 50Mb/s.
En données brutes, 110 millions * 33 octets / 50 000 000 = 1.2 minutes
En gros, c'est comme si il essayait de lire le double de données :/
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 18h43   #5
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Si tu essaies de faire un count uniquement sur un champ indexé plutôt que sur tous les champs de la table, est-ce que cela n'est pas mieux?

Code :
1
2
3
 
SELECT count(champ_indexe) 
FROM TABLE
  Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 11h50   #6
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
J'ai 3 minutes d'execution.

Ma configuration (postgres.conf) :

max_connections = 100

shared_buffers = 3750
temp_buffers = 10000
work_mem = 12288
maintenance_work_mem = 98304
max_stack_depth = 8192

max_fsm_pages = 393216
max_fsm_relations = 12288


vacuum_cost_delay = 50
wal_buffers = 24
checkpoint_segments = 6
effective_cache_size = 259753
log_destination = 'stderr'
redirect_stderr = on
log_line_prefix = '%t '
stats_start_collector = on
stats_row_level = on
autovacuum = on
lc_messages = 'C'
lc_monetary = 'C'
lc_numeric = 'C'
lc_time = 'C'
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 12h55   #7
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Pour essayer j'ai crée de mon coté une table avec 134 000 00 de lignes.
Un select count(*) se déroule en 25 minutes environ!!!


A savoir que ma config est très modeste:
Sempron 2600+
512 mo de ram
disque dur de 4200tr/min (disque dur de PC portable)

A noter aussi que je n'ai indéxé aucun champ.

Ce doit être normal visiblement !!
  Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 14h37   #8
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
J'ai posté sur le forum de postgres francais pour confirmeer cette lenteur...

Ca me parrait vraiment pas super ce binz
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web