TECHNIQUES DE STOCKAGE ORACLE / MYSQL - NFE113 ADMINISTRATION ET CONFIGURATION DES BASES DE DONNÉES 2010 - ERIC BONIFACE
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
NFE113 Administration et configuration des bases de données - 2010 Techniques de stockage Oracle / MySQL 1 Eric Boniface
Oracle Le système de représentation physique assez riche Repose sur une terminologie qui porte à confusion Les termes de « représentation physique » et « représentation logique » pas employés dans le sens vu jusqu’à présent Pour des raisons de clarté, utilisation quand nécessaire de la terminologie d’Oracle pour rester cohérent avec celle déjà vue Un système Oracle = instance, stocke les données dans un ou plusieurs fichiers Ces fichiers entièrement attribués au SGBD 2
Oracle Divisés en blocs dont la taille peut varier de 1K à 8K Au sein d’un fichier des blocs consécutifs peuvent être regroupés pour former des extensions (extent) Ensemble d’extensions pour stocker un objets physiques (une table, un index) = un segment Possibilité de paramétrer, pour un ou plusieurs fichiers, le mode de stockage des données La taille des extensions Le nombre maximal d’extensions formant un segment Le pourcentage d’espace libre laissé dans les blocs Ces paramètres et les fichiers = tablespace 3
Oracle : fichiers et blocs Création d’une base de données attribuer au moins un fichier sur un disque Ce fichier = l’espace de stockage initial qui contiendra, au départ, le dictionnaire de données La taille de ce fichier Choisie par le DBA Dépend de l’organisation physique qui a été choisie Possibilité d’allouer un seul gros fichier et y placer toutes les données/les index Ou bien restreindre ce fichier initial au stockage du dictionnaire et ajouter d’autres fichiers, un pour les index, un pour les données, etc. 4
Oracle : fichiers et blocs Le deuxième type de solution est préférable, mais plus complexe Permet en plaçant les fichiers sur plusieurs disques, de répartir la charge des contrôleurs de disque Pratique courante – recommandée par Oracle : placer un fichier de données sur un disque, un fichier d’index sur un autre La répartition sur plusieurs disques permet aussi, grâce au paramétrage des tablespaces de régler finement l’utilisation de l’espace en fonction des informations – données ou index – qui y sont stockées 5
Oracle : fichiers et blocs Le bloc = la plus petite unité de stockage La taille d’un bloc peut être choisie au moment de l’initialisation d’une base, et correspond obligatoirement à un multiple de la taille des blocs du système d’exploitation Exemple : un bloc sous Linux occupe 1024 octets, et un bloc ORACLE occupe typiquement 4 096 ou 8 092 octets 6
Oracle : fichiers et blocs Structure d’un bloc, identique quel que soit le type d’information Cinq parties suivantes L’entête (header) = l’adresse du bloc et son type Le répertoire des tables = la liste des tables pour lesquelles des informations sont stockées dans le bloc Le répertoire des enreg. = les adresses des enreg. du bloc Un espace libre : pour faciliter l’insertion d’enregistrements, ou l’agrandissement des enregistrements du bloc (p. ex. un attribut à NULL auquel on donne une valeur par UPDATE) L’espace des données contient les enregistrements 7
Oracle : fichiers et blocs Les trois premières parties : espace de stockage pas directement dédié aux données = l’overhead Cet espace, environ 100 octets. Le reste permet de stocker les données des enregistrements. Les paramètres PCTFREE et PCTUSED La quantité d’espace libre laissée dans un bloc : paramètre PCTFREE, lors de la création d’une table ou d’un index Exemple 30% indique que les insertions se feront dans le bloc jusqu’à ce que 70% du bloc soient occupés, les 30% restant réservés aux agrandissements des enregistrements Une fois que cet espace disponible de 70% est rempli, ORACLE considère qu’aucune nouvelle insertion ne peut se faire dans ce bloc 8
Oracle : fichiers et blocs Des modifications (mise à NULL p. ex.) peuvent faire baisser le taux d’occupation du bloc Si ce taux < paramètre PCTUSED le bloc à nouveau disponible pour des insertions PCTFREE = le taux d’utilisation maximal au-delà duquel les insertions deviennent interdites PCTUSED = le taux d’utilisation minimal en deçà duquel ces insertions sont à nouveau possibles Les valeurs de ces paramètres dépendent de l’application, ou plus précisément des caractéristiques des données stockées dans une table particulière 9
Oracle : fichiers et blocs Une petite valeur pour PCTFREE les insertions remplissent plus complètement le bloc meilleure exploitation de l’espace disque Choix valable pour des données rarement modifiées Une valeur plus importante de PCTFREE plus de blocs pour les mêmes données, offre plus de flexibilité pour des mises à jour fréquentes Deux scénarios possibles pour PCTUSED et PCTFREE Dans le premier, PCTFREE=30%, PCTUSED=40% (PCTFREE+PCTUSED
Oracle : fichiers et blocs Le bloc retiré de la liste des blocs disponibles et seules des destructions / modifications peuvent affecter son contenu Si, après mises à jour, l’espace occupé tombe en dessous de 40% bloc disponible pour insertions Acceptation d’avoir beaucoup d’espace inoccupé, au pire 60% Avantage : coût de maintenance de la liste limité Second scénario, PCTFREE=10% (valeur par défaut) PCTUSED=80% Si bloc plein à 90%, plus d’insertions 11
Oracle : fichiers et blocs Mais reprennent dès que le taux d’occupation tombe sous 80% Bonne utilisation de l’espace, mais travail du SGBD plus important (et donc pénalisé) car gestion des blocs disponibles/indisponibles plus intensive De plus, en ne laissant que 10% de marge pour d’éventuelles extensions des enregistrements, risque de nécessité de chaîner les enregistrements sur plusieurs blocs 12
Oracle : enregistrements Suite de données stockées, à quelques variantes près, comme vu Exemple CHAR(n) = un tableau de n+1 octets Le premier octet indique la taille de la chaîne, qui doit donc être comprise entre 1 et 255 Les n octets suivants : les caractères de la chaîne, complétés par des blancs si la longueur de cette dernière est inférieure à la taille maximale VARCHAR(n) : seuls les octets utiles de la chaîne sont stockés. Cas où une mise à jour élargissant la chaîne entraîne une réorganisation du bloc 13
Oracle : enregistrements Chaque attribut précédé de la longueur de stockage Les NULL représentés par une longueur de 0 Cependant, si les n derniers attributs d’un enregistrement sont NULL une marque de fin d’enregistrement, ce qui permet d’économiser de l’espace Chaque enregistrement identifié par un ROWID,en trois parties 1. Le numéro du bloc au sein du fichier 2. Le numéro de l’enregistrement au sein du bloc 3. L’identifiant du fichier 14
Oracle : enregistrements Un enregistrement peut occuper plus d’un bloc, notamment s’il contient les attributs de type LONG chaînage vers un autre bloc Situation comparable à celle de l’agrandissement Migration : enregistrement déplacé en totalité dans un autre bloc, un pointeur dans le bloc d’origine pour ne pas modifier l’adresse de l’enregistrement (ROWID) ROWID peut être utilisée par des index, et une réorganisation totale serait trop coûteuse Migration et chaînage sont pénalisants pour les performances 15
Oracle : extension et segments Extension = suite contiguë de blocs En général, extension liée à un seul type de données Cette contiguïté = facteur essentiel d’efficacité de l’accès aux données car évite les déplacements des têtes de lecture, ainsi que le délai de rotation Nombre de blocs spécifié par l’administrateur Extensions de tailles importantes bonnes performances, mais si la table n’a que peu d’enreg inutile d’allouer une extension contenant des milliers de blocs Utilisation/Réorganisation plus difficiles si extensions de grande taille 16
Oracle : extension et segments Extensions = l’unité de stockage constituant les segments Par exemple si la taille des extensions = 50 blocs un segment = n extensions de 50 blocs chacune Quatre types de segments de données = enreg. des tables, 1 par table d’index = enreg. des index ; il y a un segment par index temporaires = utilisés pour des données pendant l’exécution des requêtes, par exemple pour les tris rollbacks = informations permettant d’effectuer une reprise sur panne ou l’annulation d’une transaction; il s’agit typiquement des données avant modification, dans une transaction qui n’a pas encore été validée 17
Oracle : extension et segments Une extension initiale est allouée à la création d’un segment De nouvelles extensions allouées dynamiquement au segment au fur et à mesure des insertions Pas de garantie de contiguïté Mais une fois affectée à un segment : commande explicite du DBA ou destruction de la table/de l’index, pour que cette extension redevienne libre Sur création d’une extension, pas assez d’espace libre une erreur au DBA d’affecter un nouveau fichier à la base, ou de réorganiser l’espace dans les fichiers existant 18
Oracle : tablespace Tablespace = espace physique de un ou plusieurs fichiers Une base de données ORACLE = un ensemble de tablespace Toujours un créé lors de l’initialisation de la base, et nommé SYSTEM Contient le dictionnaire de données, y compris les procédures stockées, les triggers, etc. L’organisation au sein d’un tablespace : nombreux paramètres TBS SYSTEM taille des extensions Data RBS nombre maximal d’extensions, etc. Idx Dict 19
Oracle : tablespace Définis à la création du tablespace et modifiable Au niveau de tablespace (pas du fichier) que le DBA peut décrire le mode de stockage des données Plusieurs tablespaces, avec des paramètres de stockage individualisés nombreuses possibilités Adaptation du mode de stockage en fonction d’un type de données particulier Affectation d’un espace disque limité aux utilisateurs Contrôle sur la disponibilité de parties de la base, par mise hors service d’un ou plusieurs tablespaces Surtout, répartition des données sur plusieurs disques performances 20
Oracle : tablespace Exemple typique : séparation des données et des index, si possible sur des disques différents optimisation de la charge des contrôleurs de disque Possibilité de créer des tablespaces dédiés aux données temporaires évite de mélanger les enregistrements et ceux temporairement créés lors d’une opération de tri Exemple d’un tablespace en mode de lecture, les écritures étant interdites Toutes ces possibilités flexibilité pour la gestion des données, aussi bien dans un but d’améliorer les performances que pour la sécurité des accès 21
Oracle : tablespace Lors de la création d’un tablespace, paramètres de stockage par défaut des tables/index « par défaut » = si pas de paramètres spécifiés à la création d’une table les paramètres du tablespace Les principaux paramètres de stockage sont Taille de l’extension initiale, défaut 5 blocs Taille de chaque nouvelle extension, défaut 5 blocs Nombre maximal d’extensions avec la taille des extensions, nombre max de blocs pour une table/index Taille des extensions peut croître progressivement, selon un ratio indiqué par PCTINCREASE; valeur de 50% chaque nouvelle extension a une taille supérieure de 50% à la précédente 22
Oracle : tablespace Exemple de création CREATE TABLESPACE TB1 DATAFILE ’fichierTB1.dat’ SIZE 50M Extent 2 + PCTINCREASE DEFAULT STORAGE ( Initial 100K Next 40K = 48K INITIAL 100K NEXT 40K MAXEXTENTS 20, Extent 1 Extent 2 Extent 3 PCTINCREASE 20); Création d’un tablespace TB1, premier fichier de 50 Mo Paramètres du DEFAULT STORAGE Taille de la première extension allouée à une table/un index Taille de la prochaine extension Nombre maximal d’extensions, ici 20 Nouvelle extension 20% plus grande que la précédente 23
Oracle : tablespace Si la taille d’un bloc est 4K Première extension de 25 blocs Une seconde de 10 blocs Une troisième de 10 x 1,2 = 12 blocs etc. La taille maximale l’espace utilisé sera limité et sous contrôle du DBA Mais, le DBA doit être prêt à prendre des mesures pour répondre aux demandes des utilisateurs si une table a atteint sa taille limite 24
Oracle : tablespace Exemple de tablespace avec paramétrage plus souple Pas de limite au nombre d’extensions d’une table Mode « auto-extension » = automatiquement par 5 Mo La taille du fichier limitée à 500 Mo CREATE TABLESPACE TB2 DATAFILE ’fichierTB2.dat’ SIZE 2M AUTOEXTEND ON NEXT 5M MAXSIZE 500M DEFAULT STORAGE ( INITIAL 128K NEXT 128K MAXEXTENTS UNLIMITED); 25
Oracle : tablespace Modification des paramètres pour les futures tables Exemple : modification de TB1 pour extensions de 100K, et nombre maximal d’extensions à 200 ALTER TABLESPACE TB1 DEFAULT STORAGE ( NEXT 100K MAXEXTENTS 200); Actions possibles « hors-service » : sauvegarder une partie de la base ou rendre cette partie de la base indisponible ALTER TABLESPACE TB1 OFFLINE; Lecture seule ALTER TABLESPACE TB1 READ ONLY; Ajout d’un fichier afin d’augmenter sa capacité ALTER TABLESPACE ADD DATAFILE ’fichierTB1-2.dat’ SIZE 300 M; 26
Oracle : tablespace Création d’une base : donner la taille et l’emplacement du premier fichier pour tablespace SYSTEM Création d’un nouveau tablespace création d’un fichier d’espace de stockage initial pour les données Un fichier n’appartient qu’à un seul tablespace, et son contenu est exclusivement géré par ORACLE, même si partiellement utilisé Ne pas affecter un fichier de 1 Go à un tablespace qui contiendra seulement 100 Mo de données, car les 900 Mo restant ne servent alors à rien 27
Oracle : tablespace Utilisation de l’espace disponible dans un fichier pour de nouvelles extensions si la taille des données augmente, ou de nouveaux segments sur création tables/index Si fichier plein (= plus assez d’espace disponible pour créer un nouveau segment/nouvelle extension) message d’erreur au DBA Plusieurs solutions Création d’un fichier et affectation au tablespace Modification de la taille d’un fichier existant Permettre à un ou plusieurs fichiers de croître dynamiquement en fonction des besoins simplification de la gestion de l’espace 28
Oracle : tablespace, inspection Un certain nombre de vues dans le dictionnaire de données pour consulter l’organisation physique d’une base, et l’utilisation de l’espace Vue DBA_EXTENTS donne la liste des extensions Vue DBA_SEGMENTS donne la liste des segments Vue DBA_FREE_SPACE pour mesurer l’espace libre Vue DBA_TABLESPACES la liste des tablespaces Vue DBA_DATA_FILES donne la liste des fichiers Ces vues sont gérées sous le compte utilisateur SYS qui est réservé à l’administrateur de la base 29
Oracle : tablespace, inspection Exemples de requêtes pour inspecter une base Supposition : deux tablespace, SYSTEM avec un fichier de 50M, TB1 deux fichiers de 100Mo et 200Mo Affichage des informations sur les tablespaces SELECT tablespace_name "TABLESPACE", initial_extent "INITIAL_EXT", next_extent "NEXT_EXT", max_extents "MAX_EXT" FROM sys.dba_tablespaces; TABLESPACE INITIAL_EXT NEXT_EXT MAX_EXT ---------- ----------- -------- ------- SYSTEM 10240000 10240000 99 TB1 102400 50000 200 30
Oracle : tablespace, inspection Liste des fichiers d’une base, avec le tablespace SELECT file_name, bytes, tablespace_name FROM sys.dba_data_files; FILE_NAME BYTES TABLESPACE_NAME ------------ ---------- ------------------- fichier1 5120000 SYSTEM fichier2 10240000 TB1 fichier3 20480000 TB1 Espace disponible dans chaque tablespace SELECT tablespace_name, file_id, COUNT(*) "PIECES", MAX(blocks) "MAXIMUM", MIN(blocks) "MINIMUM", AVG(blocks) "AVERAGE", SUM(blocks) "TOTAL" FROM sys.dba_free_space WHERE tablespace_name = ’SYSTEM’ GROUP BY tablespace_name, file_id; 31
Oracle : tablespace, inspection TBS FILE_ID PIECES MAX MIN AVG SUM ---------- ------- ------ ------- ------- ------- ------ SYSTEM 1 2 2928 115 1521.5 3043 SUM = nombre total de blocs libres PIECES = fragmentation de l’espace libre MAXIMUM = espace contigu maximal Ces informations sont utiles pour savoir s’il est possible de créer des tables volumineuses pour lesquelles on souhaite réserver dès le départ une extension de taille suffisante 32
Oracle : création de tables Tout utilisateur avec droits suffisants Notion d’utilisateur et celle de base de données liées Un utilisateur (avec des droits appropriés) a un espace permettant de stocker des tables Tout ordre CREATE TABLE par cet utilisateur une table et des index qui appartiennent à cet utilisateur Possibilité lors de la création d’un profil utilisateur d’indiquer Les tablespaces où il a le droit de placer des tables Son espace total sur chacun de ces tablespaces Son tablespace par défaut 33
Oracle : création de tables Possible dans la commande CREATE TABLE des paramètres de stockage Exemple CREATE TABLE Film (...) PCTFREE 10 PCTUSED 40 TABLESPACE TB1 STORAGE ( INITIAL 50K NEXT 50K MAXEXTENTS 10 PCTINCREASE 25 ); La table stockée dans TB1 Paramètres de stockage spécifiques à la table Film 34
Oracle : création de tables Par défaut une table est organisée séquentiellement sur une ou plusieurs extensions Les index sur la table sont stockés dans un autre segment, et font référence aux enregistrements grâce au ROWID Il est également possible d’organiser sous forme d’un arbre, d’une table de hachage ou d’un regroupement cluster avec d’autres tables Cf. chapitre sur l’indexation 35
MySQL : principes L’architectue MySQL est différente des autres MySQL est suffisament flexible pour pouvoir fonctionner dans des environnements intenses MySQL tourne sur des matériels très différents et supporte des types de données très variés Plusieurs moteurs ou engins de stockage existent Possible d’en charger au lancement Choix table par table Permet de choisir le type de performance, de fonctionnalités, etc. Les connaître 36
MySQL : principes Première couche Contient les composants nécessaires à toute application client/serveur Gestion des connexions, authentification, sécurité, etc. La deuxième couche « L’intelligence » de MySQL Parser des requêtes, analyse, optimisation Cache, toutes les fonctions internes (e.g., dates, math, cryptage) Fonctionnalités trans moteur de stockage : procédure stockées, triggers et vues par exemple 37
MySQL : principes Les moteurs de stockage Responsables du stockage et de la récupération Chacun a des avantages et des inconvénients Le serveur communique avec eux par l’API du moteur Utilisation transparente pour la couche gestion requêtes L’API : plusieurs opérations bas niveau, telles que « début de transaction » ou « récupère la ligne avec cette clé primaire » N’interprètent pas SQL* et ne dialoguent pas entre eux SHOW ENGINES 38
MySQL : moteurs de stockage Source : High performance MySQL (2008) 39
MySQL : moteurs de stockage Base de données (ou schéma) stockée dans un sous répertoire du répertoire de données Création d’une table la définition dans un fichier table.frm La casse dépend du système d’exploitation Chaque moteur gère les données et index différemment Mais le serveur gère la définition 40
MySQL : moteurs de stockage Déterminer le moteur utilisé pour une table SHOW TABLE STATUS mysql> SHOW TABLE STATUS LIKE 'user' \G *************************** 1. row *************************** Name: user Engine: MyISAM Row_format: Dynamic Rows: 6 Avg_row_length: 59 Data_length: 356 Max_data_length: 4294967295 Index_length: 2048 Data_free: 0 Auto_increment: NULL Create_time: 2002-01-24 18:07:17 Update_time: 2002-01-24 21:56:29 Check_time: NULL Collation: utf8_bin Checksum: NULL Create_options: Comment: Users and global privileges 1 row in set (0.00 sec) 41
MySQL : moteurs de stockage Table MyISAM Plusieurs informations & statistiques Name = nom de la table Engine = le moteur de stockage Row_format = le format de la ligne, pour MyISAM, peut être Dynamic, Fixed, ou Compressed Rows = nombre de lignes; sur table non transactionnelle, ce nombre est exact, sinon estimation Avg_row_length = nombre d’octets moyens Data_length = nombre d’octets total de la table Max_data_length = volume max de données pour la table Index_length = espace disque utilisé par les index 42
MySQL : moteurs de stockage Informations (suite) Data_free = espace alloué mais non utilisé Auto_increment = prochaine valeur AUTO_INCREMENT Create_time = date de création Update_time = dernière date de mise à jour Check_time = vérification via CHECK TABLE ou myisamchk Collation = le jeu de caractères Checksum = somme de contrôle de tout le contenu Create_options = toute option spécifiée à la création Comment = informations complémentaires Si MyISAM, commentaires à la création Si InnoDB, espace disque libre total du tablespace Si une vue, le commentaire = « VIEW » 43
MySQL : MyISAM Source : http://dev.mysql.com 44
MySQL : MyISAM Moteur par défaut Bon compromis performance/fonctionnalités Indexage de tout le texte Compression Fonctions spatial (GIS) Pas de transactions ou de lock sur enregistrement Une table un fichier de données (.MYD), un fichier index (.MYI) Le format est indépendant d’une plateforme Copie possible d’un serveur type Intel vers un PowerPC ou Sun SPARC 45
MySQL : MyISAM Tables contiennent soit enregistrements dynamiques ou statiques Le choix suivant la définition Le nombre de ligne max Fonction de l’espace disque disponible Du plus grand fichier créable par l’OS Tables MyISAM sous MySQL 5.0 en taille variable Max 256 To de données Utilise des pointeurs par défaut sur 6 octets Les versions précédents : 4 octets 4 Go MySQL peut gérer un pointeur jusqu’à 8 octets 46
MySQL : MyISAM, fonctionnalités Verrous et accès concurrents Verrou sur toute une table En lecture, verrou partagé sur toutes les tables requises En écriture, verrou exclusif Mais, possible d’insérer pendant l’exécution de SELECT (inserts concurrents) Automatic repair Contrôle et réparation automatique de tables Manual repair CHECK TABLE matable et REPAIR TABLE matable Myisamchk en ligne de commande « offline » 47
MySQL : MyISAM Index features Création d’index sur les 500 premiers caractères d’une colonne BLOB ou TEXT Index « full-text » = mots individuels pour recherches complexes Ecritures de clé retardées, option DELAY_KEY_WRITE Pas d’écriture des index changés à la fin d’une requête Mise en mémoire des changements Vidage sur disque si purge du buffer/fermeture de la table Amélioration de performance sur table très utilisées et changeant souvent 48
MySQL : MyISAM Ecritures de clé retardées (suite) MAIS, si crash, index corrompu Utilisation d’un script avec myisamchk avant le démarrage de MySQL Configurable globalement ou table par table Tables compressées Pour tables ne changeant jamais, ex. applications sur CD/DVD ou embarquées Pour compresser ou « packer » : myisampack Non modifiable a posteriori (sauf à décompresser/modifier/ recompresser) Moins d’espace sur disque, meilleure performance Peuvent avoir des index, mais lecture seule 49
MySQL : MyISAM Merge Variation du moteur MyISAM Une table dite « fusionnée » = combinaison de tables MyISAM identiques dans une table virtuelle Très utile lorsque MySQL sert à Tracer De la collection de données (datawarehouse) 50
MySQL : InnoDB Créé pour le traitement des transactions Principalement, de transactions courtes qui généralement se terminent correctement (pas de roll- back) Le moteur le plus utilisé pour les transactions Ces performances et récupération automatique après incident en font un bon moteur pour des besoins sans transactions Stockage dans un ou plusieurs fichiers de données = tablespace Un tablespace est une boîte noire gérée par InnoDB 51
MySQL : InnoDB Depuis MySQL 4.1, InnoDB peut stocker les données et les index dans des fichiers séparés Peut utiliser des partitions « raw » pour ces tablespace InnoDB utilise MVCC gestion de la concurrence + les 4 standards d’isolation SQL (cf. cours dédié) Les tables utilisent un index dit « clustered index » La structure des index est vraiment différente des autres moteurs fourni une recherche très rapide sur les clés primaires Mais, les index secondaires contiennent la clé primaire; si clé primaire volumineuse autres index larges aussi 52
MySQL : InnoDB InnoDB apporte les contraintes sur les clés étrangères non fournies par le serveur MySQL lui-même Plusieurs optimisations internes Lecture « en-avant » prédictive pour précharger les données du disque Un index « adaptive hash » = construit automatiquement en mémoire pour des recherches très rapides Un tampon d’insertion pour accélérer les insertions Moteur complexe, nécessitant une bonne connaissance pour un usage optimisé 53
MySQL : Memory Source : http://dev.mysql.com 54
MySQL : Memory Tables « Memory » (ou tables HEAP) pour accès très rapides aux données ne changeant pas ou qui peuvent être perdues Un fichier sur disque : la définition, table.frm si redémarrage, la structure est gardée, mais pas les données Exemple d’utilisations Tables de recherches ou de liens, telles que lien codes postaux -> villes Cache des résultats d’une donnée régulièrement recalculée Résultats immédiats pendant l’analyse de données 55
MySQL : Memory Support des index « HASH » très rapides pour des requêtes de recherche Bien que très rapides, ne peuvent remplacer systématiquement des tables sur disque Verrous au niveau table faible concurrence en écriture Pas de support des types TEXT et BLOB Uniquement enregistrements taille fixe VARCHARs stockés comme CHARs perte d’espace Utilisé en interne pour les tables temporaires et les résultats intermédiaires Si devient trop grand, ou comporte des colonnes TEXT ou BLOB conversion en table MyISAM 56
MySQL : Archive Source : http://dev.mysql.com 57
MySQL : Archive Supporte seulement INSERT et SELECT Pas d’index Moins d’I/O que MyISAM « bufferise » les écritures et compresse avec zlib lors de l’insertion Chaque SELECT balayage total de la table Idéal pour tracer et l’acquisition de données Où l’analyse doit balayer toute la table Ou si besoin d’INSERT rapides sur un serveur principal de réplication. Les serveurs secondaires peuvent utiliser un autre moteur pour la même table utilisation d’index pour meilleure performance sur analyse Fichiers de données .ARZ; .ARN pendant les optimisations 58
MySQL : Archive Verrou sur enregistrement + tampon dédié insertion avec haute concurrence Lecture logique = arrêt d’un SELECT après récupération du nombre de lignes qui existaient au début de la réquêtes Insertion retardée = attend que les insertions soient complètes Simule quelques aspects des transactions et de la concurrence MVCC Mais pas un moteur transactionnel Moteur optimisé pour les insertions haute-vitesse et compressées 59
MySQL : Moteur fédéré Ne stocke pas les données localement Toutes les tables « fédérées » font référence à des tables sur un serveur MySQL distant connexion à ce serveur distant pour toutes les opérations Permet de « bidouiller », par exemple la réplication Beaucoup d’inconvénients et de limitations en l’état Surtout utile pour une recherche par clé primaire d’un simple enregistrement ou pour des insertions à distance Peu performant/efficace pour des requêtes d’agrégation, des jointures ou d’autres opérations basiques 60
MySQL : autres moteurs Le moteur Blackhole Aucun mécanisme de stockage Supprime chaque INSERT plutôt que de les stocker Mais trace les requêtes dans son journal traçabilité ou réplication vers un esclave Utile pour des configurations de réplication originales ou journalisation Le moteur NDB Cluster Acquisition en 2003, provient de Sony Ericsson Créé pour de la haute vitesse – temps réel, avec redondance et équilibrage de charge Bien qu’il trace sur disque, toutes les données sont en mémoire et optimisé pour les recherches sur clé primaire 61
MySQL : autres moteurs Le moteur NDB Cluster Ajout depuis d’autres méthodes d’indexation et d’optimisation Architecture unique; un cluster NDB cluster est incomparable à un cluster Oracle par exemple Basé sur un concept « ne partage rien » Pas de baie de stockage réseau ou autre grosse solution de stockage Consiste en des nœuds de données, de gestion et des nœuds SQL (instance MySQL) Chaque nœud data comporte un segment (« fragment ») des données du cluster 62
MySQL : autres moteurs Le moteur NDB Cluster Les fragments sont dupliqués copies multiples d’une même données sur différents nœuds Un serveur physique est habituellement dédié à chaque nœud pour redondance et haute disponibilité Principe similaire au RAID Les nœuds de gestion récupèrent la configuration centralisée, pour la surveillance et le control des nœuds Tous les nœuds data communiquent entre eux et tous les serveurs MySQL se connectent aux nœuds data Une faible latence réseau est importante 63
MySQL : autres moteurs Le moteur NDB Cluster Technologie très attirante ,mais Complexe dans la mise en place et la compréhension N’est pas un moteur de stockage à tout faire Par exemple, les jointures complexes récupération des données à travers le réseau de tout le cluster extrêmement lent Mais la récupération d’une seule table peut être très rapide plusieurs serveurs fournissent en parallèle les données En général pas la solution 64
MySQL : autres moteurs Le moteur Falcon Jim Starkey, un pionnier des DB, inventeur d’Interbase, de MVCC et du type BLOB a créé le moteur Falcon MySQL AB le récupère en 2006 Créé pour du matériel moderne, des serveurs avec plusieurs processeurs 64 bits et plein de mémoire Mais peut aussi fonctionner sur des serveurs plus modestes Utilise MVCC et essaye de faire les transactions entièrement en mémoire Rollbacks et récupération extrêmement rapides Toujours en cours de développement 65
MySQL : autres moteurs Le moteur solidDB Développé par Solid Information Technology (http://www.soliddb.com) Moteur transactionnel utilisant MVCC Supporte le control de concurrence pessimiste et optimiste, qu’aucun autre moteur fait Support complet des clés étrangères Très proche d’InnoDB Capable de sauvegarde en ligne sans charge Existe depuis plus de 15 ans; lié à MySQL depuis 2006 Sous licence GPL, propose une double licence commerciale Inclus dans un paquet avec le serveur MySQL et MyISAM 66
MySQL : choisir Pour une application basée sur MySQL choisir le moteur Sinon, risque de voir après coup, qu’une fonctionnalité vous manque (transactions, verrouillage inadéquate, etc.) Avoir une vision claire de l’usage de chaque table Si possible, éviter de mixer les moteurs dans une base Critères Transactions : InnoDB est le plus stable et le mieux intégrer. Si pas de besoin, MyISAM est un bon choix, surtout si requêtes SELECT/INSERT 67
MySQL : choisir, critères Transactions Si besoin, InnoDB est le plus stable et le mieux intégrer Sinon, MyISAM bon choix, surtout si SELECT/INSERT Accès concurrents Dépend de la charge prévue Si SELECT/INSERT concurrents MyISAM Si mélange d’opérations avec accès concurrents critiques l’un des moteurs avec verrouillage d’enregistrement Sauvegardes Si votre serveur peut être arrêté à intervalles réguliers n’importe quel moteur Online plus difficile 68
MySQL : choisir, critères Récupération après incident Attention : combien de temps prendra la récupération suivant le volume ? MyISAM plus fragile et plus long à réparer que les tables InnoDB tables Fonctionnalités particulières Certains moteurs proposent des fonctionnalités ou des optimisations nécessaires Par exemple, une application qui repose sur l’optimisation par des index « clusturisés » InnoDB et solidDB MyISAM supporte la recherche texte complet 69
MySQL : cas pratique Journalisation Supposons : base MySQL pour tracer tous les appels téléphoniques d’un central en temps réel ou trace de toutes les visites de votre site Web (module mod_log_sql Apache) critère principal : la vitesse Les moteurs MyISAM et Archive car INSERT rapides Problème : vous décidez de faire des rapports ralentissement des INSERT 1ère solution : réplication 2ème solution : table MERGE Gestion de commandes InnoDB Transactions obligatoires Support des clés étrangères 70
Vous pouvez aussi lire