Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
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 20/07/2005, 10h50   #1
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Par défaut Tests de perf Oracle/PostgreSQL/MySQL

Bonjour à tous,

J'ai créé 3 schémas différents sous PostgreSQL et trois bases différentes sous Oracle et MySQL qui correspondent aux schémas de PostgreSQL. Pour comparer les performances des SGBDR, j'applique à ces bases 6 requêtes différentes que je vous donne ici:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT nomdossier FROM Dossier WHERE id_dossier = 12500;
SELECT nomdossier FROM Dossier WHERE nomdossier LIKE 'PC%';
SELECT count(DISTINCT nomdossier) FROM Dossier WHERE nomdossier LIKE 'PC%';
SELECT count(DISTINCT nomdossier) FROM Dossier D, Modele M WHERE D.id_modele = M.id_modele AND M.codeADS = 'PC';
SELECT count(*) FROM 
( SELECT d.id_dossier, nomdossier
FROM Dossier D, DossierEtat DE
WHERE D.id_dossier = DE.id_dossier (+)
AND (DE.id_etat = 2 OR DE.id_etat IS NULL));
SELECT DISTINCT D.Id_dossier, DE1.DateLimiteLegale  , DE1.DateLimitePrevue  , DE1.DateEffective  , DE2.DateLimiteLegale  , DE2.DateLimitePrevue  , DE2.DateEffective  , DE3.DateLimiteLegale  , DE3.DateLimitePrevue  , DE3.DateEffective  , DE4.DateLimiteLegale  , DE4.DateLimitePrevue  , DE4.DateEffective  
FROM Dossier D  , DossierEtat DE1 , DossierEtat DE2 , DossierEtat DE3 , DossierEtat DE4 
WHERE D.id_dossier IN 
	(  SELECT DISTINCT DE.id_dossier FROM DossierEtat DE,  Dossier VLD WHERE DE.id_dossier = VLD.id_dossier  AND VLD.CodeADS = 'PC' AND id_etat = 1 
	AND DateEffective BETWEEN to_date('01/12/2002','DD/MM/YYYY')  AND to_date('01/01/2003','DD/MM/YYYY')  
AND DE.id_dossier IN  
	(SELECT DE.id_dossier FROM dossieretat DE WHERE id_etat = 30 AND DateEffective BETWEEN to_date('01/12/2002','DD/MM/YYYY')  
	AND to_date('01/01/2003','DD/MM/YYYY')  
AND DE.id_dossier NOT IN  
	(SELECT id_dossier FROM dossieretat WHERE id_etat = 150 AND DateEffective IS NOT NULL)  
AND DE.id_dossier NOT IN  
	(SELECT id_dossier FROM dossieretat WHERE id_etat = 152 AND DateEffective IS NOT NULL) ) )   
AND D.Id_Dossier = DE1.Id_Dossier (+)  AND DE1.id_etat (+) = 1 AND D.Id_Dossier = DE2.Id_Dossier (+)  
AND DE2.id_etat (+) = 30 AND D.Id_Dossier = DE3.Id_Dossier (+)  AND DE3.id_etat (+) = 150 
AND D.Id_Dossier = DE4.Id_Dossier (+)  AND DE4.id_etat (+) = 152 ORDER BY DE1.DateEffective;
Je sais que la dernière est imbuvable... J'ai adapté les requêtes en fonction du SGBDR que j'utilisait et il n'y a pas d'erreur de syntaxe. J'exécute ces requêtes avec un nombre et une taille de données équivalentes pour chacune des bases (ou schémas) bien entendu. Et je trouve les résultats suivants:
Citation:
Pour la petite base (110 Mo de données):
Oracle: 15ms 16ms 15ms 15ms 31ms 31ms
Postgre: 16ms 16ms 31ms 31ms 31ms 31ms
Mysql: 16ms 02ms 05ms 03 ms
Comme les deux dernières requêtes sont des requêtes imbriquées, elles ne sont pas prises en compte par MySQL.
Citation:
Pour la moyenne base (2Go de données):
Oracle: 15 ms 16 ms 47 ms 140 ms 500 ms 859 ms
Postgre: 15ms 265ms 125ms 141ms 1391ms 1072ms
MySQL: 03 ms 30 ms 20 ms 22 ms
Citation:
Pour la plus grosse base (8 Go de données):
Oracle: 15 ms 16 ms 700 ms 1 s 2 s 4 s
Postgre: 16ms 1735ms 750ms 0.92s 4.34s 14s
MySQL: 06 ms 1.20s 6.89s 7.41s
Et là, on voit bien que MySQL est plus performant qu'Oracle sur la petite et la moyenne base alors cela m'étonne beaucoup et je voulais savoir si c'était normalou si il y a quelque chose (un facteur par exemple) que j'ai négligé.

J'attends vos réponses à ce sujet. Peut-être que quelqu'un a pu trouver des résultats similaires.
Merci d'avance
champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 13h44   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
est-ce que tu as créé des indexes ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 14h18   #3
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Oui,

les index sont créés et présents sur chacunes des bases ou schémas. En fait, quel que soit le SGBDR, les bases (ou schémas) ont la même structure et les mêmes contraintes. C'est pour ça que je ne comprends pas. Je pensais avoir des résultats où Oracle était le plus performant et MySQL était le moins performant.

Voilà
champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 16h32   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est effectivement très étonnant, que MySQL soit plus performant pourquoi pas mais surement pas avec un tel écart. T'es sûr que les indexes sont bien utilisés ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 16h52   #5
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Sous Oracle et PostgreSQL je suis sur que oui car j'ai vu le plan d'exécution des différentes requêtes mais par contre je n'ai pas vu sous MySQL.
Je vais voir ça.
Il n'a peut être pas le même plan d'exécution.

@+
champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 17h00   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
les stats sont calculées ? Tu peux montrer le plan Oracle STP ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 17h35   #7
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
En fait je croi que j'ai trouver d'où ça vient.
Il s'agirait d'une erreur d'uniformisation d'écriture de temps .

Je m'explique. Les "requêteurs" d'Oracle et de MySQL écrivent les temps sous la forme:
00:00:00.00 (heure, minute, secondes, millisecondes) et c'est de là que vient le hic. Si on se réfère aux grandeurs, on voit qu'une seconde est égale à 1000ms (1ms=10^(-3)s)
Or sous Oracle (SQL plus) cette règle n'est pas respectée. Si on trouve un temps égale à 0.31 s, ça correspondra à 31 ms et non à 310 ms. Mais par contre Mysql applique cette règle ce qui veut dire que quand je trouve un résultat d'exécution à 0.03s cela correspond à 30 ms. Je m'en suis rendu compte quand j'ai fait les tests par le lien ODBC.

J'espère que tu as tout compris.
A la prochaine .
champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 20h09   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
non 0.31 = 310ms... même sous Oracle

comment tu affiches ces temps ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 22h49   #9
Membre éprouvé
 
Inscription : mai 2003
Messages : 494
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 494
Points : 455
Points : 455
Citation:
Comme les deux dernières requêtes sont des requêtes imbriquées, elles ne sont pas prises en compte par MySQL
si MySQL ne prend pas en compte certaines requêtes, c'est pas un peu normal que ca va plus vite ?
Moins on en fait, plus vite on va non ?
titides est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2005, 14h45   #10
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Citation:
Envoyé par orafrance
comment tu affiches ces temps ?
En fait, sous SQL + tu tappes la requête set timing on pour avoir le temps qui s'affiche et ensuite tu tappes ta requête. Moi, j'ai remarqué la différence quand je suis passée par l'intermédiaire de l'ODBC. J'avais des temps quasi équivalent sous Postgre alors que ce n'était pas le cas sous Oracle. Et si j'applique la solution plus haut, on trouve des ecarts similaires pour Oracle comme pour PostgreSQL. Et c'est pareil avec MySQL quand j'applique la solution énoncée plus haut. Sinon et si je suis ton raisonnement, la requête serait plus rapide à effectuer avec le pilote ODBC que sans le pilote. Je suis perdue
Citation:
Envoyé par titides
si MySQL ne prend pas en compte certaines requêtes, c'est pas un peu normal que ca va plus vite ?
En fait, je regarde les temps d'exécution de chacunes des 6 requêtes que j'exécute. Dans les requêtes 5 et 6, j'ai des sous requêtes. Donc je ne peut donc pas avoir de résultats pour les deux dernières requêtes. Mais les tests que je fais ici sont sur une requête indépendante de toutes les autres. Je ne sais pas si je me suis bien exprimée mais bon...

Voilà.
@+
champijulie[/quote]
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2005, 16h31   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par champijulie
En fait, sous SQL + tu tappes la requête set timing on pour avoir le temps qui s'affiche et ensuite tu tappes ta requête.
ha OK, je comprend

Citation:
SQL> set timing on
SQL> select sysdate from dual;

SYSDATE
--------
21/07/05

Ecoulé : 00 :00 :00.01
En effet c'est heure : minute : seconde . centiseconde

Oracle aime bien les centisecondes

Donc en effet 00.01 = 0 s et 1 cs soit 10 ms

Ca donne quoi les temps du coups ?

PS : non, ODBC est plus lent bien entendu
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2005, 17h12   #12
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Donc maintenant, les temps ça donne:
j'ai mis pour simplifier:
O pour Oracle, P pour postgreSQL et M pour MySQL
Tous les temps sont en millisecondes
Citation:
Pour la petite base:
O:15 16 15 15 31 31
P:16 23 16 16 31 31
M:16 60 50 30 00 00
Pour la base moyenne:
O:15 016 047 140 0500 0860
P:15 250 110 140 1390 1200
M:30 300 200 220 0000 0000
Pour la grosse base:
O:15 0016 0700 1000 2000 04000
P:15 1730 0750 0900 4340 14000
M:60 1200 6890 7410 0000 00000
Voilà les résultats que j'obtiens et les courbes ont le même aspect par les connections ODBC avec des temps un peu plus important mais pas beaucoup plus.
Donc je pense que c'est OK .
Je ferais plus attention la prochaine fois .

@+
champijulie
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2005, 19h04   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
winner is Oracle 8)
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2005, 19h32   #14
Membre éprouvé
 
Inscription : mai 2003
Messages : 494
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 494
Points : 455
Points : 455
Citation:
Envoyé par orafrance
winner is Oracle 8)
il est content le p'tit Orafrance
titides est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 11h46   #15
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
C'est normal que le winner sois Oracle.
Il est plus complet.
De toute façon, on ne peut pas avoir deux produits avec les mêmes performances et les mêmes possibilités avec une aussi grande différence de prix...
Mais moi je vois une bonne chose. Ces performances sont les résultats finaux de mon stage donc j'ai réussi ma mission...

@ la prochaine (pas avant septembre... vive les vacances )
champijulie

PS: Continuer ce sforum, c'est vraiment super pour se former. On y aprrends plein de trucs.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2005, 16h09   #16
Membre chevronné
 
Avatar de Maître Kenobi
 
Homme arnaud
technicien méthodes, dév web, dév & admin SGBD
Inscription : juillet 2002
Messages : 630
Détails du profil
Informations personnelles :
Nom : Homme arnaud
Âge : 38
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : technicien méthodes, dév web, dév & admin SGBD
Secteur : Industrie

Informations forums :
Inscription : juillet 2002
Messages : 630
Points : 783
Points : 783
moi, ce que je vois, c'est que PostreSQL se place très bien derrière Oracle ! et c'est un sgbd open source en plus !
__________________
Que la Force soit avec vous !
autoformation : MySQL, PostgreSQL, PHP, XHTML, CSS, JQuery, Python.
autoentrepreneur : assistance informatique et internet dans l'oise sur le bassin creillois.
Maître Kenobi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2005, 06h42   #17
Membre expérimenté
 
Inscription : mai 2005
Messages : 414
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 414
Points : 589
Points : 589
ben effectivement la comparaison n'est pas vraiment à faire. Les SGBDR comparées sont tellement différents.

Comparer Mysql et Oracle c'est un peu comparer les vitesses de pointe d'une ferrari et d'une 2CV...

Maintenant si des gens ont les moyens de tester DB2/Oracle/Sql Server, je pense que les résultats seraient intéressants .

je peux pas moi, j'ai que du DB2 sous z/OS et du Oracle sous Unix. Il faudrait comparer sur des plate formes identiques...
gregory.broissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2005, 11h02   #18
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
Par défaut Re: Tests de perf Oracle/PostgreSQL/MySQL

Citation:
Envoyé par champijulie
Comme les deux dernières requêtes sont des requêtes imbriquées, elles ne sont pas prises en compte par MySQL.
MySQL 4.1.12 accepte bien les requête imbriquées non ?
J'aurais bien voulu qu'il donne les versions des SGBD, pas grave toujours sympa comme info.

Je dois faire un entrepôt de données MySQL qui sera attaqué par BO, ça va être poilant. Les utilisateurs vont pouvoir sortir les cartes
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2005, 16h35   #19
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Citation:
MySQL 4.1.12 accepte bien les requête imbriquées non ?
Oui, dans sa version stable depuis l'année dernière.

Le comparatif est très intéressant mais je pense que pour être tout à fait complet il lui manque quelques précisions : hardware utilisé, plateformes, versions, réglages système effectués sur les SGBD (ou non), etc.
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h45.


 
 
 
 
Partenaires

Hébergement Web