|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Bonjour
Bon, je crois que je crois me faire encore quelques ennemis de plus... Voici un article détaillant les inconvénients d'une migration d'Oracle ou de SQL Server vers PostGreSQL... http://blog.developpez.com/sqlpro/p1...esql-ou-com-2/ Au sommaire : 1 - Aucune gestion des espaces de stockage. 2 - Une gestion des transactions "curieuse". 3 - Un partitionnement plus que léger 4 - Pas de tag (hint) pour forcer les plans de requête 5 - un optimiseur très limité 6 - Une indexation à la traine 7 - Pas de parallélisme des requêtes 8 - Une administration couteuse 9 - pas de pooling des connexions 10 - Pas de vision d'un plan en cours d'utilisation 11 - Un processus de sauvegarde peu performant 12 - Pas de compression ni de cryptage des données 13 - Pas de réplication des données 14 - PostGreSQL reste un bon SGBDR réellement libre 15 - En conclusion Merci d'avance pour vos commentaires. 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 * * * * * |
|
11
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 497 ![]() |
Quelques retours d'expérience personnels qui peuvent éventuellement compléter ton article si tu les juges utiles :
Paragraphe 4 (hints) Effectivement le fait que les hints soient intégrés dans la version payante laisse à penser que jamais la version communautaire gratuite de Postgresql ne les intègrera jamais, au grand regret des DBA ... La seule marge de manoeuvre quand un plan d'exécution est mauvais se situe au niveau des paramètres du serveur (enable_mergejoin, enable_nestloop, enable_seqscan, ...) que l'on peut modifier dans le SQL, ou par login Postgresql. Par exemple si une requête fait un nested loop alors que c'est contre-performant comparé à un hash join, on peut faire avant la requête un "set enable_nestloop to off" Bien que parfois même en modifiant ces paramètres ça n'empêche pas tel ou tel type d'opération ... ![]() Mais ça doit rester exceptionnel, car ça devient vite une usine à gaz si on modifie ces paramètres spécifiquement pour chaque requête Citation:
Autant sur des applications développées "maison" on peut éventuellement chercher à modifier le SQL pour optimiser (et encore, ce n'est pas toujours simple), autant quand on a à faire à un progiciel dont nous n'avons pas la main pour modifier les requêtes, c'est impossible. Et quand un plan d'exécution pourri arrive du jour au lendemain en production et qu'on demande au DBA de trouver une "rustine" rapide, c'est souvent mission impossible et on regrette de ne pas être sur Oracle ou SQL Server Paragraphe 5 (optimiseur) Ca arrive encore trop souvent que les plans d'exécution soient pourris sur Postgresql (même avec des stats à jour et des indexes bien placés) dès qu'on a des requêtes un peu complexes (jointure entre 6-7 tables, auto-jointures, sous-jointures, ...), ou comportant trop de colonnes filtrées sur les tables Le principal défaut est qu'il sous-estime trop souvent les cardinalités (nombre de lignes retournées à chaque étape du plan), ce qui conduit au bout d'un moment : - soit à lui faire choisir des "nested loop" au lieu de "hash join" en cas de jointure - soit à des "index range scan" trop coûteux alors qu'un full scan de la table serait au final meilleur Je pense que ce problème est lié au fait que Postgresql sait très mal évaluer les nombres de lignes retournés pour des filtres qui comportent plusieurs colonnes Là où Oracle ou SQL Server, sur un index (col1,col2,col3), sait faire des stats dessus et savoir estimer, pour chaque valeur du triplet, le nombre de lignes dans la table, Postgresql ne sait le faire que dans de très rares cas, les histogrammes se limitant sur des colonnes uniques et pas des t-uples Paragraphe 10 (plans d'exécution) Oui, tu ne peux que les voir une fois que la requête est exécutée, et encore ce n'est pas en natif, il faut utiliser pour cela la contrib "auto_explain" qui permet de les récupérer dans la trace du serveur Postgresql, même si ce n'est pas toujours lisible facilement et qu'il faut souvent reformater le fichier à la main Autre Concernant la migration de Oracle vers PG (je ne connais pas suffisamment bien SQL Server pour comparer) : tu pourrais aussi éventuellement rajouter un paragraphe sur les principales différences de comportement entre Oracle et Postgresql quand on fait une migration en laissant les paramètres par défaut des 2 côtés, notamment : - mode "autocommit" par défaut sur Postgresql - gestion des NULL différentes (sous Oracle, NULL = chaîne de caractères vide, mais pas sous PG, donc différences de comportement d'une même requête) - conversions de type implicites qui passent sous Oracle mais pas sous PG (test des requêtes d'une appli et réécriture éventuelle à prévoir) - syntaxe des jointures ouvertes (+) spécifique à Oracle - sous PG, mot clé "AS" obligatoire pour renommer les colonnes dans une requête SQL - pas de synonymes ni de packages sous PG - type "date" de Oracle = type "timestamp" de Postgresql - ordre de tri différente selon la casse - PG sensible à la casse sur les noms d'objets Citation:
Postgresql a depuis quelques versions de nombreuses fonctionnalités qui se rapprochent des besoins des entreprises (hot standby, sauvegarde à chaud en continu, fonctions analytiques, ...) Au jour d'aujourd'hui Postgresql peut faire l'affaire pour des petites applications non critiques, à faible volumétrie (quelques dizaines de Go) et à faible complexité (pas de grosses requêtes faisant des jointures sur plus de 5-6 tables) Mais dès qu'on arrive dans des environnements complexes, volumineux ou critiques, Postgresql montre quand-même ses limites, et ça peut vite devenir critique quand par exemple (c'est du vécu) un problème de mauvais plan d'exécution survient en production, la requête vous mange 100% de CPU et dure 15 heures, et qu'aucune rustine rapide n'est envisageable C'est toujours le compromis à trouver entre budget et risque pour une entreprise ...
__________________
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/ |
||
|
|
20
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Intéressant, cela confirme mes modestes expériences et celles que m'ont racontés de nombreux DBA qui ont du migrer...
Puis-je poster ton texte dans le blog, mais un peu différemment ? Je vais créer deux entrées : 1 retour d'expérience tel quel Ton paragraphe "autre" spécifiqaue à Oracle 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
|
|
|
#4 | |||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 177 ![]() |
Citation:
Perso, je trouve que la politique de prix de Oracle n'est pas cohérente, faites venir deux commerciaux différents et vos prix seront différents. Citation:
Je ne suis pas contre de payer pour un produit de qualité et qui répond à mes besoins, mes besoins sont mieux rencontrés par PostgreSQL-PostGis que par Oracle-Spatial (le prix n'est pas innocent). J'ai également vu l'inverse, un déploiement Oracle pour un schéma de quatre tables et 1247 records au total et refus total de migrer vers Oracle Express. Citation:
Peux-tu faire le même article avec Firebird ? MaitrePylos
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|||
|
|
10
|
|
|
#5 | |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 497 ![]() |
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
|
|
|
#6 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
la fonction MakeValid qui n'existe pas dans PG les SRID qui ne sont pas gérés sous PG l'agrégat d'objet spatiaux qui n'existe pas sous SQL Server (faut faire des requêtes récursives. SQL Server 2012 va intégrer les agrégats spatiaux et les courbes. Et en plus c'est gratuit le spatial, car intégré dans toutes les éditions, même Express ! Hélas non, car cela fait des années que je n'ai plus donné dans IB/FB... Et ce serait plus pitoyable encore... 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
|
|
|
#7 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Il y a de nombreuses erreurs montrant que tu ne connais que superficiellement le sujet.
C'est un article à charge, rien qu'au sommaire on sait déjà à quoi s'en tenir. La mauvaise foi déployée est stupéfiante pour arriver à prétendre que "PostGreSQL ne dispose d'aucun mécanisme intégré de réplication des données". |
|
|
10
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
|
|
|
00
|
|
|
#9 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
D'autre part, soit précis dans tes arguments. Tu dis que c'est farci d'erreur, mais tu ne m'en cite qu'une (la réplication) et encore ce n'est pas une erreur, c'est une incompréhension de ta part. L'honnêteté voudrais que tu me sortes quelques arguments techniques, des affirmations tenus sur des sites crédibles, des exemples de code... Mais sans aucun autre argument que d'affirmer que ce je dis dans cet article est un tissus de mensonges... Je pensais que tu étais pragmatique et j'ai l'impression de découvrir un partisan aveugle.... dommage.
__________________
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 ![]() |
Citation:
Pour la définition, celle de wikipedia me convient très bien. Donc quand tu écris "Pas de réplication des données *" l'étoile ramenant à "ah au fait j'ai ma propre interprétation de qu'on appelle réplication des données qui fait que je peux me permettre d'écrire ça", libre à chacun d'apprécier l'honnêteté du procédé. |
|
|
|
10
|
|
|
#11 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Voici ce que j'appelerais les ratés de l'article pré-cité:
- "gestion des espaces de stockage" aucune mention des fichiers WAL qui justement sont l'espace contigu d'écriture qui est si important. Aucune mention du fait qu'une table ou un index ou les WAL peuvent être placés sur n'importe quelle partition et des disques différents. - "une fonction SQL peut encapsuler n'importe quel code SQL du DML". Comment ça du DML? Les fonctions exécutent aussi du DDL et ce DDL est transactionné. C'est une différence essentielle par rapport aux autres SGBDs. - "une fonction = une transaction". Où est le sens de cette affirmation? L'idée c'est qu'une fonction doit impérativement être lancée dans le cadre d'une requête SQL, et pas en-dehors contrairement aux procédures stockées. Du coup une fonction ne peut pas faire un commit ou un rollback, parce qu'on ne fait pas de commit en plein milieu d'une requête. C'est cohérent dans l'architecture. Par contre une fonction peut elle-même lancer des requêtes en tout genre. - "une erreur annule automatiquement une transaction". Seulement dans certaines circonstances. Dans une fonction il suffit d'un BEGIN.. END pour attraper les erreurs et les gérer sans rien annuler, exemple dans la doc avec le INSERT or UPDATE gérant la violation de clef primaire. Dans du SQL hors fonction on utilise des SAVEPOINT si on veut se prévenir d'une annulation totale de la transaction en cours pour une instruction qui part en erreur. C'est seulement si on fait rien de tout ça qu'une erreur termine sans appel la transaction où elle se produit. - l'exemple prétendument "calamiteux" de l'optimiseur qui serait supposé utiliser l'index est fait sur une requête ou l'index n'a pas d'intérêt puisque toutes les lignes de table sont renvoyées. Ca n'est pas un problème de choix de plan et s'il y avait des "hints" ça n'y changerait rien. la raison est que postgres ne sait pas faire des lectures "index seulement", ce sera d'ailleurs faisable dans la prochaine version majeure cette partie étant déjà développée. - "Les seuls paramétrages de PostGreSQL le sont au niveau du serveur" Non puisqu'une session peut à tout moment forcer pour elle seule tous les paramètres réglant l'optimiseur et notamment le forçage d'index ou les stratégies pour les jointures ou les tris. - "VACUUM, bonne à tout faire" la recommandation c'est de ne pas faire de vacuum manuel et de laisser faire auto-vacuum. Le DBA qui lancerait des vacuum manuels à tout bout de champ, il faut simplement qu'il s'abstienne de faire ça. - "pas de pooling des connexions. Ah si en fait mais pas intégré." Certes, et alors? L'intégration ne présente aucun avantage particulier. - "pas de possibilité de paralléliser sa sauvegarde..." la sauvegarde filesystem à chaud est une bête copie de fichiers, rien n'empêche de copier des répertoires en parallèle avec les outils classiques tar, rsync et compagnie. Quant à l'export pg_dump il n'y a pas d'option pour le paralléliser contrairement à pg_restore mais il peut être lancé simultanément sur des objets ou bases différentes. - "pas de sauvegarde différentielle" faux aussi, certains font des rsync à chaud avec une sauvegarde précédente et d'autres sauvent les fichiers de WAL=journaux de transaction qui sont des différentiels par définition. |
|
|
20
|
|
|
#12 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Je dois sans doute est un idiot et ne pas savoir le français, mais il me semble qu'il y a une différence fondamentale entre les termes :
Réplication de données et Réplication de bases de données Le problème est que souvent les gens qui viennent du monde "libre" ne connaissant que très partiellement les bases de données, l’apprennent par des outils qui sont loin d'être complet et pense que la vérité s’appelle MySQL ou PostGreSQL... On n'apprends pas l'informatique en lisant les notices des logiciels, ni les blogs de nerds. PostGreSQL étant très limité en matière de réplication de données (solutions médiocres en terme de performances car basé sur des triggers), je comprends que certains aient des difficultés à saisir la nuance.... Je vous donne la définition de Gardarin sur le sujet de la réplication : Citation:
Prenons un cours de Telecom Paris... Je cite : Citation:
Mais sans doute l'ENST est une obscure école anti logiciel libre... Allons dans un pôle de recherches prendre une défintion de la réplication : 3 Réeplication On veut limiter l'utilisation du réeseau. Une idéee est de travailler sur une copie locale d'une table distante.... http://www.irccyn.ec-nantes.fr/~pauleve/coursbdd4.pdf Mais peut être l'Institut de Recherche en Communications et Cybernétique de Nantes est-il une association de rigolards... 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 * * * * * |
||
|
01
|
|
|
#13 | |||||||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Ha enfin du concret... Merci !
Citation:
La notion de tablespace PG ne fait qu'indiquer un répertoire. Rien d'autre ! Voici la syntaxe PG (v9.1.1): Code :
CREATE TABLESPACE tablespace_name [ OWNER user_name ] LOCATION 'directory' 1) vous ne pouvez pas indiquer une taille minimale de l'espace de stockage 2) vous ne pouvez pas indiquer une taille maximale de l'espace de stockage 3) vous ne pouvez pas indiquer un pas de croissance de l'espace de stockage 4) vous ne pouvez pas ajouter un autre répertoire a un tablespace déja créé 5) vous ne pouvez pas placer un espace de stockage en READ ONLY pour des tables statiques afin d'éviter le verrouillage Toutes ces possibilités existent sur Oracle, SQL Server, IBM Db2, Sybase ASE... Indiquez moi comment vous ferez le jour ou votre tablespace placé sur un disque est saturé ?. Citation:
Citation:
Autrement dit vos propos me confirme ce que j'affirme depuis très longtemps : PostGreSQL ne sait pas faire de procédures stockées ! Citation:
Citation:
Citation:
Citation:
Dans PG VACUUM fait tout d'un coup et pour les grosses bases, c'est très pénalisant... Alors que dans Oracle ou SQL Server on peut le faire en différentes phases à différentes planification. Par exemple vérifier l'intégrité des données une fois par semaine et défragmenter certaines tables/index tous les jours et récupérez de la place qu'une fois par mois... Ceci afin d'éviter des processus très consommateurs de temps qui nuisent aux grosses bases. Pour ce qui est de l'"auto" du vacuum... il existe un mécanisme similaire dans SQL Server pour recalculer les statistiques qui agit en tâche de fond en mode synchrone ou asynchrone. Enfin, toutes les tâches de DBA peuvent être planifiées "On Idle", c'est à dire quand le processeur passe en dessous d'un certains seuil de charge au moins un certain temps... Ceci existe depuis la version 7 de SQL Server datant de 1998. Citation:
Rien à voir avec une lecture en // des données dans la base et une écriture en // sur différents supports, vu que PG ne sait pas faire des lectures // de ses tables. Citation:
Lisez par exemple ceci pour comprendre les différences : http://fr.wikipedia.org/wiki/Sauvegarde Sachez que j'ai été content pour une fois d'avoir un détracteur avec un peu de matière. ça change des rigolo qui affirment votre article est nul, c'est tout faux, sans aucun argument. Je retiens le fait du paramétrage de session que j'ai effectivement omis et vais rectifier mon papier. 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 * * * * * |
|||||||||
|
11
|
|
|
#14 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Bonjour Frédéric,
Je reviens ici, car le climat sera plus calme pour discuter. Citation:
C'était clairement un manque cruel de Postgres, on est d'accord. C'est dommage toutefois d'appuyer cet argument avec cet exemple précis, car il est connu que Postgres ne sait pas utiliser uniquement une lecture d'index pour lire des données (d'où un fullscan pour un SELECT count(*) sur une table). Pour ma part, j'aurai aimé que vous donniez un exemple plus "pertinent". Pertinent dans le sens où vous mettez vraiment en défaut l'optimiseur de Postgres sur un cas qu'il est censé pouvoir traiter correctement. Concernant la gestion de l'espace de stockage, je ne vais pas revenir sur l'ordre CREATE TABLESPACE et tout le toutim. Néanmoins, comme évoqué ailleurs, Postgres vous laisse la gestion du stockage au niveau OS. Une chose me gène néanmoins dans le premier point de votre article (j'essaye d'en avoir une lecture neutre et pas partisane, je précise). Un tablespace va donc bien pointer un répertoire et à vous de vous démerder pour le reste. Mais ce tablespace pointe en général vers un point de montage sur Linux/Unix (désolé, Windows n'est pas ma tasse de thé), et en général, sur un disque physique différent. De cette façon, vous ventilez les I/O sur différents axes. Concernant la gestion des écritures, Postgres va laisser à l'OS la charge de regrouper les pages contigües. On peut toutefois s'attendre à des pics d'écriture à l'issue de chaque CHECKPOINT. Ce n'est pas forcément la panacée, mais la complexité du code dédié aux écritures dans le SGBD diminue significativement. Du coup, en vous lisant, j'ai l'impression que Postgres est en dessous de tout sur ce point de vue là. Pour moi, les choses ne sont pas si noires que le ressenti que j'ai à la lecture de votre article. Pour terminer, j'aimerai juste ajouter une précision par rapport au point 8: VACUUM ne pose aucun verrou sur la table. VACUUM FULL oui. Cf la doc de l'ordre VACUUM. Mais effectivement, je ne vous contredirai pas si vous dites que VACUUM peut être particulièrement pénalisant en terme d'entrées/sorties disque. |
|
|
|
10
|
|
|
#15 | |||||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 177 ![]() |
Citation:
Citation:
De plus, si vous aviez bien lu, ce n'est pas moi qui ait posté cela... ! C'est désagréable de voir que tout le monde s'en prend à moi.. Relisez l'article : Ci joint les commentaires de scheu postés à l'origine dans ce message Citation:
Citation:
Citation:
Pour information, je rédige depuis des mois un article sur ces petites choses qui rendent incompatibles des requêtes ultra simples. A +
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|||||
|
|
10
|
|
|
#16 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 497 ![]() |
En restant objectif sans prendre parti dans ce débat, je tiens à préciser quand-même, de part ma modeste expérience, que, concernant les points cités précédemment :
- le forçage des paramètres niveau session pour combler l'absence de hints est une usine à gaz. D'autant que dans une même session, d'une requête à une autre, les paramètres doivent être changés en cours de route pour s'adapter à chaque requête. Cela revient à dire au développeur qu'avant chaque requête SQL il doit potentiellement modifier 10 paramètres Postgresql à chaque fois (enable_mergejoin, enable_nestloop, enable_seqscan, ...). Bref bon courage ... ! - l'autovacuum de PG est, tout comme le job de calcul automatique des stats sous Oracle ou SQL Server, inutile dans de nombreux cas. En effet, dans un traitement ETL par exemple, qui charge plusieurs tables temporaires avant d'alimenter une table cible, c'est au traitement à lui-même calculer les stats sur les tables temporaires une fois alimentées, sinon les plans d'exécutions seront souvent mauvais car le traitement n'aura pas attendu l'éventuel déclenchement de l'autovacuum en cours de route pour continuer. - le VACUUM full est une calamité, déjà très long, il pose en plus un verrou sur la table. Quand je veux défragmenter une table, je sais que j'aurais plus vite fait de faire un export/import, avec toutes les contraintes qui s'en suivent si la table comporte des triggers, des FK dépendantes, ...)
__________________
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
|
|
|
#17 | |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 497 ![]() |
Citation:
Cette partie concerne les principales difficultés de migration de Oracle vers Postgresql (de part mon expérience personnelle), mais ne constituent en rien un avantage d'Oracle ou un inconvénient de Postgresql. Au contraire pour la plupart ces incompatibilités sont dues au fait que Postgresql respecte beaucoup plus la norme SQL que Oracle C'est plutôt une mise en garde pour les gens voulant faire une migration
__________________
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
|
|
|
#18 | |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 177 ![]() |
Citation:
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
|
00
|
|
|
#19 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2008 Messages : 16 ![]() |
Citation:
En revanche, VACUUM est vivement recommandé pour pouvoir réutiliser l'espace "mort" - l'espace laissé par des lignes mortes. |
|
|
|
00
|
|
|
#20 | |||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
Donc dans PG, il n'y a aucune gestion intégrée des espaces de stockage propre aux bases du SGBDR ! Citation:
MAIS, cela n'apporte pas grand chose pour le SGBDR. Je vous donne un seul exemple (c'est d'ailleurs lié au parallélisme des requêtes que PG ne sait pas gérer)... Imaginez que les données d'une grosse table sur lequel on doit faire une requête de type SUM ne soit pas dans le cache. Imaginez maintenant que l'on ait créé deux espaces de stockage sur deux disques physiques différents (ou agrégats RAID, ou LUN d'un SAN taillé sur une alignement de disques physiques). Comme le SGBDR sait que sa table est répartie sur les deux espaces de stockage son plan de requête va donc être parallélisé pour diviser par deux le temps de réponse global. Un thread va faire la somme des lignes remonté par un disque tandis qu'un autre thread va faire la somme des lignes de l'autre disque. Au final il reste une opération, faire la somme des sommes partielles. En temps CPU on aura perdu car le parallélisme coute, mais en temps réel d'exécution on est pas loin de diviser par deux... Et cela est impossible si c'est effectué par l'OS, car l'OS ne sait pas comment la table est répartie, de même pour un SAN, car le SGBDR ne sait pas que le SAN parallélise. C'est pour cela qu'il existe un OS interne au SGBDR et des routines spéciales de bas niveau en pour les lectures/écritures que le SGBDR effectue. dans SQL Server ou Oracle. En fait tout est lié : l'absence de // est lié à l'absence de gestion des espaces de stockage. Mais il y a d'autres avantage considérable à la gestion des espaces de stockage, comme la réservation physique de l'espace qui évite toute fragmentation physique et permet de créer le fichier sur le meilleur endroit du disque (les cylindres externes). Citation:
L'OS peut donc savoir quels fichiers vont être impacté par une mise à jour des données. Il me semble qu'il lui est en revanche impossible de savoir quelle page dans le fichier doit être impactée. Il est d'ailleurs très amusant de voir que c'est Stonebraker qui a mis en évidence l'algorithme de regroupement des pages à écrire pour les SGBDR (à lire dans : http://www.amazon.com/Readings-Database-Systems-Joseph-Hellerstein/dp/0262693143/ref=sr_1_1?s=books&ie=UTF8&qid=1318494794&sr=1-1) et qui est aussi l'initiateur de PostGreSQL ! Citation:
Citation:
Je rajoute ceci qui montre qu'il verrouille plus mal que je le pensais : http://blog.kimiensoftware.com/2011/06/vacuum-locks-358 ShareUpdateExclusiveLock sur la table + RowExclusiveLock sur chaque index.... Là encore le choix de conception de la non gestion des espaces de stockage comme l'absence de // se fait sentir. Pour info, SQL Server utilise un snapshot pour l'analyse (donc aucun verrou d'aucune sorte) et permet de reconstruire les index en parallèle, ce qui fait que les utilisateurs peuvent continuer d'utiliser l'ancienne version de l'index, la nouvelle remplaçant l'ancienne une fois la reconstruction terminée. Le tout étant fait en // 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 * * * * * |
|||||
|
11
|
Copyright © 2000-2012 - www.developpez.com