|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : juillet 2006 Messages : 88 ![]() |
Bonjour,
j'ai un gros problème concernant une base de données sur laquelle je travaille. Il s'agit d'une base relativement simple (une trentaine de tables) avec une volumétrie conséquente (entre 200 000 et 1 000 000 d'enregistrement). Lors d'une procédure de maintenance, je suis amené à supprimer un grand volume de données sur ces tables (environs 10 000 enregistrements pour certaines tables). Malheureusement, le temps de suppression est trop long (plus d'une heure parfois) et cela risque d'empirer avec le volume croissant des données. J'ai testé la suppression des index mais cela n'a rien changé. Quelqu'un aurait-il une solution? Merci |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : mars 2005 Messages : 577 ![]() |
As-tu regardé du côté des opérations de maintenance comme VACUUM?
Après cela peut aussi dépendre de la requête que tu joues (DELETE avec conditions etc). Pourrais-tu poster cette requête ici et poster également le résultat de cette même requête jouée avec les mots clés EXPLAIN ANALYSE en amont?
__________________
Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros! Code C :
|
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
parler de volumétrie sans parler de taille physique ca ne veux rien dire du tout.
1million d'enregistrements ca peut faire 10 mo comme quelques Go. Bref, si l'explain donne rien il faudrai voir aussi si pendant vos actions de maintenances vous n'avez pas des actions concurentes qui pourraient locker vos table, ou si vous êtes cpu / io bound. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Contrairement à une idée reçue, retirez TOUS les index d'une table pour faire un DELETE de certaines lignes n'est pas le plus performant.
Comme toute opération de mise à jour, elle commence par une recherche positionnelle des tuples à traiter, tant est si bien qu'un index bien placé aide à réaliser la chose. 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 * * * * * |
|
00
|
|
|
#5 | ||
|
Membre à l'essai
![]() Inscription : juillet 2006 Messages : 88 ![]() |
Après analyse, voici les résultats sur une table qui contient pour le moment 290 000 enregistrements.
Code :
Alors ma question est aussi de savoir si le fait qu'il y ait des liaisons avec cette table (foreign key) est-il un frein à la performance? |
||
|
|
00
|
|
|
#6 | |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
D'après EXPLAIN ANALYZE (voir dernière ligne) la requête a mis 0.114ms à s'exécuter.
Ce n'est donc pas celle-là qui montrera où passent les dizaines de minutes en question. Citation:
|
|
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Avez vous conservé un index sur la colonne id_fantoir_commune pour le DELETE ?
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 * * * * * |
|
00
|
|
|
#8 | ||||
|
Membre à l'essai
![]() Inscription : juillet 2006 Messages : 88 ![]() |
Bonjour,
après quelques mois d'utilisations, j'ai toujours quelques problèmes sur les suppressions massives. Sur la requête Code :
Code :
|
||||
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Avez vous mis des contraintes FK en DELETE CASCADE ?
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 * * * * * |
|
00
|
|
|
#10 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Manifestement c'est le contrôle de cette FK qui prend tout le temps:
Trigger for constraint fk_nonbatia21descrsuf_lota30descrlot: time=2311695.025 calls=9347 |
|
|
00
|
|
|
#11 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Oui, mais si c'est du delete cascade, cela journalise aussi les delete des tables filles. D'ou ma question....
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 * * * * * |
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() Inscription : juillet 2006 Messages : 88 ![]() |
Après vérification, mes FK ne sont pas en delete cascade.
J'avais privilégié cette option au début pour supprimer mes enregistrements à la chaîne mais c'était catastrophique en terme de performance. Deuxième point, je n'avais pas d'indexation sur mes FK (pour tout avouer, je pensais que PostgreSQL générait un index pour chaque FK comme il le fait pour les PK).Là, le gain de temps est considérable et mes lignes "Trigger for constraint " ont disparues lors de l'analyse de la requête. Je pense donc que le problème est résolu! J'ai encore deux questions : - je suis donc dans l'obligation d'indexer mes FK. Cela n'est-il pas plus lourd que de supprimer mes contraintes FK avant mes mises à jour (M. SQLPRO, j'ai vu que vous avez fait cela pour les index!) - Postgresql propose deux types d'index : BTREE ou HASH. Sachant que je n'ai pas d'index unique à mettre en place et que l'accès à cet index se fait par un opérateur d'égalité, doit-je privilégier le HASH? Merci encore |
|
|
00
|
|
|
#13 | |||
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Citation:
Citation:
Sinon le fait de supprimer les contraintes et les remettre après est coûteux puisqu'à la recréation elle vont être retestées sur l'intégralité du contenu. Citation:
En performance d'accès les tests dispos sur le web ont l'air de montrer que ça ne diffère pas beaucoup du b-tree. Voir par exemple: http://www.depesz.com/2010/06/28/sho...se-hash-index/ |
|||
|
|
10
|
|
|
#14 |
|
Membre à l'essai
![]() Inscription : juillet 2006 Messages : 88 ![]() |
Merci pour ces réponses!
|
|
|
00
|
|
|
#15 | |||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
Un outil de modélisation comme Power AMC n'aurait pas commis cette faute ! Citation:
Citation:
Par exemple les index en hash ne peuvent pas être utilisé pour d'autres opérateurs que = et donc ne peuvent pas servir pour un ORDER BY, entre autres... Lisez au moins la doc : http://docs.postgresql.fr/8.2/indexes-types.html " Note Les tests ont montré que les index hash de PostgreSQL™ ne réalisent pas mieux que les index B-tree. La taille de l'index et son temps de construction sont bien pires. De plus, les opérations d'index hash ne sont pas tracées par les WAL, donc les index hash peuvent avoir besoin d'être reconstruit avec REINDEX après un crash de la base. Pour ces raisons, l'utilisation des index hash est découragée. " L'exemple donné par despez est biaisé par le fait que la table n'a qu'une seule colonne, il n'y a pas de clef primaire et que les données sont toutes quasiment de même longueur. Enfin aucun test d'insertion n'a été mené ! 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 * * * * * |
|||
|
00
|
Copyright © 2000-2012 - www.developpez.com