|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 163 ![]() |
Citation:
Le seul problème est que les requêtes sont déjà complexe et que les erreurs de plan le sont avec au moins 5 à 6 tables dans la requête et une certaine volumétrie. Là le format des blogs ne me permet pas de le faire et surtout cela aurait brouillé complément le reste du texte. Je citais un exemple d'une collectivité local ou il a fallut de débarrasser de PG au profit de SQL Server. L'éditeur de l'époque que ne ne citerais pas, mais qui est quand même dans les témoignages de postgresql.fr a été jusqu'à affirmer que le problème c'était PG et qu'il fallait s'en débarrasser au profit de fichiers plats, cela irait beaucoup plus vite ! C'est à cette époque que l'on m'a contacter pour renouveler le système. J'ai effectivement vu quels étaient les problèmes des requêtes et compte tenu de la volumétrie et de la complexité de certaines requêtes, certains plans de PG étaient catastrophiques. Ce pourquoi il a été abandonné entre autres (et aussi parce que pas de vues indexées, pas de haute dispo digne de ce nom...) 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 * * * * * |
|
|
10
|
|
|
#22 | |||||
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Citation:
Connaissant assez bien Oracle tout de même, je vous rejoints sur les avantages de ce système. Citation:
Citation:
Citation:
En revanche, pour traiter la problématique de haute-disponibilité, j'ai utilisé du Red Hat Cluster Suite qui est simple et efficace - le service bascule en moins d'une minute. Je suis donc passé par un outil externe. Citation:
Encore une fois, je le redis: VACUUM ne pose pas de verrou. Mais oui, VACUUM FULL pose un verrou exclusif. Il faut faire un gros distinguo entre ces deux opérations: la première - VACUUM - est nécessaire, consommatrice d'I/O mais ne va pas impacté les transactions. La seconde - VACUUM FULL - est à éviter dans la mesure du possible. En gros, VACUUM va scanner l'ensemble des pages de la table et déterminer si la page peut être réutilisée. Si c'est le cas, elle va être inscrite dans la "free space map". Les blocs seront par la suite réutilisés pour d'autres écritures. A contrario, VACUUM FULL va défragmenter la table (et pourrir les index qu'il faudra reconstruire). Jusqu'à la 8.4, c'est une opération très lourde et je rejoints d'ailleurs scheu sur ce point: on va souvent plus vite à réimporter une table qu'à faire un VACUUM FULL. A partir de la 9.0, cette opération a été ré-implémenté et réalise maintenant une copie toute propre de la table, ce qui est bien plus efficace mais nécessite un espace disque suffisant. Pour ce qui est de la reconstruction des index, ce n'est pas VACUUM et VACUUM FULL qui la traite (ou peut-être pour le "nouveau" VACUUM FULL de la 9.0, mais je n'y mettrai pas ma main à couper). Vous utilisez REINDEX qui va poser un verrou exclusif sur la table ou bien vous rusez un peu et vous faites à la main ce que SQL Server fait tout seul: vous créez un nouvel index identique avec l'ordre CREATE INDEX CONCURRENTLY - opération non-bloquante - et lorsqu'il est créé, vous détruisez l'ancien index et renommez le nouveau pour qu'il porte le bon nom. Edit: j'ai vu l'article du blog après. OK. Il pose des verrous, mais néanmoins: "a VACUUM does not block an UPDATE". J'en reste surtout sur ce dernier point. Merci pour ce lien. |
|||||
|
|
10
|
|
|
#23 | ||
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Citation:
Citation:
Très fort le coup du fichier plat ! J'ai aussi eu le coup des index qui sont inutiles car ils pénalisent les écritures |
||
|
|
10
|
|
|
#24 | |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 501 ![]() |
Citation:
Le seul moyen de récupérer l'espace et de faire un export puis drop/truncate puis import Alors que sur Oracle par exemple tu peux faire un "alter table <matable> move;" Pour les indexes, problème similaire : commment récupérer l'espace disque sur des gros indexes dont la table a été purgée à 90% ? Postgresql n'a pas de notion de "rebuild". Il faut supprimer puis recréer l'index ce qui est très couteux sur de grosses tables et peut même mettre en péril la cohérence des données si on supprime temporairement des PK pour les recréer
__________________
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/ |
|
|
|
10
|
|
|
#25 | ||||
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
@scheu: normalement l'espace est récupéré pour de bon à partir de la 9.0. Ce serait étonnant que ça ne soit pas le cas. Donc attention, je parle des versions très récentes de PG.
Et pour reconstruire les index, tu n'as pas d'option REBUILD c'est vrai. Vous utiliserez l'ordre REINDEX pour le reconstruire. avec REINDEX. Pour vérifier la nouvelle implémentation de VACUUM FULL en 9.1 : Code :
Code :
|
||||
|
|
10
|
|
|
#26 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 501 ![]() |
@frost242
J'ai l'habitude de gérer des bases Postgresql de 100 Go environ, et le REINDEX n'est pas une solution viable pour récupérer l'espace, car il locke la table Le VACUUM FULL est-il vraiment beaucoup plus rapide dans les dernières versions ? Si c'est pour mettre 30 minutes plutôt que 3 heures sur une table de 10 Go c'est déjà trop pour moi Bref je ne dénigre pas Postgresql loin de là, mais je constate simplement que, comme déjà dit dans mon premier message, pour des grosses volumétries à traiter il y a encore beaucoup de contraintes, quand on est sur un environnement de production haute-dispo où les tables et données doivent être accessible 24h/24 sans verrous ni recréation d'indexes ni export/imports C'est un peu comme le partitionnement ou les pseudos-paramètres remplaçant les hints : entre dire d'un côté "la fonctionnalité existe sur Postgresql" ou "on peut se débrouiller différemment en faisant comme ça", et de l'autre côté la pratique et la réalité sur des gros environnements en entreprises, il y a encore une montagne. A titre personnel en tout cas, je maintiens mon sentiment initial qui est que Postgresql ne peut pas (encore) remplacer un SGBD payant sur des applications volumineuses ou critiques (données accessibles 24h/24 sans verrous) ou complexes (requêtes dépassant les 4-5 jointures) Alors que Postgresql fait très bien l'affaire dans les cas inverses
__________________
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/ |
|
|
10
|
|
|
#27 | |
![]() ![]() |
Ce dernier point m'inquiète un petit peu :
Citation:
Postgresql devient vraiment un escargot avec aussi peu de jointures ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. 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 la suite Linux Mageïa ! |
|
|
00
|
|
|
#28 | ||||
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Citation:
Je me cite d'un message précédent, il y a une alternative à REINDEX: Citation:
Code :
|
||||
|
|
00
|
|
|
#29 | |||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 501 ![]() |
Citation:
__________________
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/ |
|||
|
|
00
|
|
|
#30 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 501 ![]() |
Citation:
Quand je parle des problèmes que je rencontre, je parle personnellement de tables de plusieurs Go et de plusieurs millions de lignes Les requêtes ayant beaucoup de jointures sont peu performantes sous Postgresql car l'optimiseur aura beaucoup de mal à trouver un plan d'exécution correct. J'insiste à nouveau particulièrement sur le point ci-dessous que je rencontre très souvent : Citation:
__________________
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/ |
||
|
|
10
|
|
|
#31 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 163 ![]() |
Citation:
Mais c'est toujours au final une création d'index.... Par exemple chez SQL Server on peut directement défragmenter un index sans que les utilisateurs ne constate de blocage ni de gros ralentissement. DBCC INDEXDEFRAG (depuis 1998 aussi). Et effectivement en pratique 95% de la place perdu est récupérée. 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
|
|
|
#32 | ||
![]() ![]() Inscription : octobre 2008 Messages : 1 707 ![]() |
Citation:
La procédure pour ça est: SQL> select pg_start_backup(...); ... sauvegarde au niveau système de fichiers par un outil externe (rsync, tar, cp,...) ... SQL> select pg_stop_backup(); C'est la technique de base pour faire ensuite "Point In Time Recovery" ou pour initialiser un serveur esclave pour la réplication par log shipping. Citation:
|
||
|
|
10
|
|
|
#33 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 163 ![]() |
Citation:
Citation:
Si vous avez une table dont les pages ont été modifiées 100 fois, la restauration du journal de transaction replacera 100 fois la page. Dans une sauvegarde différentielle on ne prend qu'UNE SEULE fois chaque page de données. ça fait une TRES GROSSE DIFFERENCE en terme de durée de la sauvegarde et plus encore en terme de restauration... 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
|
|
|
#34 | |
![]() ![]() Inscription : octobre 2008 Messages : 1 707 ![]() |
Citation:
En ce qui concerne Oracle d'ailleurs il est intéressant de voir qu'ils ont ajouté par-dessus les "stored outlines" (version 9 je crois) et puis encore après le système de "plan management" de la version 11. Pour une explication très sommaire voir ce white paper: http://www.oracle.com/technetwork/da...gr2-133099.pdf Si ça donne l'état de l'art sur le sujet, on n'est toujours pas sortis de l'usine à gaz de toute manière... |
|
|
|
10
|
|
|
#35 |
![]() ![]() Inscription : octobre 2008 Messages : 1 707 ![]() |
Pendant le backup à chaud, je pense qu'en écriture il ne fait plus que des ajouts dans les fichiers WAL. Ce n'est qu'une supposition ceci dit car je ne me souviens pas avoir lu une explication de comment ça fonctionnait.
|
|
|
00
|
|
|
#36 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Pas de verrouillage. PostgreSQL continue son boulot sans sourciller et sans bloquer les transactions. D'ailleurs, pour preuve, les messages de cpio indiquant que les fichiers copiés changent au cours de la sauvegarde, si elle est faite avec cpio.
Je ne connais pas l'implémentation technique dans le détail, mais je me l'explique en analysant le comportement de PG. Lorsqu'on appelle pg_start_backup() fait un CHECKPOINT et l'appel à pg_stop_backup() déclenche à nouveau un CHECKPOINT et archive l'ensemble des journaux de transactions qui ont été utilisés entre le start et le stop. Enfin sachant qu'un backup consistant est constitué des fichiers de la base ET des WAL archivés (archive logs pour faire une analogie Oracle), on peut simplement se dire qu'ils ont durci le processus de recover: il sait s'il faut rejouer les modifications ou non. J'espère que j'ai été clair. |
|
|
10
|
|
|
#37 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Citation:
Mais pareil, je n'ai pas été lire le code pour savoir comment ça fonctionne. |
|
|
|
00
|
|
|
#38 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Citation:
Cette procédure est suivie d'une sauvegarde des WAL archivés qui ont été écrits pendant la sauvegarde. Sinon votre backup ne vaudra pas grand chose. |
|
|
|
00
|
|
|
#39 |
|
Membre éprouvé
![]() Arnaud BenhamdineConsultant Inscription : octobre 2004 Messages : 213 ![]() |
Un petit message pour dire que cet article et le présent débat qui s'ensuit sont très intéressants....
J'ai vu les messages d'insulte sur le forum posgresql.fr et j'avoue que j'ai été très déçu de la pauvreté des arguments des détracteurs de l'article (pour ainsi dire, il n'y avait aucun argument). J'attendais mieux de la part d'experts PG... Cdlt, Arnaud. |
|
|
00
|
|
|
#40 | |||
|
Membre éprouvé
![]() Arnaud BenhamdineConsultant Inscription : octobre 2004 Messages : 213 ![]() |
Je reviens sur la reconstruction d'index à chaud (sans verrouiller la table) : c'est étonnant qu'il n'y ait pas une commande qui fasse cette opération automatiquement.
Il me semble que la plupart des SGBDR le proposent non ? P'tite question de non-expert SGBD : pourquoi ne pas mettre le CREATE INDEX dans la transaction tant qu'à faire ? Citation:
|
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com