Téléchager le rapport de recherhce - Cégep de Sainte-Foy

publicité
Aubin Jérôme
Gagnon Jean-Michel
Rapport de recherche
Performance d’Oracle et de MySQL
en fonction de leur
architecture fonctionnelle
Travail présenté à
Mme Sylvie Monjal
Nouvelles technologies
420-620-SF
10 février 2005
Département d’informatique
Cégep de Ste-Foy
Tables des matières
Introduction .............................................................................................................................. 1
Début de MySQL ...................................................................................................................... 3
Architecture de MySQL .......................................................................................................... 3
Les fichiers ............................................................................................................................. 3
Les processus .......................................................................................................................... 4
La mémoire ............................................................................................................................ 5
Les influences de l’architecture .............................................................................................. 5
L’exécution d’une requête ...................................................................................................... 5
Indexage : Pourquoi utiliser ce principe ................................................................................. 6
Comment MySQL utilise les index ........................................................................................ 6
Verrouillage .............................................................................................................................. 7
Le fonctionnement du verrouillage ........................................................................................ 7
Les inconvénients du verrouillage de MySQL ....................................................................... 8
Début d’Oracle ......................................................................................................................... 9
Architecture d’Oracle ............................................................................................................ 10
Les fichiers ........................................................................................................................... 10
La mémoire .......................................................................................................................... 11
Les processus ........................................................................................................................ 12
Les influences de l’architecture ............................................................................................ 13
Requêtes de consultation ...................................................................................................... 13
Requête de mise à jour ......................................................................................................... 13
Gestion de la mémoire SGA................................................................................................. 14
Verrouillage .......................................................................................................................... 15
Prototype ................................................................................................................................. 16
Description et but du prototype ............................................................................................ 16
Difficultés rencontrées ......................................................................................................... 16
Evaluation du prototype ....................................................................................................... 17
Résultat de différentes requêtes ........................................................................................ 17
Intégrité physique des données ........................................................................................ 18
Conclusion du prototype .................................................................................................. 19
Comparaison MySQL et Oracle ........................................................................................... 20
Annexe A : Glossaire .............................................................................................................. 23
Annexe B : Algorithme de verrouillage ................................................................................ 25
Algorithme de déverrouillage ............................................................................................... 25
Annexe C : Bibliographie ...................................................................................................... 26
Oracle ................................................................................................................................... 26
MySQL ................................................................................................................................. 26
Annexe D : Médiagraphie ...................................................................................................... 27
Rapport de recherche
Introduction
Les systèmes de gestion de bases de données sont utilisés partout. Nous les retrouvons dans
les instituts bancaires, les systèmes de réservations de salles, les systèmes hospitaliers, au
gouvernement et dans plusieurs autres institutions. Plusieurs transactions sont faites en même
temps dans plusieurs bases de données partout à travers le monde et une gestion très délicate
des données doit être mise en place pour qu’elles ne soient pas corrompues.
Puisque l'utilisation de systèmes de gestion de bases de données par plusieurs utilisateurs en
même temps est très fréquente et que c’est le principal objectif ceux-ci, nous nous sommes
tournés vers la performance des SGBDs en fonction de leur architecture. C’est à dire quelle
est l’architecture de traitement optimale des données. Bien entendu, nous allons parler du
traitement des données simples, mais aussi de la concurrence de deux utilisateurs sur une
même base de données. Les architectures évaluées seront MySQL et Oracle.
Les points importants de notre recherche seront d’expliquer la structure de traitement des
données de chacun des SGBDs. C’est-à-dire comment MySQL et Oracle gèrent les requêtes,
la mémoire et les fichiers. Cela influence directement la rapidité d'exécution de requête de
consultation et de mise à jour. Nous allons de même vous identifier les méthodes utilisées
pour conserver l’intégrité physique des données.
Nous aimerions, par cette recherche, identifier quel SGBD répond le mieux aux besoins des
programmeurs avancés qui recherchent toujours une performance plus accrue en terme de
technologie. Bien entendu, les SGBD n’arrête pas d'évoluer et la guerre entre MySQL et
Oracle est loin d’être finie. Pour l’instant, ces technologies peuvent être mises à l’épreuve sur
leur architecture et c’est ce que nous avons fait. Est-ce que MySQL, ce SGBD téléchargeable
gratuitement sur l'Internet, l’emportera sur le SGBD d’une grande firme très compétitive ?
Est-ce que le petit David l'emportera sur l'impressionnant Goliath ? C'est ce que nous allons
tenter de découvrir dans cette recherche.
Nous n’évaluerons pas les deux SGBDs sur les coûts d’acquisition, les coûts d’entretien et la
simplicité d’utilisation. La performance en fonction d’une plate forme d’utilisation ne sera pas
non plus évaluée (exemple : PHP pour MySQL). Pour MySQL nous n’évaluerons que la
structure de table MyISAM. Pour Oracle, la liaison entre la structure logique et la structure
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 1
Rapport de recherche
physique est très complexe. Nous n'en avons pas tenu compte puisque ce n'était pas nécessaire
pour notre recherche.
Pour effectuer notre recherche, nous avons établit la problématique. Cette problématique est
la difficulté de choisir un système de gestion de base de données qui répond le plus à nos
besoins en terme de performance. Nos objectifs étaient de trouver les points, pour chacun des
SGBDs, qui influencent leur performance. Nous avons donc comparé MySQL à Oracle sur
leur architecture fonctionnelle. Nous voulions réaliser un prototype permettant de vérifier la
performance de ces deux SGBDs. Nous verrons dans la section du prototype pourquoi il n’a
pas été possible de le réaliser comme nous le voulions. Nous avons, par la suite, analysé les
sources d’informations obtenues pour en sortir des conclusions face à la performance. La
partie de recherche sur MySQL se base essentiellement sur les informations fournies sur le
site officiel de MySQL. Celle d’Oracle se base principalement sur une présentation de
maîtrise de Michèle Raphalen.
Nous allons donner des informations techniques sur chacune des deux SGBDs. Nous
parlerons de leur historique, décrirons leur architecture générale et expliquerons comment ils
font pour gérer les requêtes et assurer l’intégrité des données. Ensuite, nous allons faire le
comparatif des deux SGBDs par rapport à leur architecture et aux performances liées à celleci. Nous montrerons les résultats de tests effectués sur un prototype testant différentes
fonctionnalités de MySQL.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 2
Rapport de recherche
Début de MySQL
MySQL AB, une société fondée en Suède par deux suédois et un
finlandais, David Axmark,
Allan Larsson et Michael "Monty"
Widenius, est la société fondatrice de MySQL. Cette société, qui a
été fondée en 1980, est une organisation virtuelle dont les employés
sont répartis à travers le globe.
Au tout début, un groupe d’utilisateurs
voulait se connecter à leurs tables en utilisant
mSQL. Étant un peu déçu de la flexibilité et
de la rapidité de ce programme, ils ont donc
décidé de créer leur propre interface SQL
avec
leurs
propres
algorithmes
pour
l’exploitation de leur base de données tout en gardant les mêmes APIs de mSQL. Depuis, le
succès de MySQL n'a cessé de grandir. Aujourd’hui, c’est un système de gestion de base de
données très souvent utilisé par les grandes entreprises. De plus, il est très souvent lié avec le
PHP ce qui permet de générer des pages Web dynamiques.
Architecture de MySQL
Les fichiers
La structure de fichiers de MySQL est constituée d'un fichier pour les données des tables de la
base de données et d'un autre fichier pour les index. Cette structure de fichiers est assez
simpliste. C’est peut-être un avantage pour des tables de petite taille, mais sûrement un
désavantage pour celles de grande taille.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 3
Rapport de recherche
Les processus
Voici le schéma de la structure de MySQL :
Le gestionnaire de requêtes sert au traitement de requête SQL en général. Il le traite,
l’optimise et prépare un plan d’exécution pour celle-ci.
Le gestionnaire de stockage permet à MySQL de gérer les fichiers sur le disque dur du
serveur. Il communique avec le système d’exploitation pour l’écriture et la lecture d’un
fichier.
La gestion de la mémoire permet de mettre en mémoire des informations sur la base de
données pour un accès beaucoup plus rapide aux données. Nous verrons dans la section
suivante comment la mémoire est gérée.
Le contrôle des transactions facilite les transactions et la concurrence des tables. C’est cette
partie qui gère l’intégrité des données physiques. Nous verrons dans la section
« Verrouillage » comment MySQL procède pour faire un verrou.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 4
Rapport de recherche
Le gestionnaire de fichier de reprise sert à ne pas perdre de données lorsque le serveur de base
de données tombe en panne. Il prévient la perte de données en gardant en copie toutes les
modifications effectuées sur celles-ci avant la panne.
La mémoire
Premièrement, MyISAM est le moteur de base de données qu’utilise MySQL. MyISAM
utilise un système de mémoire tampon pour garder les blocs de table les plus souvent utilisés.
La mémoire tampon est utilisée seulement pour les blocs d’index de MyISAM. La structure
est divisée en plusieurs sections de mémoire qui contient les blocs d’index les plus souvent
utilisés. Les blocs de données les plus souvent sollicités sont, quant à eux, stockés sur la
mémoire virtuelle du disque dur. La grosseur de l’espace mémoire tampon est modifiable
avec la variable système « key_buffer_size ». Si la variable système est à zéro, MySQL
n’utilise pas de mémoire tampon pour stocker les blocs d’index. Il utilise plutôt la mémoire
virtuelle du disque dur comme pour les blocs de données.
Les influences de l’architecture
L’exécution d’une requête
Un principe simple dans l’exécution de requêtes de MySQL est que si votre système de droits
des utilisateurs de la base est compliqué, plus votre performance en sera réduite. S’il n’y a
aucun droit utilisateur sur votre base de données, elle sera beaucoup plus efficace, car MySQL
n’aura pas à parcourir la liste des droits. Si la base de données est volumineuse, il est donc
préférable d’optimiser et de rendre moins complexe votre système de droits pour augmenter la
vitesse d’exécution des requêtes. Les droits d’accès sur les bases de données, les tables et les
colonnes sont enregistrés sur la table « tables_priv » et « columns_priv » de la base de
données de MySQL. À chaque requête de lecture, le système de base de données va vérifier
sur ces tables si l’utilisateur en cours peut accéder à la ressource requise. Donc, MySQL doit
aller consulter une autre table du serveur, c’est-à-dire une autre lecture dans un fichier ce qui
implique un ralentissement de la lecture.
Ce principe est le même pour les limites de ressource. Les limites de ressource sont le nombre
maximum de requêtes par heure, le nombre maximum de mises à jour par heure et le nombre
maximum de connexion par heure pour un utilisateur. Si l’utilisateur a ce genre de limite, le
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 5
Rapport de recherche
système de base de données doit aller mettre à jour ces données à chacune des requêtes que
l’utilisateur fait. Les requêtes de lecture sont aussi comptabilisées.
Indexage : Pourquoi utiliser ce principe
MySQL utilise des index afin de réduire le temps de recherche. Voici quelques applications
concrètes des index :

Les index permettent de trouver plus rapidement les enregistrements qui répondent à
une clause « Where ».

Les index permettent également d’enlever les lignes inutiles à la recherche. Si MySQL
à un choix à faire entre plusieurs index, il prend celui qui contient le moins
d’enregistrements.

Lire les lignes dans les autres tables lors des jointures.

Les valeurs d’une requête peuvent être lues directement sans consulter les données
d’une table si la requête porte sur d’autres index.

Permet de trouver le minimum et le maximum d’une colonne, si elle est indexée, avec
la fonction « MIN() » et « MAX() ». Par exemple:
SELECT MIN(noClient),MAX(noClient) FROM Client where noArticle=10
Si les colonnes noClient et noArticle sont indexées, la recherche se fera beaucoup plus
facilement.
Comment MySQL utilise les index
Les index de MySQL sont les clauses PRIMARY, UNIQUE et INDEX. Le principe des index
est de réduire le temps de recherche des résultats d’une requête de lecture. S’il n’y avait pas
d’index, MySQL devrait lire tous les enregistrements d’une façon successive, c’est-à-dire un
après l’autre, pour pouvoir en sortir les lignes qui répondent à la requête. Alors, plus la table
est grosse, plus la recherche est longue pour MySQL. L’utilité des index étant de réduire le
temps de recherche, il permet à MySQL de ne pas chercher partout dans la table où s’effectue
la requête. Si une table contient 1000 enregistrements, l’opération avec les index pourra être
100 fois plus efficace.
Les index sont stockés sous la forme de B-Trees. La structure B-Trees est utilisée depuis
longtemps dans les systèmes d'indexation des bases de données.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 6
Rapport de recherche
Verrouillage
Le fonctionnement du verrouillage
MySQL, avec l’architecture de table MyISAM, ne permet pas le verrouillage
d’enregistrement simple. Il verrouille plutôt toute la table entière. MyISAM utilise ce type de
verrouillage, car il est conçu pour répondre aux besoins les plus en demande d’une table de
données. Par exemple, les applications courantes font de nombreuses sélections, des ajouts sur
des tables spécifiques, des modifications en fonction des clés et peu de suppression
d’enregistrement.
Le schéma ci-dessous démontre comment MySQL utilise la queue de verrouillage de table :
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 7
Rapport de recherche
Celui-ci illustre le verrouillage d’une table lorsque celle-ci n’est pas verrouillée :
Pour une requête en écriture, si la table est verrouillée, MySQL soumet une demande de
verrouillage dans la queue de verrous d’écriture, sinon, il pose un verrou d’écriture sur la
table. Le principe n’est pas tout à fait le même pour une requête de lecture. Si la table est
verrouillée, MySQL soumet une demande dans la queue de verrous de lecture, sinon, il pose
un verrou d’écriture sur la table. Le verrou d’écriture sert à ne pas permettre aux autres
utilisateurs d’effectuer des requêtes d’écriture en même temps que celle de lecture. MySQL
donne toujours le verrou aux requêtes d’écriture avant celles de lecture. Alors, s’il y a
beaucoup de requêtes dans la queue des requêtes d’écriture, celle de lecture peut attendre un
certain moment.
Les inconvénients du verrouillage de MySQL
Le verrouillage de table comporte plusieurs inconvénients. Par exemple, si plusieurs
personnes sont en train d’effectuer plusieurs lectures sur une table en particulier, ce qui ne
verrouille pas la table, et qu’une requête d’écriture est lancée durant ce temps, celle-ci se
devra d’obtenir un accès exclusif à la table. Lorsque cette requête aura son accès exclusif, les
autres utilisateurs qui exécutent des requêtes de lecture devront attendre la fin des
modifications. De plus, si un autre utilisateur vient pour écrire sur la table, il se verra priorisé,
car MySQL priorise les requêtes en écriture. Toutes les commandes d’écriture se feront avant
celles de lecture ce qui implique un gros désavantage pour MySQL.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 8
Rapport de recherche
Début d’Oracle
Au début des années 70, les bases de données font tranquillement
leurs apparitions. Un chercheur du nom de Codd établit une base
mathématique et théorique solide pour le concept des bases de
données relationnelles. Ces concepts deviendront par la suite
essentiels pour le développement de SGBDs relationnels. Bien
sûr, les concepts de Codd continueront à évoluer avec le temps,
mais ils resteront quand même la base fondamentale.
Par la suite, en se fondant sur ces concepts, la société Relational Software Incorporated
développera le premier SGBD relationnel commercial qui sera appelé Oracle. Par la suite,
cette société changera de nom pour le nom de son propre produit : Oracle. Le premier
prototype d’Oracle sera développé complètement en assembleur. C’est en 1988 que sort
Oracle 6. Cette version d’Oracle est beaucoup plus complète que les versions précédentes.
Elle est plus performante, contient plus de fonctionnalités et peut être utilisée sur un plus
grand nombre de plates-formes. De plus, depuis Oracle 5, Oracle est basé sur une architecture
Client/Serveur.
Pendant les années 90, deux nouvelles
versions d’Oracle s’ajouteront. En 1992,
Oracle
7
est
développé
pour
Unix
principalement. Cette version possède une
architecture
différente
précédentes
ce
qui
des
fait
versions
en
sorte,
principalement, que la mémoire est gérée
différemment. Finalement, en 1996, Oracle 8
fait son apparition. Cette version d’Oracle est une version orientée objet. Au tout début, la
version 8.0 n’est qu’un beta, mais par la suite elle deviendra une version plus complète.
Aujourd’hui, Oracle est l’un des leaders principaux sur le marché des SGBDs. À lui seul,
Oracle possède 40% du marché.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 9
Rapport de recherche
Architecture d’Oracle
L’architecture d’une base de données Oracle contient trois niveaux qui sont les suivants : les
fichiers, la mémoire et le processus. Pour bien comprendre les étapes d’exécution des requêtes
de consultation et celles de mise à jour, il faut auparavant bien comprendre les différents
composants des trois niveaux de l’architecture et les fonctions de chacun.
Les fichiers
Il y a trois types principaux de fichier dans une base de données Oracle.
Il y a les fichiers de données qui contiennent toutes les informations de la base de données.
C’est dans ces fichiers que sont stockés les informations contenues dans les tables, les index
et les caractéristiques de la base de données. Ces informations forment en fait le dictionnaire
de la base de données. L’ensemble de ces fichiers constituent la structure logique de la base
de données Oracle.
Il y a les fichiers de journalisation qui permettent de conserver toutes les opérations de
modification qui ont été effectuées sur la base de données, mais qui n’ont pas encore été
enregistrées. Ils permettent donc en cas de panne matérielle ou logicielle de ne pas perdre les
modifications sur les données, car il y aura lecture dans les fichiers de journalisation ce qui
permettra de récupérer les modifications et données perdues. Une base de données Oracle
contient en général de 1 à 2 fichiers de journalisation.
Finalement, il y a les fichiers de contrôle qui sont en fait à l’opposé des fichiers de données.
Ceux-ci contiennent la description physique de la base de données. Cette description est en
fait le nom de la base de données, les chemins d’accès aux fichiers de données et de
journalisation.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 10
Rapport de recherche
La mémoire
La mémoire d’une base de données Oracle est subdivisée en deux mémoires principales. Il y a
la mémoire PGA(Program Global Area) et la mémoire SGA(System Global Area).
La mémoire PGA contient principalement les variables d’environnement de la session en
cours et est réservée aux processus utilisateurs.
La mémoire SGA(mémoire cache) est elle-même subdivisée en trois zones qui sont les
suivantes : le buffer cache de données, le buffer redo-log et la shared pool.
La première zone, le buffer cache de données, contient toutes les informations sur les données
en provenance de la base ou à destination de celle-ci. Cela veut dire que lorsque l’utilisateur
interroge la base pour avoir accès à des données ou que celui-ci désire insérer des données
dans la base, celles-ci seront conservées dans le buffer cache de données.
La deuxième zone, le buffer redo-log, permet de conserver un suivi des transactions
effectuées sur les données. Cette zone est étroitement liée avec les fichiers de journalisation,
car elle conserve toutes les modifications effectuées. Comment fait-elle pour reconnaître les
différentes modifications ? Elle mémorise le bloc de données modifié, la localisation des
données modifiées dans le bloc et les nouvelles valeurs attribuées aux données.
La troisième zone, la shared pool, contient les différentes informations sur les commandes
SQL. Elles contiennent aussi les informations du dictionnaire, donc le nom des tables et de
leurs attributs.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 11
Rapport de recherche
Les processus
La mémoire et les fichiers d’une base de données Oracle sont gérés par plusieurs processus. Il
serait inutile de les expliquer tous, puisqu’il y en a beaucoup trop et qu’il n’est pas nécessaire
de tous les comprendre pour comprendre les étapes d’exécution des requêtes de consultation
et de mise à jour. Il peut être par contre utile de connaître les deux processus principaux : le
processus utilisateur et le processus serveur. De plus, il est important de savoir que les
processus sont tous gérés par le processeur du serveur contenant la base de données Oracle.
Cela est une tâche très lourde pour le processeur puisque souvent pour une seule requête
plusieurs processus entrent en jeu. Par contre, Oracle a été conçu de façon à répartir plusieurs
tâches sur plusieurs processeurs. Ainsi donc, Oracle s’avère souvent plus rapide sur des
systèmes multiprocesseurs.
Architecture réduite d’une base de données Oracle avec ses trois niveaux : fichiers, mémoire et processus
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 12
Rapport de recherche
Les influences de l’architecture
Requêtes de consultation
Lorsqu’un utilisateur exécute une requête de consultation (Select), le processus utilisateur
prend en charge la requête. L’exécution d’une requête sur la machine de l’utilisateur se fait
toujours à l’aide d’une application, par exemple SQL Plus ou Developer/Forms 2000. Une
fois exécutée sur la machine de l'utilisateur la requête est envoyée au processus serveur pour
être analysée.
Le processus serveur vérifie si la construction de la requête est valide. Pour cela, il consulte la
zone shared pool de la mémoire SGA. Il sera donc possible de compiler la requête envoyée
par le processus utilisateur. Un message de succès ou d’erreur est envoyé par le processus
serveur au processus utilisateur pour indiquer si la syntaxe de la requête est valide.
Si la requête a été compilée correctement, les données recherchées seront envoyées au
processus serveur. Ces données proviennent des fichiers de données. Par la suite le processus
serveur renvoie les données au processus utilisateur.
De plus, le processus serveur envoie les données trouvées dans les fichiers de données à la
zone buffer cache de données. Ainsi donc, si une autre requête demande les mêmes données,
le processus serveur, au lieu d’aller les chercher dans les fichiers de données, ira les chercher
dans la zone buffer cache. Cela fera en sorte que le processus sera beaucoup plus rapide et
cela diminuera la tâche au processeur.
Requête de mise à jour
Lorsqu’un utilisateur exécute une requête de mise à jour (Update, Insert ou Delete), le
processus utilisateur prend en charge cette requête. Comme dans le cas d’une requête de
lecture, la requête, une fois exécutée sur la machine utilisateur, est envoyée au processus
serveur. Elle sera analysée, compilée et un message de succès ou d’erreur sera envoyé au
processus utilisateur.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 13
Rapport de recherche
Une fois que la requête a été compilée avec succès, le processus serveur vérifie si la zone
buffer cache de la mémoire SGA contient les données à modifier. Si elles ne sont pas
présentent dans le buffer cache, le processus serveur les transferts des fichiers de données au
buffer cache sinon il les prend directement dans le buffer cache. Il y a donc toujours une
image des données dans les fichiers de données. Ces images de données jouent un rôle
essentiel dans le fonctionnement d’Oracle. Leurs utilités seront expliquées dans la prochaine
section.
Par la suite, il met un verrou sur le bloc de données à modifier, ce qui empêche d’autres
utilisateurs de faire des modifications en simultanées sur les mêmes données. Après avoir
verrouillées les données, le processus serveur enregistre les modifications à apporter aux
données dans le buffer redo-log. Cela permet de garder une trace des opérations de
modification en cas de panne.
Finalement, le processus serveur modifie les données dans le buffer cache et active un flag
qui permet de savoir que les données en question ont été modifiées correctement.
Gestion de la mémoire SGA
Le processus DBWR est le processus qui s’occupe de gérer le buffer cache de données et de
transférer les données contenues dans celui-ci vers les fichiers de données. Ce processus
regarde constamment si le buffer cache n’est pas saturé de données. Il active le transfert des
données du buffer cache vers les fichiers de données dans deux cas principalement : lorsque le
buffer cache est saturé ou que le processus LGWR s’active. Ce processus sera expliqué plus
loin dans cette même section.
Il est donc important de comprendre que tant que les données ne sont pas transférées vers les
fichiers de données, une image des anciennes données est conservée dans ceux-ci. Il est ainsi
possible de les récupérer en effectuant l’instruction rollback qui permet d’annuler les
dernières transactions effectuées et non enregistrées.
Le processus LGWR gère quant à lui le buffer redo-log. Celui-ci contient, comme nous
l’avons dit précédemment, toutes les modifications qui ont été apportées aux données ce qui
permet de conserver un historique des transactions. Le processus LGWR s’occupe de
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 14
Rapport de recherche
transférer ces informations vers les fichiers de journalisation dans trois cas en particulier :
lorsqu’il y a exécution d’un commit ou d’un rollback, lors de l’activation du processus
DBWR ou encore lorsque le buffer redo-log est saturé.
Verrouillage
Le verrouillage des données se fait lorsqu’un utilisateur effectue une transaction, en d’autres
mots lorsqu’il y a exécution d'une requête de mise à jour (Update, Insert ou Delete) sur un
groupe de données. La lecture (Select) de données n’implique pas de verrous. Oracle permet à
l’administrateur d’une base de données de pouvoir poser des verrous. Il y a deux types de
verrou, les verrous exclusifs et les verrous partagés.
Un verrou exclusif verrouille de façon exclusive une ressource lors d’une demande de
transaction. Il ne pourra donc pas y avoir une autre transaction qui utilise les mêmes
ressources tant que la transaction en cours ne sera pas terminée. Par exemple, un utilisateur
effectue une requête de mise à jour sur la table « Facture », avec le verrou exclusif, aucun
autre utilisateur ne pourra effectuer de transactions de mise à jour sur les données de la table
« Facture », tant que la première transaction ne sera pas terminée.
Un verrou partagé permet de partager une ressource selon les types de transaction qui sont
effectuées sur celle-ci. Il sera alors possible de partager une même ressource, mais il ne sera
pas possible de faire des mises à jour sur les mêmes données. Par exemple, un utilisateur
effectue une transaction sur un groupe de données de la table « Facture », un autre utilisateur
pourra alors effectuer des transactions sur la même table, tant que celles-ci ne sont pas
effectuées sur les mêmes données.
Par défaut, Oracle pose un verrou sur le groupe de données sur lequel est effectuée une
transaction. Lors d’une transaction sur un groupe de données, un flag s’active indiquant
qu’une transaction est en train de s’effectuer sur ce groupe de données. Toutes autres
transactions voulant effectuer une transaction sur un groupe de données avec un flag actif
sont placées dans une file d’attente. Une fois la transaction en cours sur un groupe de
données terminée, le flag est désactivé et la première transaction dans la file d’attente
s’exécute. Des algorithmes simples pour le verrouillage et le déverrouillage sont présentés en
annexe B.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 15
Rapport de recherche
Prototype
Description et but du prototype
Le prototype devait être conçu afin d’évaluer la performance des SGBDs. Nous voulions
exécuter différentes requêtes pour pouvoir déterminer les facteurs qui influencent la vitesse à
laquelle les SGBDs retournent une réponse à une requête. Nous voulions aussi déterminer si
les SGBDs effectuaient une gestion adéquate de l’intégrité physique des données lors de
l’exécution de requêtes de mise à jour simultanées. De plus, nous pensions réaliser un autre
prototype qui consistait à développer notre propre système de gestion de base de données en
gérant un système d’écriture et de lecture. Nous voulions développer un système de protection
contre les interblocages (Deadlock), car il protège l’intégrité des données. Cela nous aurait
été utile pour analyser plus en détail comment un SGBD fonctionne. Nous n’avons pu réaliser
ce prototype à cause du manque de temps. Vous verrez dans la prochaine section les causes
qui ont faites en sorte que nous avons manqué de temps.
Difficultés rencontrées
Nous avons éprouvé plusieurs difficultés lors de la programmation du prototype.
Premièrement, nous n’avons pas été capable de nous connecter à une base de données Oracle
en C++. La seul manière de pouvoir se connecter relativement facilement à ces bases de
données serait de le faire en C++ manager. Cela nous a fait perdre beaucoup de temps de
recherche inutilement, car nous n’avions pas à évaluer la connexion aux bases de données
dans notre recherche. Nous avons donc décidé, vers la fin de la réalisation du prototype, de
réaliser un petit prototype sur « Form Builder », un logiciel permettant de réaliser des
interfaces pour une base de données Oracle. Finalement, nous n’avons pas été capable de
déterminer en millisecondes le temps d’exécution des requêtes. Nous ne réussissions qu’à
déterminer en seconde le temps d’exécution de requête ce qui n’était pas assez précis pour
répondre à nos objectifs.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 16
Rapport de recherche
Evaluation du prototype
Résultat de différentes requêtes
Voici les résultats obtenus lors des requêtes de lecture. Bien sûr, il n’y a pas de comparaison
avec Oracle.
Pour la requête de lecture exécutée plusieurs fois, le requête est : select * from client. Cette
requête est effectuée 10000 fois sur la base de données. La table client contient quatre
colonnes. Nous voyons, avec les résultats ci-dessous, que le temps d’exécution pour MySQL
est d’environ 28 secondes.
Pour la requête de gros volume, la requête est celle-ci :select * from facture. La table facture
contient six colonnes, c'est-à-dire deux de plus que la table client. La requête retourne 10000
enregistrements et nous voyons que le temps d’exécution de la requête est beaucoup moins
long que la précédente, c’est-à-dire près de 40 fois plus vite. Ceci nous confirme le fait qu’à
chaque lecture que MySQL fait, la gestion des droits d’accès et de la mémoire interne se fait
quand même assez lentement. Bien entendu, il y a le temps d’exécution de la boucle à tenir en
compte, mais les résultats comportent une grande différence.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 17
Rapport de recherche
Les autres requêtes sur MySQL n’ont pas vraiment de pertinence dans la recherche, car elles
n’ont pu être comparées avec Oracle.
Intégrité physique des données
Pour tester l’intégrité physique des données, le prototype doit être ouvert deux fois. Une des
instances de prototype prend le rôle du client un et la deuxième prend le rôle du client deux.
La requête d’écriture du client un est exécutée en premier sur la base de données. Puis, le
deuxième client exécute sa requête d’écriture pendant que celle du client un est en train de
s’exécuter
Voici les données initiales de la base de données MySQL :
noArticle
nomArticle
prixArti
cle
rabaisA
rticle
2005-01-01
30
10
Il y a deux
semelles
2005-01-01
30
10
Il y a deux
semelles
2005-01-01
30
10
…
…
…
…
Il y a deux
semelles
2005-01-01
30
10
descriptionArticle
dateAcquisitionArticle
1 Chaussure
Il y a deux
semelles
2 Chaussure
3 Chaussure
… …
10000 Chaussure
La requête du client un est : Update article set nomArticle = 'Espadrilles', descriptionArticle =
'Il sont de marques Nike', prixArticle = 100
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 18
Rapport de recherche
Celle du client deux est : Update article set nomArticle = 'Souliers', descriptionArticle = 'Ils
sont très beau', prixArticle = 50
Une fois le prototype lancé correctement, voici le résultat dans la base de données :
noArticle nomArticle descriptionArticle dateAcquisitionArticle prixArticle
rabais
Article
1 Souliers
Ils sont très
beaux
2005-01-01
50
10
2 Souliers
Ils sont très
beaux
2005-01-01
50
10
3 Souliers
Ils sont très
beaux
2005-01-01
50
10
…
…
…
…
Ils sont très
beaux
2005-01-01
50
10
… …
10000 Souliers
Le client deux semble partir lorsque le client un a fini complètement son écriture sur la table.
Ceci nous confirme que MySQL met un verrou sur la table en entier lorsqu’il exécute une
requête d’écriture.
Conclusion du prototype
Bien sûr, nous aurions aimé évaluer MySQL par rapport à Oracle, car c’est en fait le sujet de
notre recherche. Nous avons quand même été capable d’en sortir des résultats significatifs.
Notre prototype démontre bien le temps que MySQL prend pour allez vérifier, à chaque
requête de lecture, les droits d’accès aux tables. Notre prototype montre que MySQL fait un
verrou sur la table en entier lorsqu’il écrit des enregistrements dans cette même table.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 19
Rapport de recherche
Comparaison MySQL et Oracle
Nous avons vu précédemment l’architecture des bases de données Oracle et MySQL. Il est
donc maintenant possible de juger et de comparer plus adéquatement le niveau de
performance de ces deux SGBDs.
L’architecture
de
MySQL
permet
une
consultation rapide des données tant que le
nombre d’utilisateur utilisant la base de
données est réduit. À chaque requête de
lecture, le système de base de données doit
vérifier les droits des utilisateurs qui sont
conservés dans une table. Cela fait en sorte
que plus le nombre d’utilisateur est élevé
plus le temps d’attente pour la consultation est élevé. Par contre, si le nombre d’utilisateur est
réduit et que le principe d’indexage des données est appliqué de façon adéquate MySQL
s’avère une base de données très rapide pour la consultation de données.
Pour Oracle, la consultation de données est une procédure longue puisqu’elle implique
plusieurs étapes et engendre l’exécution de plusieurs processus ce qui demande beaucoup de
ressources au processeur du serveur. Cette procédure est grandement diminuée si les données
à consulter se trouvent déjà dans le buffer cache. Il faut se rappeler que des données se
retrouvent dans le buffer cache après avoir été consultées ou mises à jour. Cette gestion
efficace de la mémoire fait en sorte que plus il y a d’utilisateur plus le temps de consultation
peut-être diminué, car souvent la mémoire contient déjà les données à traiter. La façon dont
Oracle gère sa mémoire est en fait son point fort. Comparativement à MySQL, Oracle
n’utilise jamais la mémoire virtuelle du disque dur.
Maintenant, la gestion des données et des tables lors de requêtes de mise à jour est
complètement différente. MySQL effectue des verrouillages sur des tables entières tandis que
Oracle permet de verrouiller que les données concernées par une requête de mise à jour. Cela
peut donc ralentir l’exécution des requêtes d’écriture sur MySQL et avantager dans ce cas
Oracle.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 20
Rapport de recherche
De plus, MySQL empêche la lecture sur une table verrouillée, ainsi donc il est impossible de
visualiser toutes données concernant la table verrouillée. Oracle ne procède pas ainsi, il est
possible de visualiser un bloc de données verrouillé. Cela est un avantage et un inconvénient
pour les deux SGBDs. Pour Oracle, lorsqu’un utilisateur visualise des données qui sont en
cours de modification, celui-ci ne voit pas les données modifiées, mais il voit les données
avant les modifications cela ne respecte donc pas l’intégrité réelle des données. Pour MySQL,
puisque c’est la table au complet qui est verrouillée, il n’est pas possible de visualiser les
données qui ne sont pas en cours de modification et cela augmente le temps d'attente pour la
consultation.
Comparaison de Oracle et de MySql
Rapidité petites Bases
100%
Oracle
MySql
80%
Standard
60%
Rapidité grandes Bases
40%
20%
0%
Facilité de mise en œuvre
Fonctionnalitées
Sécurité des données
Tableau comparatif conçu par Alexandre Fachhin
Ce tableau compare MySQL et Oracle sur différents points. Il est facilement remarquable que
Oracle est plus rapide sur de grandes bases et MySQL beaucoup plus rapide sur de petites
bases. On entend par grande base, une base qui gère une importante quantité de données
(plusieurs millions d’enregistrement) et qui gère plusieurs utilisateurs(des centaines et même
des milliers). Ainsi donc, MySQL est plus efficace sur de petites bases et avec peu
d’utilisateur contrairement à Oracle qui est plus rapide sur de grande base. L’architecture et la
façon dont chacun traire et gère les données montre clairement que ces deux SGBDs n’ont pas
été développés dans le même but. Est-ce que David l’a emporté sur Goliath ? Il serait injuste
de favoriser l’un ou l’autre, il est seulement de savoir que ces deux SGBDs ne répondent pas
aux mêmes besoins.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 21
Rapport de recherche
En terminant, à l’aide des connaissances acquises, nous aurions grandement aimé développer
un système de gestion de base de données par nos propres moyens. Un système séparé en
plusieurs modules généralement utilisés dans un SGBD. Nous aurions pu essayer de
développer et d’optimiser les processus permettant la gestion des requêtes, la gestion de la
mémoire, la gestion des droits d’accès aux tables et aux enregistrements, la gestion des
fichiers de reprise et le stockage des données. Cette recherche prendrait beaucoup plus
d’heures, mais elle serait très constructive et permettrait de mieux comprendre toutes les
interactions qu'effectue un SGBD avec les autres composantes d'un ordinateur.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 22
Rapport de recherche
Annexe A : Glossaire
B-Tree :
Méthode de structuration pour le stockage et l'accès aux données. Elle consiste à diviser les
possibilités de choix en deux parts égales et établir des pointeurs vers les deux sous-blocs. De
cette façon, pour rechercher un élément, on le compare d'abord avec l'élément de la tête de
l'arbre. Si l'élément recherché est celui-là, la recherche est terminée, si non soit elle est plus
grande, soit plus petite ; dans l'un ou l'autre cas on continue la recherche dans le sous-bloc
correspondant en utilisant le pointeur approprié.
Commit :
Sous environnement Oracle, cette instruction permet d’enregistrer les transactions qui ont été
effectuées sur les données d’une base. Aussi longtemps que cette instruction n’est pas
exécutée les modifications apportées aux données ne sont pas enregistré de façon permanente.
Flag :
Variable qui permet de connaître l’état d’un élément (exemple : une table). Cette variable
peut, par exemple, prendre la valeur 0 lorsqu’une table est verrouillée et
la valeur 1 lorsque celle-ci est disponible.
Interblocage :
Un ensemble de processus est en interblocage si et seulement si tout processus de l'ensemble
est en attente d'un évènement qui ne peut être réalisé que par un autre processus de
l'ensemble.
Jointures :
Association entre champs de même type se trouvant dans des tables différentes.
Mémoire cache :
Cette mémoire sert de tampon pour le processeur. Le processeur y stocke les informations
qu’il utilise le plu souvent, ce qui permet de réduire le temps d’attente lors d’exécution de
processus.
MyISAM :
Moteur de base de données a accès séquentiel indexé.
Transaction :
Une transaction est une séquence de mise à jour effectuée sur les données d’une base.
L’exécution de requêtes de mise à jour (Update, Insert ou Delete) sont en fait des
transactions.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 23
Rapport de recherche
Rollback :
Sous environnement Oracle, cette instruction permet d’annuler les transactions qui ont été
effectuées sur les données d’une base. Aussi longtemps que l’instruction Commit n’est pas
exécutée, il est possible d’annuler les transactions effectuées.
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 24
Rapport de recherche
Annexe B : Algorithme de verrouillage
g : groupe de données
tr : transaction
Début
Si g n’est pas verrouillé Alors
Mettre un verrou sur g ;
Sinon
Mettre tr dans la file d’attente correspondant à g ;
Suspendre la transaction en attente ;
Finsi
Fin
Algorithme de déverrouillage
g : groupe de données
//Cet algorithme est appliqué à la fin d’une transaction
Début
Supprimer le verrou sur g ;
Pour chaque transaction dans la file d’attente associée à g faire
Si g n’est pas verrouillé alors
Enlever la transaction de la file d’attente ;
Exécuter la transaction qui vient d’être retirée de la file ;
Finsi
FinPour
Fin
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 25
Rapport de recherche
Annexe C : Bibliographie
Oracle
http://www.informatique.weka.fr/affichage/dispMain.asp?ngcmid=WK181020201
http://www-valoria.univ-ubs.fr/Michele.Raphalen/cours/bd2.pdf
MySQL
http://www.lephpfacile.com/manual_mysql/manual.fr_MySQL_Optimisation.php
http://images.google.fr/imgres?imgurl=http://www.swen.uwaterloo.ca/~rekram/files/imag
es/arch_assgn1_level1.gif&imgrefurl=http://www.swen.uwaterloo.ca/~rekram/files/cs798
_assignment_1.htm&h=377&w=509&sz=8&tbnid=RgJciuGK4Q8J:&tbnh=94&tbnw=127
&start=3&prev=/images%3Fq%3Darchitecture%2Bde%2BMySQL%26hl%3Dfr%26lr%3D
lang_fr%26sa%3DN
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 26
Rapport de recherche
Annexe D : Médiagraphie
http://www.moskalyuk.com/download/benchmarking_loaders.doc
http://sheikyerbouti.developpez.com/optimisation/optimisation.pdf
http://www.fortunecity.com/skyscraper/oracle/699/orahtml/oreview/cursors.html
http://www.eweek.com/article2/0,4149,293,00.asp
http://fadace.developpez.com/sgbdcmp/
http://database.in2p3.fr/NewComparatif.html
Performance d’Oracle et de MySQL en fonction de leur architecture fonctionnelle
Page 27
Téléchargement