SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
http://dasini.net/blog/  Olivier DASINI
                   Forum PHP Novembre 2007




           Optimisation
               de
             MySQL
               http://dasini.net/blog/
                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   1
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                Votre conférencier




     Olivier DASINI
     Formateur certifié MySQL
     Consultant technologies Open Sources

      olivier@dasini.net




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   2
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                Au programme...


   ●   Introduction
   ●   Pourquoi optimiser ?
   ●   Comment
   ●   Architectures de la base de données
   ●   Créer des requêtes rapides
   ●   Optimisation du serveur MySQL
   ●   Questions / Réponses



                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   3
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                Introduction


   ●   Quel SGBD utilisez-vous ?
   ●   Quel système d'exploitation ?
   ●   Versions de MySQL utilisées ?
   ●   Quels sont vos besoins ?




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   4
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                Introduction


   ●   MySQL est le SGBDR open source le plus
       populaire
   ●   MySQL à une double licence (GPL et
       commerciale
   ●   Une multitude d'outils (Administrator, Query
       Browser, Migration Toolkit, mysqlslap, ...)
   ●   S.E. supportés: beaucoup (Linux, Solaris,
       Windows, FreeBSD, Mac OS X, ....)



                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   5
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                 Pourquoi optimiser ?


   ●   Tirer le maximum du matériel disponible
   ●   Répondre à un accroissement des données
       et/ou de la charge
   ●   Plus facile et moins couteux que de recoder
       l'application
   ●   Satisfaire l'utilisateur final (et le boss :) )




                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   6
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                  Comment


   ●   Écrire des requêtes performantes
       –   Avec des index pertinents
       –   La différence de performances peut être importante
   ●   Choisir le moteur de stockage adéquat
       –   Toutes les données ne se valent pas
       –   A chaque besoins, son moteur
   ●   Choisir les bons types de données
       –   MySQL possède un choix important de types de
           données
       –   Chaque type à un coût de stockage !
                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   7
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                 Comment


   ●   Paramétrer de façon optimale son serveur
       MySQL
       –   Changer un paramètre a la fois
       –   Les changements ne sont pas forcement
           immédiats
       –   Les gains sont rarement spectaculaires
   ●   Tester et superviser son serveur MySQL
       –   Tester avec un jeu de données réaliste
       –   Superviser pour détecter et anticiper les
           problèmes
                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   8
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Normaliser (3ème forme normale)
       –   Éliminer les données redondantes
       –   Avoir des tables plus petites
       –   Optimiser les jointures
       –   Permettre à l'optimiseur d'être plus
           performant




                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   9
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                      Architectures de la base de données


   ●   Dénormaliser
       –   Supprimer les jointures (ENUM, SET,...)
            ●   CREATE TABLE country (
                  Code char(3) NOT NULL DEFAULT '',
                  Continent enum('Asia','Europe','North
                America','Africa','Oceania','Antarctica'
                'South America') NOT NULL DEFAULT 'Asia',
                ...
       –   Stocker des données calculée
       –   Ajouter des colonnes (auto_increment,...)
       –   Table de résumé (snapshot)
            ●   Problème: gérer les mises à jours
       –   Schéma en étoile...
                                     Optimisation de MySQL
                             Olivier DASINI - http://dasini.net/blog   10
                                   Forum PHP Novembre 2007
http://dasini.net/blog/

                    Architectures de la base de données


   ●   Choix du bon type de colonne
       –   MySQL à un large choix de types de données
       –   Adapter le type à la taille des données
            ●   code_postal CHAR(5) et non VARCHAR(255)
            ●   UNSIGNED
       –   La clause NOT NULL
            ●   Risque de problèmes d'intégrité
            ●   Surcoût inutile pour MySQL
   ●   procedure analyse()
       –   SELECT col1, col2 FROM ma_table PROCEDURE
           ANALYSE();
                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog   11
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                Architectures de la base de données


   ●   Architecture à moteurs de stockage modulaire
                                             MySQL
                                  Database Management Level


                                                                       Retrieve
                     Parse                  Optimize
                                                                           1
                                                                        Store




                             Pluggable Storage Engines




                 MyISAM       InnoDB          MySQL           Memory      Other ...
                                              Cluster




                                     Optimisation de MySQL
                             Olivier DASINI - http://dasini.net/blog                  12
                                   Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Propriétés qui dépendent du moteur de stockage
       –   Support de stockage
       –   Support des transactions
       –   Type de verrou
       –   Sauvegarde & restauration
       –   Optimisation
       –   Fonctionnalités




                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   13
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Bien choisir son moteur de stockage
       –   MyISAM
       –   InnoDB
       –   Memory
       –   Archive
       –   NDBCluster
       –   Autres...



                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   14
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Bien choisir son moteur de stockage: MyISAM
       –   Moteur de stockage par défaut
       –   Très rapide (insert, select count(*))
       –   Verrou niveau table
       –   Prend peu de place (40% de moins qu'InnoDB)
       –   Index fulltext
       –   Possibilité de SELECT & INSERT non bloquant
           concurrent_insert=2
       –   Très portable
       –   Statique, Dynamique, compressée
                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   15
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                   Architectures de la base de données

   ●   Table MyISAM dynamique
       –   Contient au moins un champs de type dynamique (CHAR,
           VARCHAR, TEXT)
       –   Prend moins de place sur le disque
       –   Fragmentation => OPTIMIZE TABLE
   ●   Table MyISAM statique
       –   Plus rapide, plus robuste
       –   Pas de fragmentations, mais prend plus de place sur le
           disque
   ●   Table MyISAM compressée
       –   Lecture seule
       –   Gain de place de l'ordre de 70%
                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog   16
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                 Architectures de la base de données


   ●   Bien choisir son moteur de stockage: MyISAM
       –   Moteur non transactionnel
       –   Pas de « Crash recovery »
       –   Pas de sauvegarde cohérente non bloquante
       –   Pas de support des clés étrangères (6.x ?)




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   17
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                 Architectures de la base de données


   ●   Bien choisir son moteur de stockage: InnoDB
       –   Moteur transactionnel ACID
       –   Verrou niveau enregistrement
       –   Support des clés étrangères
       –   Crash recovery
       –   Multi-versionning (MVCC)
       –   Sauvegarde cohérente non bloquante à
           chaud (physique & logique)


                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   18
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Bien choisir son moteur de stockage: InnoDB
       –   Pas de support de full-text
       –   Sauvegarde physique cohérente non
           bloquante à chaud payante (InnoDB Hot
           Backup)




                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   19
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Bien choisir son moteur de stockage: Memory
       –   Données et index stockés en mémoire
       –   Très rapide (un accès mémoire 1 million de fois
           plus rapide qu'un accès disque)
       –   2 algorithmes d'index hash & b-tree (MySQL
           4.1+)
       –   Utiliser init-file pour peupler les tables
           Memory au démarrage de MySQL



                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   20
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


   ●   Bien choisir son moteur de stockage: Memory
       –   Données perdues lors de l'arrêt du serveur
       –   Pas de full-text
       –   Pas de blob ou de text
       –   Pas transactionnel
       –   Pas de clés étrangères
       –   Verrou niveau table



                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   21
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                 Architectures de la base de données


   ●   Bien choisir son moteur de stockage: Archive
       –   Stockage de grands volumes de données en
           les compressant (70% de réduction)
       –   Seulement SELECT, INSERT
       –   Pas d'index
       –   Verrou niveau ligne




                                 Optimisation de MySQL
                         Olivier DASINI - http://dasini.net/blog   22
                               Forum PHP Novembre 2007
http://dasini.net/blog/

                  Architectures de la base de données


  ●   Bien choisir son moteur de stockage: NDBCluster
      –   Moteur transactionnel
      –   Haute disponibilité
      –   Scalabilité
      –   Verrou niveau ligne




                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   23
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                     Architectures de la base de données


  ●   Bien choisir son moteur de stockage: CSV
      –   Stock les données au format csv
          (nom_table.csv)
      –   N'accepte pas d'index
      –   Non transactionnel
      –   Le fichier peut être lu avec
           ●   OpenOffice.org Calc
           ●   Microsoft Excel



                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog   24
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                      Architectures de la base de données


  ●   Bien choisir son moteur de stockage: Autres...
      –   Falcon
           ●   Transactionnel
           ●   Verrou ligne
      –   SolidDB
           ●   Transactionnel
           ●   Verrou ligne
      –   PBXT
           ●   Transactionnel
           ●   Verrou ligne
      –   ... le votre (?)
                                      Optimisation de MySQL
                              Olivier DASINI - http://dasini.net/blog   25
                                    Forum PHP Novembre 2007
http://dasini.net/blog/

                 Architectures de la base de données


  ●   Utiliser plusieurs moteurs de stockage
      –   Données statiques en MyISAM
      –   Données dynamiques critiques en InnoDB
      –   Tables temporaires, tables résumés en Memory
      –   Données d'archives (log) en... Archive
      –   ...
      –   ALTER TABLE <nom_table> ENGINE=<moteur>




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   26
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                 Architectures de la base de données


  ●   Utiliser plusieurs moteurs de stockage: inconvénients
      –   Configuration plus compliquée
      –   Partage de la RAM : moins d'espace pour
          chaque moteur
      –   Jointure entre moteurs transactionnels et non
          transactionnels




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   27
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                   Les index


  ●   But:
      –   Accélérer les accès en lecture à la base de
          données
      –   Renforcer la cohérence de la base avec des
          contraintes
  ●   Critères:
      –   Pertinence de l'index (cardinalité, utilisé ?)
      –   Unique, non unique ?
      –   Alorithme (BTREE / HASH)


                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   28
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                 Les index: attention !


  ●   Compromis entre vitesse et maintenance
  ●   Risque de ralentissement des requêtes d'ecriture
  ●   Prendre en compte la selectivité : moins les données
      sont redondantes, plus l'index est efficace
  ●   Ne pas indexer plusieurs fois les mêmes colonnes
  ●   N'indexer que les colonnes nécessaires
  ●   Vérifier la pertinence des index (EXPLAIN)
  ●   Mettre à jours les stats (ANALYZE TABLE)



                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   29
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                      Les index: Cardinalité


  ●    Plus la cardinalité est élevée, plus un index est selectif, il est donc
       d'autant plus efficace
  ●    SHOW INDEX FROM ma_table
  CREATE PROCEDURE `sp_pert_idx`(IN _table CHAR(255), IN _col CHAR(255))

       COMMENT 'Calcul la pertinence d''un index'

  BEGIN

      DECLARE req char(255);

      SET @req = CONCAT('SELECT count(*) AS "Total Rows", count(DISTINCT ', _col,')
       AS "Valeurs distinctes", count(*) - count(DISTINCT ', _col, ') AS "Valeurs
       dupliquées" FROM ', _table);

      PREPARE st_pert_idx FROM @req;         EXECUTE st_pert_idx;

      DEALLOCATE PREPARE st_pert_idx;

  END $$


                                       Optimisation de MySQL
                               Olivier DASINI - http://dasini.net/blog                30
                                     Forum PHP Novembre 2007
http://dasini.net/blog/

                  Algorithmes d'index de MySQL


  ●   B-TREE (Arbre binaire équilibré)
      –   Recherche dichotomique
      –   Inférieur à log2(N)
      –   Log2(1048576) = 20
      –   Plusieurs variantes (B+tree, RB-tree, T-tree,...)
  ●   HASH (table memory)
      –   Très rapide pour recherche avec égalité (=)
      –   Ne fonctionne pas avec inégalité (<, >, between,..)
      –   Pas performant avec beaucoup de duplicats

                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   31
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                     Les types d'index de MySQL


  ●   Primary key
      –   unique
      –   not null
  ●   Unique
      –   unique
      –   accepte les NULL
  ●   Index
      –   Index simple (pas de contraintes)
  ●   GIS
      –   Gestion, génération, stockage et analyse des données
          spatiales
                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   32
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                  Les types d'index de MySQL


  ●   Fulltext
      –   Uniquement pour les tables MyISAM
      –   Pour les champs de type char, varchar et text
      –   Optimise la recherche de mots dans du texte
      –   MATCH (index_fulltext) AGAINST (mot_recherché)




                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   33
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                     Les index: astuces


  ●   Index composites
      –   INDEX (col1, col2)
          permet d'utiliser l'index pour les colonnes
          suivantes
           ●   ... WHERE col1=valx AND col2=valy
           ●   ... WHERE col1=valx
           ●   SELECT col2 ... WHERE col1=valx
           ●   SELECT col1 ... WHERE col2=valx (full scan index)
           ●   SELECT col2 ... WHERE col2=valx (full scan index)
      –   Mais pas pour
           ●   SELECT * ... WHERE col2=valx

                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog   34
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                   Les index: astuces


  ●   Préfixes d'index
      –   Minimiser la taille de l'index
      –   Indexer les n premiers caractères d'un champs de
          type texte
      –   Ces n caractères doivent être suffisament
          discriminants
      –   CREATE INDEX pref_index ON ma_table(col_text(30));




                                 Optimisation de MySQL
                         Olivier DASINI - http://dasini.net/blog   35
                               Forum PHP Novembre 2007
http://dasini.net/blog/

                   Les index: astuces


  ●   Préfixes d'index
      CREATE PROCEDURE `sp_pref_idx`(IN _table CHAR(255), IN _col
        char(255), IN _nbr tinyint unsigned)
        COMMENT 'Determine la pertinence du prefix d''un index'
      BEGIN
       DECLARE req CHAR(255);
       SET @req = CONCAT('SELECT count(DISTINCT LEFT(', _col, ', ',
        _nbr,')) AS "Valeurs prefix distinctes", count(*) - count(DISTINCT
        LEFT(', _col, ', ', _nbr,')) AS "Valeurs prefix dupliquées" FROM ',
        _table);
       PREPARE st_pref_idx FROM @req;
       EXECUTE st_pref_idx;
       DEALLOCATE PREPARE st_pref_idx;
      END $$
                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog             36
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                  Optimiser ses requêtes


  ●   Comprendre l'optimiseur
      –   Élimine le plus d'enregistrements possible
      –   Utilise l'index quand cela est possible
      –   Évite (autant que possible), les full table scans
      –   Cherche l'ordre de jointure des tables optimal
      –   Cherche à éviter les accès disque
      –   Préfère les accès index aux accès données




                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   37
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                      Optimiser ses requêtes


  ●   Identifier les requêtes candidates à l'optimisation
       –   Slow log (log-slow-queries, log-queries-not-using-indexes,
           long_query_time)
       –   Log general
       –   SHOW PROCESSLIST
  ●   Écrire des requêtes simples (si possible)
       –   Une requête simple verrouillera moins longtemps les ressources
  ●   Simplifier les expressions
       –   SELECT name,population FROM city WHERE population*1.5 >
           10000000; => pas index
       –   SELECT name,population FROM city WHERE population >
           10000000/1.5 ; => index

                                     Optimisation de MySQL
                             Olivier DASINI - http://dasini.net/blog        38
                                   Forum PHP Novembre 2007
http://dasini.net/blog/

                     Optimiser ses requêtes


  ●   Utiliser des tables temporaires (temporary tables)
       –   CREATE TEMPORARY TABLE tmp_ma_table
  ●   Utiliser l' extension MySQL REPLACE
      – Correspond selon le contexte, à une clause INSERT ou à la suite
        de clauses DELETE + INSERT
      – L’enregistrement est supprimé si et seulement si, la clause
        INSERT entraîne une violation d’unicité sur la clé primaire
      – Pas identique à la clause UPDATE les champs omis prendront
        comme valeur, la valeur par défaut
  ●   Insertion multi-enregistrements
       –   INSERT INTO ma_table VALUES (...),(...),(...);


                                    Optimisation de MySQL
                            Olivier DASINI - http://dasini.net/blog       39
                                  Forum PHP Novembre 2007
http://dasini.net/blog/

                   Optimiser ses requêtes


  ●   Regrouper les requêtes dans des transactions
       –   START TRANSACTION;
           ...
           COMMIT;
  ●   Minimiser la tailles des index (surtout la PK pour InnoDB)
  ●   LOAD DATA INFILE (mysqlimport)
  ●   Bannir le SELECT * FROM ...
  ●   Utiliser des index (pertinents)
  ●   Utiliser la commande EXPLAIN



                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   40
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                  Optimiser ses requêtes: EXPLAIN


  ●   EXPLAIN explique comment MySQL va traiter la
      commande SELECT
  ●   Donne les informations suivantes:
      –   L'ordre de traitement des tables
      –   Le(s) index vu par l'optimiseur
      –   Le(s) index utilisé(s)
      –   Nombre de lignes à analyser
  ●   EXPLAIN SELECT ...


                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   41
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                     Optimiser ses requêtes: EXPLAIN


  ●   type 1/3:
      –   All
           ●   Lecture entière du fichier de données
           ●   Le cas à éviter
      –   Index
           ●   Lecture entière du fichier d'index
           ●   A priori mieux que all




                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog   42
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                     Optimiser ses requêtes: EXPLAIN


  ●   type 2/3:
      –   range
           ●   Recherche par intervalle
           ●   <, <=, >, >=, ...
      –   Index_subquery, unique_subquery
           ●   Sous requête utilisant un index
      –   index_merge (MySQL 5.0 +)
           ●   Combine différents index



                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog   43
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                    Optimiser ses requêtes: EXPLAIN


  ●   type 3/3:
      –   ref_or_null / ref / eq_ref
           ●   Index non unique « nullable »
           ●   Index non unique
           ●   Index unique
      –   Const / system
           ●   Référence à un enregistrement




                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   44
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                 Optimiser ses requêtes: EXPLAIN


  ●   possible_keys:
      –   Index vu par MySQL
  ●   Key
      –   Index choisis par MySQL
  ●   Ref
      –   Colonne utilisée pour sélectionner les lignes de
          la table
  ●   Rows
      –   Nombre de ligne à analyser (estimation)
                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   45
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                  Optimiser ses requêtes: EXPLAIN


  ●   Extra (Informations complémentaire sur la
      stratégie employée par l'optimiseur)
      –   Using filesort
      –   Using temporary
      –   ...
      –   Using index




                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   46
                              Forum PHP Novembre 2007
http://dasini.net/blog/

                Optimiser ses requêtes


  ●   L'optimiseur est performant, mais il peut se
      tromper
  ●   Possibilité de le contraindre
      –   USE INDEX
      –   FORCE INDEX
      –   IGNORE INDEX
  ●   STRAIGHT_JOIN




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   47
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                 Les requêtes préparées


  ●   Préparer une requête en vue de l'exécuter plusieurs
      fois avec des paramètres différents
  ●   SELECT, INSERT, REPLACE, UPDATE, DELETE, CREATE
      TABLE, SET, ANALYSE TABLE, OPTIMIZE TABLE, REPAIR
      TABLE, SHOW...
  ●   L'analyse de la requête n'est faite qu'une seule fois,
      lors de la préparation de la requête
  ●   La requête préparée n'est visible que pour la session
      en cours, et sa durée de vie max est celle de la
      session
  ●   Compatible avec le cache de requête depuis MySQL
      5.1.17
                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   48
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                Les requêtes préparées


  ●   PREPARE ma_rp FROM 'SELECT name
      FROM city WHERE countrycode = ? AND population > ?';
  ●   SET @cc='fra', @pop=400000;
  ●   EXECUTE ma_rp USING @cc, @pop;


  ●   SET @cc='USA', @pop=800000;
  ●   EXECUTE ma_rp USING @cc, @pop;




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   49
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                     Le cache de requêtes


           Client1     Client2     ClientN



                                                          MySQL Server
              Connection Thread Pool


              Query Cache
                                                                         InnoDB
                                                      Storage Engines    MyISAM
              Parser   Query        101101                               MERGE
                                                                         MEMORY
                                                                         Federated
              Optimizer                                                  ARCHIVE




                                     Optimisation de MySQL
                             Olivier DASINI - http://dasini.net/blog                  50
                                   Forum PHP Novembre 2007
http://dasini.net/blog/

                     Le cache de requêtes


  ●   Mise en cache des requêtes SELECT et de leur résultat
  ●   Les requêtes doivent être strictement identiques (casse,
      espace,...)
  ●   Le cache est toujours à jour, car lorsqu'une table est
      modifiée, les requêtes qui lui font références sont
      invalidées
  ●   Certaines fonctions empêchent la mise en cache(NOW(),
      RAND()...)
  ●   Désactivé par défaut, car query_cache_size=0
      –   SHOW VARIABLES LIKE 'query_cache%';
           ●   query_cache_size              |0
           ●   query_cache_type              | ON
                                    Optimisation de MySQL
                            Olivier DASINI - http://dasini.net/blog   51
                                  Forum PHP Novembre 2007
http://dasini.net/blog/

                     Le cache de requêtes


  ●   query_cache_type
      –   ON
           ●   Met en cache les requêtes select
           ●   Sauf si SELECT SQL_NO_CACHE
      –   DEMAND
           ●   SELECT SQL_CACHE
      –   OFF
  ●   query_cache_size
      –   Taille du cache de requêtes (en octets)


                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   52
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                    Le cache de requêtes

  ●   SHOW STATUS LIKE 'qcache%';
  ●   Qcache_hits
      –   Nombre de fois que le cache de requête a servi
  ●   Qcache_inserts
      –   Nombre de requêtes insérées dans le cache
  ●   Qcache_lowmem_prunes
      –   Nombre de requêtes effacées du cache pour laisser place a de
          nouvelles requêtes (cache trop petit)
  ●   Qcache_not_cached
      –   Nombre de requêtes non ''cachable''
  ●   Qcache_queries_in_cache
      –   Nombre de requêtes dans le cache
                                   Optimisation de MySQL
                           Olivier DASINI - http://dasini.net/blog       53
                                 Forum PHP Novembre 2007
http://dasini.net/blog/

                    Le cache de requêtes


  ●   FLUSH QUERY CACHE
      –   Défragmente le cache de requête
  ●   RESET QUERY CACHE
      –   Réinitialise le cache de requêtes
  ●   FLUSH TABLES
      –   Réinitialise le cache de requêtes




                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   54
                                Forum PHP Novembre 2007
http://dasini.net/blog/

                   Optimisation du serveur MySQL


  ●   Rassembler l'information pour savoir quoi
      optimiser
      –   Log général, slow log, log binaire
      –   SHOW PROCESSLIST
      –   SHOW VARIABLES
      –   SHOW STATUS
      –   STATUS
      –   MySQL Administrator


                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   55
                             Forum PHP Novembre 2007
http://dasini.net/blog/
                    Optimisation du serveur MySQL:
                    MyISAM


  ●   Key_buffer_size
      –   Tampon qui stock les index des tables MyISAM
      –   25 à 30% de la RAM, pour un serveur dédié
          MySQL, en full MyISAM
      –   Pas trop grand car risque de swap !
      –   Ratio:
           ●   key_reads / key_read_requests < 0.03 (0.01 encore
               mieux)
               sinon l'augmenter



                                  Optimisation de MySQL
                          Olivier DASINI - http://dasini.net/blog   56
                                Forum PHP Novembre 2007
http://dasini.net/blog/
                  Optimisation du serveur MySQL:
                  MyISAM


 • myisam_sort_buffer_size
   – Tampon pour la création d'index pour les
     requêtes de maintenance: ALTER TABLE,
     REPAIR TABLE, LOAD DATA INFILE
     SET SESSION myisam_sort_buffer_size =
     –
     800*1024*1024;
     ALTER TABLE ma_table ADD INDEX ...;
 • bulk_insert_buffer_size
   – Tampon pour les insertions massives
         • INSERT ...SELECT
         • INSERT VALUES(),(),(),....
         • LOAD DATA INFILE
                                Optimisation de MySQL
                        Olivier DASINI - http://dasini.net/blog   57
                              Forum PHP Novembre 2007
http://dasini.net/blog/
                Optimisation du serveur MySQL:
                InnoDB


 • innodb_buffer_pool_size
    – Tampon pour stocker les index et des données
      des tables InnoDB
     Jusqu'à 80% de la RAM, pour un serveur dédié
     –
     MySQL, en full InnoDB
 • innodb_flush_logs_at_trx_commit (1 par défaut)
   – 0: Risque de pertes de transactions validées en
     cas de crash d 'InnoDB
   – 1: transactions flushées après chaque commit.
     Pas de pertes de transactions validées (ACID)
   – 2: Risque de pertes de transactions validées
     uniquement en cas de crash de l'O.S.
                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   58
                            Forum PHP Novembre 2007
http://dasini.net/blog/
                Optimisation du serveur MySQL:
                InnoDB


 • innodb_log_buffer_size
   – Taille du tampon des logs d'InnoDB
   – Vidé environ toutes les secondes (checkpoint)
   – En général entre 8Mo & 16Mo

 • innodb_log_file_size
   – Taille des fichiers de log d'InnoDB (2 par défaut)
   – Une grande valeur améliore les performances
     Mais augmente le temps de restauration
   – Valeurs courantes: 64Mo à 512Mo


                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   59
                            Forum PHP Novembre 2007
http://dasini.net/blog/
                Optimisation du serveur MySQL:
                Variables globales


 • table_cache
    – Cache des descripteurs de fichier
    – Chaque table ouverte nécessite un descripteur de
      fichiers (par connection), plus un pour le .MYI (MyISAM)
    – Augmenter votre table_cache si opened_tables croit
      rapidement
 • thread_cache
    – Cache des threads
    – Chaque session prend un thread à la connexion et le
      rend à la déconnexion
    – Augmenter si threads_created croit rapidement
    – Taux de succès du cache de thread:
      threads_created/connections

                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog    60
                            Forum PHP Novembre 2007
http://dasini.net/blog/
                  Optimisation du serveur MySQL:
                  Variables spécifiques à la session


  ●   read_buffer_size
      –   Tampon d'enregistrements pour les full table scans


  ●   sort_buffer_size
      –   Tampon pour GROUP BY / ORDER BY


  ●   tmp_table_size
      –   Tampon pour les tables temporaires stockées en
          mémoire (memory). Au delà, elles sont copiées sur
          disque (MyISAM)
                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   61
                             Forum PHP Novembre 2007
http://dasini.net/blog/
                  Optimisation du serveur MySQL:
                  Autres variables à surveiller...


  ●   Indicateur de hautes charges
      –   max_used_connections
      –   threads_created
      –   opened_tables
  ●   Indicateur de réponses lentes
      –   slow_queries
      –   Slow_launch_threads (Nombre de threads qui ont
          pris plus de slow_launch_time secondes pour être
          créés)


                                 Optimisation de MySQL
                         Olivier DASINI - http://dasini.net/blog   62
                               Forum PHP Novembre 2007
http://dasini.net/blog/
                    Optimisation du serveur MySQL:
                    Autres variables à surveiller...

  ●   Indicateurs de comportements
      –   Table_locks_immediate
      –   Table_locks_waited
  ●   Les handler
      –   Handler_read_first=>lecture d'index
      –   Handler_read_key=>lecture d'index
      –   Handler_read_next=>lecture d'index
      –   Handler_read_prev=>lecture d'index
      –   Handler_read_rnd=>lecture des données
      –   Handler_read_rnd_next=>lecture des données


                                 Optimisation de MySQL
                         Olivier DASINI - http://dasini.net/blog   63
                               Forum PHP Novembre 2007
http://dasini.net/blog/
                      Optimisation du serveur MySQL:
                      Autres variables à surveiller...

  ●   Indicateurs de requêtes:
      –   Tables temporaires
           ●   Created_tmp_disk_tables => augmenter tmp_table_size
           ●   Created_tmp_tables => order by, group by
      –   Requêtes pas optimisées
           ●   Select_full_join, Select_full_range_join: problèmes d'index
               dans la jointure
           ●   Select_scan: full scan sur la premiere table de la jointure
      –   Requêtes coûteuse
           ●   sort_merge_passes => augmenter le sort_buffer_size



                                    Optimisation de MySQL
                            Olivier DASINI - http://dasini.net/blog          64
                                  Forum PHP Novembre 2007
http://dasini.net/blog/

                   Optimisation de MySQL...


  ●   Les procédures stockées


  ●   Le partitionnement (MySQL 5.1)


  ●   La réplication


  ●   Le cluster



                               Optimisation de MySQL
                       Olivier DASINI - http://dasini.net/blog   65
                             Forum PHP Novembre 2007
http://dasini.net/blog/

                Aller (encore) plus loin


  ●   Comme JC Vandamme, soyez « aware »
  ●   http://www.mysql.com
  ●   http://www.mysqlperformanceblog.com
  ●   http://jpipes.com/index.php
  ●   http://dasini.net/blog/




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   66
                            Forum PHP Novembre 2007
http://dasini.net/blog/

                          Questions ?




                              Optimisation de MySQL
                      Olivier DASINI - http://dasini.net/blog   67
                            Forum PHP Novembre 2007

Contenu connexe

Tendances

Apache Spark Introduction
Apache Spark IntroductionApache Spark Introduction
Apache Spark Introductionsudhakara st
 
Enterprise Architecture Management (EAM) I Best Practices I NuggetHub
Enterprise Architecture Management (EAM) I Best Practices I NuggetHubEnterprise Architecture Management (EAM) I Best Practices I NuggetHub
Enterprise Architecture Management (EAM) I Best Practices I NuggetHubRichardNowack
 
What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?RTTS
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Regis Magalhães
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Priscila Ribeiro Chagas
 
Big Data (Büyük Veri) Nedir?
Big Data (Büyük Veri) Nedir?Big Data (Büyük Veri) Nedir?
Big Data (Büyük Veri) Nedir?Renerald
 
AZ-104T00A-ENU-PowerPoint_00.pptx
AZ-104T00A-ENU-PowerPoint_00.pptxAZ-104T00A-ENU-PowerPoint_00.pptx
AZ-104T00A-ENU-PowerPoint_00.pptxAliChallioui
 
Azure SQL Database Managed Instance
Azure SQL Database Managed InstanceAzure SQL Database Managed Instance
Azure SQL Database Managed InstanceJames Serra
 
Getting Started With Amazon Redshift
Getting Started With Amazon Redshift Getting Started With Amazon Redshift
Getting Started With Amazon Redshift Matillion
 
Agile, TOGAF and Enterprise Architecture: Will They Blend?
Agile, TOGAF and Enterprise Architecture:  Will They Blend?Agile, TOGAF and Enterprise Architecture:  Will They Blend?
Agile, TOGAF and Enterprise Architecture: Will They Blend?Danny Greefhorst
 
Enterprise Architecture Frameworks
Enterprise Architecture FrameworksEnterprise Architecture Frameworks
Enterprise Architecture FrameworksChetan Channa
 
Arquitetura.corporativa
Arquitetura.corporativaArquitetura.corporativa
Arquitetura.corporativaJoao Paulo PG
 
Qualidade de software e sua influência no sucesso do projeto
Qualidade de software e sua influência no sucesso do projetoQualidade de software e sua influência no sucesso do projeto
Qualidade de software e sua influência no sucesso do projetoValquíria Duarte D'Amato
 
Azure stack all you need to know
Azure stack   all you need to knowAzure stack   all you need to know
Azure stack all you need to knowSusantha Silva
 
SQL to Azure Migrations
SQL to Azure MigrationsSQL to Azure Migrations
SQL to Azure MigrationsDatavail
 
Introdução à Análise de Sistemas
Introdução à Análise de SistemasIntrodução à Análise de Sistemas
Introdução à Análise de SistemasNécio de Lima Veras
 

Tendances (20)

Togaf Roadshow
Togaf RoadshowTogaf Roadshow
Togaf Roadshow
 
Apache Spark Introduction
Apache Spark IntroductionApache Spark Introduction
Apache Spark Introduction
 
Enterprise Architecture Management (EAM) I Best Practices I NuggetHub
Enterprise Architecture Management (EAM) I Best Practices I NuggetHubEnterprise Architecture Management (EAM) I Best Practices I NuggetHub
Enterprise Architecture Management (EAM) I Best Practices I NuggetHub
 
What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?What is a Data Warehouse and How Do I Test It?
What is a Data Warehouse and How Do I Test It?
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?
 
Big Data (Büyük Veri) Nedir?
Big Data (Büyük Veri) Nedir?Big Data (Büyük Veri) Nedir?
Big Data (Büyük Veri) Nedir?
 
Unpacking business-architecture
Unpacking business-architectureUnpacking business-architecture
Unpacking business-architecture
 
AZ-104T00A-ENU-PowerPoint_00.pptx
AZ-104T00A-ENU-PowerPoint_00.pptxAZ-104T00A-ENU-PowerPoint_00.pptx
AZ-104T00A-ENU-PowerPoint_00.pptx
 
Azure SQL Database Managed Instance
Azure SQL Database Managed InstanceAzure SQL Database Managed Instance
Azure SQL Database Managed Instance
 
ESA for Business
ESA for BusinessESA for Business
ESA for Business
 
Getting Started With Amazon Redshift
Getting Started With Amazon Redshift Getting Started With Amazon Redshift
Getting Started With Amazon Redshift
 
Agile, TOGAF and Enterprise Architecture: Will They Blend?
Agile, TOGAF and Enterprise Architecture:  Will They Blend?Agile, TOGAF and Enterprise Architecture:  Will They Blend?
Agile, TOGAF and Enterprise Architecture: Will They Blend?
 
Enterprise Architecture Frameworks
Enterprise Architecture FrameworksEnterprise Architecture Frameworks
Enterprise Architecture Frameworks
 
Arquitetura.corporativa
Arquitetura.corporativaArquitetura.corporativa
Arquitetura.corporativa
 
Qualidade de software e sua influência no sucesso do projeto
Qualidade de software e sua influência no sucesso do projetoQualidade de software e sua influência no sucesso do projeto
Qualidade de software e sua influência no sucesso do projeto
 
Azure stack all you need to know
Azure stack   all you need to knowAzure stack   all you need to know
Azure stack all you need to know
 
SQL to Azure Migrations
SQL to Azure MigrationsSQL to Azure Migrations
SQL to Azure Migrations
 
Introdução à Análise de Sistemas
Introdução à Análise de SistemasIntrodução à Análise de Sistemas
Introdução à Análise de Sistemas
 
Arquitetura.corporativa
Arquitetura.corporativaArquitetura.corporativa
Arquitetura.corporativa
 

En vedette

Étude de cas : migration MySQL Latin 1 vers UTF-8
Étude de cas : migration MySQL Latin 1 vers UTF-8Étude de cas : migration MySQL Latin 1 vers UTF-8
Étude de cas : migration MySQL Latin 1 vers UTF-8Olivier DASINI
 
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniMHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniOlivier DASINI
 
Architectures haute disponibilité avec MySQL
Architectures haute disponibilité avec MySQLArchitectures haute disponibilité avec MySQL
Architectures haute disponibilité avec MySQLOlivier DASINI
 
Les nouveautés de MySQL 5.1
Les nouveautés de MySQL 5.1Les nouveautés de MySQL 5.1
Les nouveautés de MySQL 5.1Olivier DASINI
 
MySQL Day Paris 2016 - MySQL as a Document Store
MySQL Day Paris 2016 - MySQL as a Document StoreMySQL Day Paris 2016 - MySQL as a Document Store
MySQL Day Paris 2016 - MySQL as a Document StoreOlivier DASINI
 
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeursMySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeursFrederic Descamps
 
Haute disponibilité my sql avec group réplication
Haute disponibilité my sql avec group réplicationHaute disponibilité my sql avec group réplication
Haute disponibilité my sql avec group réplicationFrederic Descamps
 
MySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionMySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionOlivier DASINI
 
MySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMorgan Tocker
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMatt Lord
 
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB ClusterMySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB ClusterOlivier DASINI
 
Case Study: MySQL migration from latin1 to UTF-8
Case Study: MySQL migration from latin1 to UTF-8Case Study: MySQL migration from latin1 to UTF-8
Case Study: MySQL migration from latin1 to UTF-8Olivier DASINI
 
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceMySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceOlivier DASINI
 
MySQL Day Paris 2016 - State Of The Dolphin
MySQL Day Paris 2016 - State Of The DolphinMySQL Day Paris 2016 - State Of The Dolphin
MySQL Day Paris 2016 - State Of The DolphinOlivier DASINI
 
MySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitationsMySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitationsJean-François Gagné
 
Pldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsPldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsmysqlops
 
Solutions pour l’optimisation de l’infrastructure des établissements scolaires
Solutions pour l’optimisation de l’infrastructure des établissements scolairesSolutions pour l’optimisation de l’infrastructure des établissements scolaires
Solutions pour l’optimisation de l’infrastructure des établissements scolairesMicrosoft Technet France
 
Upgrade to MySQL 5.6 without downtime
Upgrade to MySQL 5.6 without downtimeUpgrade to MySQL 5.6 without downtime
Upgrade to MySQL 5.6 without downtimeOlivier DASINI
 
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication SetupsMix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication SetupsPedro Gomes
 
Fine-tuning Group Replication for Performance
Fine-tuning Group Replication for PerformanceFine-tuning Group Replication for Performance
Fine-tuning Group Replication for PerformanceVitor Oliveira
 

En vedette (20)

Étude de cas : migration MySQL Latin 1 vers UTF-8
Étude de cas : migration MySQL Latin 1 vers UTF-8Étude de cas : migration MySQL Latin 1 vers UTF-8
Étude de cas : migration MySQL Latin 1 vers UTF-8
 
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniMHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
 
Architectures haute disponibilité avec MySQL
Architectures haute disponibilité avec MySQLArchitectures haute disponibilité avec MySQL
Architectures haute disponibilité avec MySQL
 
Les nouveautés de MySQL 5.1
Les nouveautés de MySQL 5.1Les nouveautés de MySQL 5.1
Les nouveautés de MySQL 5.1
 
MySQL Day Paris 2016 - MySQL as a Document Store
MySQL Day Paris 2016 - MySQL as a Document StoreMySQL Day Paris 2016 - MySQL as a Document Store
MySQL Day Paris 2016 - MySQL as a Document Store
 
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeursMySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
 
Haute disponibilité my sql avec group réplication
Haute disponibilité my sql avec group réplicationHaute disponibilité my sql avec group réplication
Haute disponibilité my sql avec group réplication
 
MySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionMySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise Edition
 
MySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMySQL Cloud Service Deep Dive
MySQL Cloud Service Deep Dive
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB Clusters
 
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB ClusterMySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
 
Case Study: MySQL migration from latin1 to UTF-8
Case Study: MySQL migration from latin1 to UTF-8Case Study: MySQL migration from latin1 to UTF-8
Case Study: MySQL migration from latin1 to UTF-8
 
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceMySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
 
MySQL Day Paris 2016 - State Of The Dolphin
MySQL Day Paris 2016 - State Of The DolphinMySQL Day Paris 2016 - State Of The Dolphin
MySQL Day Paris 2016 - State Of The Dolphin
 
MySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitationsMySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitations
 
Pldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsPldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internals
 
Solutions pour l’optimisation de l’infrastructure des établissements scolaires
Solutions pour l’optimisation de l’infrastructure des établissements scolairesSolutions pour l’optimisation de l’infrastructure des établissements scolaires
Solutions pour l’optimisation de l’infrastructure des établissements scolaires
 
Upgrade to MySQL 5.6 without downtime
Upgrade to MySQL 5.6 without downtimeUpgrade to MySQL 5.6 without downtime
Upgrade to MySQL 5.6 without downtime
 
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication SetupsMix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
 
Fine-tuning Group Replication for Performance
Fine-tuning Group Replication for PerformanceFine-tuning Group Replication for Performance
Fine-tuning Group Replication for Performance
 

Similaire à Optimisation de MySQL

DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchéesAurelien Navarre
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...Scaleway
 
SPIP et la gestion de la performance
SPIP et la gestion de la performanceSPIP et la gestion de la performance
SPIP et la gestion de la performanceCédric MORIN
 
Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Christophe Villeneuve
 
Alphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm
 
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)Alphorm
 
Performance barcampfinal
Performance barcampfinalPerformance barcampfinal
Performance barcampfinalOxalide
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQLneuros
 
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]IBM France PME-ETI
 
Alphorm.com Formation MySQL Administration(1Z0-883)
Alphorm.com   Formation MySQL Administration(1Z0-883)Alphorm.com   Formation MySQL Administration(1Z0-883)
Alphorm.com Formation MySQL Administration(1Z0-883)Alphorm
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMPcyruss666
 
La BI, Power BI, et SQL Server 2014
La BI, Power BI, et SQL Server 2014La BI, Power BI, et SQL Server 2014
La BI, Power BI, et SQL Server 2014SCALA
 
Monter des environnements dev test efficaces avec Windows Azure
Monter des environnements dev test efficaces avec Windows AzureMonter des environnements dev test efficaces avec Windows Azure
Monter des environnements dev test efficaces avec Windows AzureMicrosoft Technet France
 
Sécurité et performance, comment bien optimiser PrestaShop
Sécurité et performance, comment bien optimiser PrestaShopSécurité et performance, comment bien optimiser PrestaShop
Sécurité et performance, comment bien optimiser PrestaShopPrestaShop
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheAurelien Navarre
 

Similaire à Optimisation de MySQL (20)

Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
 
SPIP et la gestion de la performance
SPIP et la gestion de la performanceSPIP et la gestion de la performance
SPIP et la gestion de la performance
 
Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017
 
Alphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQL
 
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
 
Le nouveau AMP : apache mariadb php
Le nouveau AMP : apache mariadb phpLe nouveau AMP : apache mariadb php
Le nouveau AMP : apache mariadb php
 
Performance barcampfinal
Performance barcampfinalPerformance barcampfinal
Performance barcampfinal
 
Formation NoSQL
Formation NoSQLFormation NoSQL
Formation NoSQL
 
Améliorer les performances SQL
Améliorer les performances SQLAméliorer les performances SQL
Améliorer les performances SQL
 
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
 
Alphorm.com Formation MySQL Administration(1Z0-883)
Alphorm.com   Formation MySQL Administration(1Z0-883)Alphorm.com   Formation MySQL Administration(1Z0-883)
Alphorm.com Formation MySQL Administration(1Z0-883)
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMP
 
La BI, Power BI, et SQL Server 2014
La BI, Power BI, et SQL Server 2014La BI, Power BI, et SQL Server 2014
La BI, Power BI, et SQL Server 2014
 
Monter des environnements dev test efficaces avec Windows Azure
Monter des environnements dev test efficaces avec Windows AzureMonter des environnements dev test efficaces avec Windows Azure
Monter des environnements dev test efficaces avec Windows Azure
 
Sécurité et performance, comment bien optimiser PrestaShop
Sécurité et performance, comment bien optimiser PrestaShopSécurité et performance, comment bien optimiser PrestaShop
Sécurité et performance, comment bien optimiser PrestaShop
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
 
MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 

Plus de Olivier DASINI

MySQL High Availability Solutions - Avoid loss of service by reducing the r...
MySQL High Availability Solutions  -  Avoid loss of service by reducing the r...MySQL High Availability Solutions  -  Avoid loss of service by reducing the r...
MySQL High Availability Solutions - Avoid loss of service by reducing the r...Olivier DASINI
 
MySQL Document Store for Modern Applications
MySQL Document Store for Modern ApplicationsMySQL Document Store for Modern Applications
MySQL Document Store for Modern ApplicationsOlivier DASINI
 
MySQL Performance Best Practices
MySQL Performance Best PracticesMySQL Performance Best Practices
MySQL Performance Best PracticesOlivier DASINI
 
MySQL 8.0.22 - New Features Summary
MySQL 8.0.22 - New Features SummaryMySQL 8.0.22 - New Features Summary
MySQL 8.0.22 - New Features SummaryOlivier DASINI
 
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL TeamMySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL TeamOlivier DASINI
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Olivier DASINI
 
MySQL 8.0.21 - New Features Summary
MySQL 8.0.21 - New Features SummaryMySQL 8.0.21 - New Features Summary
MySQL 8.0.21 - New Features SummaryOlivier DASINI
 
MySQL 8.0.19 - New Features Summary
MySQL 8.0.19 - New Features SummaryMySQL 8.0.19 - New Features Summary
MySQL 8.0.19 - New Features SummaryOlivier DASINI
 
MySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryMySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryOlivier DASINI
 
MySQL 8.0.17 - New Features Summary
MySQL 8.0.17 - New Features SummaryMySQL 8.0.17 - New Features Summary
MySQL 8.0.17 - New Features SummaryOlivier DASINI
 
MySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryMySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryOlivier DASINI
 
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the DolphinMySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the DolphinOlivier DASINI
 
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirementsMySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirementsOlivier DASINI
 
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0Olivier DASINI
 
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...Olivier DASINI
 
MySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreMySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreOlivier DASINI
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?Olivier DASINI
 
MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018Olivier DASINI
 
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...Olivier DASINI
 
MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?Olivier DASINI
 

Plus de Olivier DASINI (20)

MySQL High Availability Solutions - Avoid loss of service by reducing the r...
MySQL High Availability Solutions  -  Avoid loss of service by reducing the r...MySQL High Availability Solutions  -  Avoid loss of service by reducing the r...
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
 
MySQL Document Store for Modern Applications
MySQL Document Store for Modern ApplicationsMySQL Document Store for Modern Applications
MySQL Document Store for Modern Applications
 
MySQL Performance Best Practices
MySQL Performance Best PracticesMySQL Performance Best Practices
MySQL Performance Best Practices
 
MySQL 8.0.22 - New Features Summary
MySQL 8.0.22 - New Features SummaryMySQL 8.0.22 - New Features Summary
MySQL 8.0.22 - New Features Summary
 
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL TeamMySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0
 
MySQL 8.0.21 - New Features Summary
MySQL 8.0.21 - New Features SummaryMySQL 8.0.21 - New Features Summary
MySQL 8.0.21 - New Features Summary
 
MySQL 8.0.19 - New Features Summary
MySQL 8.0.19 - New Features SummaryMySQL 8.0.19 - New Features Summary
MySQL 8.0.19 - New Features Summary
 
MySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryMySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features Summary
 
MySQL 8.0.17 - New Features Summary
MySQL 8.0.17 - New Features SummaryMySQL 8.0.17 - New Features Summary
MySQL 8.0.17 - New Features Summary
 
MySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryMySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features Summary
 
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the DolphinMySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
 
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirementsMySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
 
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
 
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
 
MySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreMySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document Store
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
 
MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018
 
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
 
MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?
 

Optimisation de MySQL

  • 1. http://dasini.net/blog/ Olivier DASINI Forum PHP Novembre 2007 Optimisation de MySQL http://dasini.net/blog/ Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 1 Forum PHP Novembre 2007
  • 2. http://dasini.net/blog/ Votre conférencier Olivier DASINI Formateur certifié MySQL Consultant technologies Open Sources olivier@dasini.net Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 2 Forum PHP Novembre 2007
  • 3. http://dasini.net/blog/ Au programme... ● Introduction ● Pourquoi optimiser ? ● Comment ● Architectures de la base de données ● Créer des requêtes rapides ● Optimisation du serveur MySQL ● Questions / Réponses Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 3 Forum PHP Novembre 2007
  • 4. http://dasini.net/blog/ Introduction ● Quel SGBD utilisez-vous ? ● Quel système d'exploitation ? ● Versions de MySQL utilisées ? ● Quels sont vos besoins ? Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 4 Forum PHP Novembre 2007
  • 5. http://dasini.net/blog/ Introduction ● MySQL est le SGBDR open source le plus populaire ● MySQL à une double licence (GPL et commerciale ● Une multitude d'outils (Administrator, Query Browser, Migration Toolkit, mysqlslap, ...) ● S.E. supportés: beaucoup (Linux, Solaris, Windows, FreeBSD, Mac OS X, ....) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 5 Forum PHP Novembre 2007
  • 6. http://dasini.net/blog/ Pourquoi optimiser ? ● Tirer le maximum du matériel disponible ● Répondre à un accroissement des données et/ou de la charge ● Plus facile et moins couteux que de recoder l'application ● Satisfaire l'utilisateur final (et le boss :) ) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 6 Forum PHP Novembre 2007
  • 7. http://dasini.net/blog/ Comment ● Écrire des requêtes performantes – Avec des index pertinents – La différence de performances peut être importante ● Choisir le moteur de stockage adéquat – Toutes les données ne se valent pas – A chaque besoins, son moteur ● Choisir les bons types de données – MySQL possède un choix important de types de données – Chaque type à un coût de stockage ! Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 7 Forum PHP Novembre 2007
  • 8. http://dasini.net/blog/ Comment ● Paramétrer de façon optimale son serveur MySQL – Changer un paramètre a la fois – Les changements ne sont pas forcement immédiats – Les gains sont rarement spectaculaires ● Tester et superviser son serveur MySQL – Tester avec un jeu de données réaliste – Superviser pour détecter et anticiper les problèmes Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 8 Forum PHP Novembre 2007
  • 9. http://dasini.net/blog/ Architectures de la base de données ● Normaliser (3ème forme normale) – Éliminer les données redondantes – Avoir des tables plus petites – Optimiser les jointures – Permettre à l'optimiseur d'être plus performant Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 9 Forum PHP Novembre 2007
  • 10. http://dasini.net/blog/ Architectures de la base de données ● Dénormaliser – Supprimer les jointures (ENUM, SET,...) ● CREATE TABLE country ( Code char(3) NOT NULL DEFAULT '', Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica' 'South America') NOT NULL DEFAULT 'Asia', ... – Stocker des données calculée – Ajouter des colonnes (auto_increment,...) – Table de résumé (snapshot) ● Problème: gérer les mises à jours – Schéma en étoile... Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 10 Forum PHP Novembre 2007
  • 11. http://dasini.net/blog/ Architectures de la base de données ● Choix du bon type de colonne – MySQL à un large choix de types de données – Adapter le type à la taille des données ● code_postal CHAR(5) et non VARCHAR(255) ● UNSIGNED – La clause NOT NULL ● Risque de problèmes d'intégrité ● Surcoût inutile pour MySQL ● procedure analyse() – SELECT col1, col2 FROM ma_table PROCEDURE ANALYSE(); Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 11 Forum PHP Novembre 2007
  • 12. http://dasini.net/blog/ Architectures de la base de données ● Architecture à moteurs de stockage modulaire MySQL Database Management Level Retrieve Parse Optimize 1 Store Pluggable Storage Engines MyISAM InnoDB MySQL Memory Other ... Cluster Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 12 Forum PHP Novembre 2007
  • 13. http://dasini.net/blog/ Architectures de la base de données ● Propriétés qui dépendent du moteur de stockage – Support de stockage – Support des transactions – Type de verrou – Sauvegarde & restauration – Optimisation – Fonctionnalités Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 13 Forum PHP Novembre 2007
  • 14. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage – MyISAM – InnoDB – Memory – Archive – NDBCluster – Autres... Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 14 Forum PHP Novembre 2007
  • 15. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: MyISAM – Moteur de stockage par défaut – Très rapide (insert, select count(*)) – Verrou niveau table – Prend peu de place (40% de moins qu'InnoDB) – Index fulltext – Possibilité de SELECT & INSERT non bloquant concurrent_insert=2 – Très portable – Statique, Dynamique, compressée Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 15 Forum PHP Novembre 2007
  • 16. http://dasini.net/blog/ Architectures de la base de données ● Table MyISAM dynamique – Contient au moins un champs de type dynamique (CHAR, VARCHAR, TEXT) – Prend moins de place sur le disque – Fragmentation => OPTIMIZE TABLE ● Table MyISAM statique – Plus rapide, plus robuste – Pas de fragmentations, mais prend plus de place sur le disque ● Table MyISAM compressée – Lecture seule – Gain de place de l'ordre de 70% Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 16 Forum PHP Novembre 2007
  • 17. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: MyISAM – Moteur non transactionnel – Pas de « Crash recovery » – Pas de sauvegarde cohérente non bloquante – Pas de support des clés étrangères (6.x ?) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 17 Forum PHP Novembre 2007
  • 18. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: InnoDB – Moteur transactionnel ACID – Verrou niveau enregistrement – Support des clés étrangères – Crash recovery – Multi-versionning (MVCC) – Sauvegarde cohérente non bloquante à chaud (physique & logique) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 18 Forum PHP Novembre 2007
  • 19. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: InnoDB – Pas de support de full-text – Sauvegarde physique cohérente non bloquante à chaud payante (InnoDB Hot Backup) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 19 Forum PHP Novembre 2007
  • 20. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: Memory – Données et index stockés en mémoire – Très rapide (un accès mémoire 1 million de fois plus rapide qu'un accès disque) – 2 algorithmes d'index hash & b-tree (MySQL 4.1+) – Utiliser init-file pour peupler les tables Memory au démarrage de MySQL Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 20 Forum PHP Novembre 2007
  • 21. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: Memory – Données perdues lors de l'arrêt du serveur – Pas de full-text – Pas de blob ou de text – Pas transactionnel – Pas de clés étrangères – Verrou niveau table Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 21 Forum PHP Novembre 2007
  • 22. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: Archive – Stockage de grands volumes de données en les compressant (70% de réduction) – Seulement SELECT, INSERT – Pas d'index – Verrou niveau ligne Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 22 Forum PHP Novembre 2007
  • 23. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: NDBCluster – Moteur transactionnel – Haute disponibilité – Scalabilité – Verrou niveau ligne Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 23 Forum PHP Novembre 2007
  • 24. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: CSV – Stock les données au format csv (nom_table.csv) – N'accepte pas d'index – Non transactionnel – Le fichier peut être lu avec ● OpenOffice.org Calc ● Microsoft Excel Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 24 Forum PHP Novembre 2007
  • 25. http://dasini.net/blog/ Architectures de la base de données ● Bien choisir son moteur de stockage: Autres... – Falcon ● Transactionnel ● Verrou ligne – SolidDB ● Transactionnel ● Verrou ligne – PBXT ● Transactionnel ● Verrou ligne – ... le votre (?) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 25 Forum PHP Novembre 2007
  • 26. http://dasini.net/blog/ Architectures de la base de données ● Utiliser plusieurs moteurs de stockage – Données statiques en MyISAM – Données dynamiques critiques en InnoDB – Tables temporaires, tables résumés en Memory – Données d'archives (log) en... Archive – ... – ALTER TABLE <nom_table> ENGINE=<moteur> Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 26 Forum PHP Novembre 2007
  • 27. http://dasini.net/blog/ Architectures de la base de données ● Utiliser plusieurs moteurs de stockage: inconvénients – Configuration plus compliquée – Partage de la RAM : moins d'espace pour chaque moteur – Jointure entre moteurs transactionnels et non transactionnels Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 27 Forum PHP Novembre 2007
  • 28. http://dasini.net/blog/ Les index ● But: – Accélérer les accès en lecture à la base de données – Renforcer la cohérence de la base avec des contraintes ● Critères: – Pertinence de l'index (cardinalité, utilisé ?) – Unique, non unique ? – Alorithme (BTREE / HASH) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 28 Forum PHP Novembre 2007
  • 29. http://dasini.net/blog/ Les index: attention ! ● Compromis entre vitesse et maintenance ● Risque de ralentissement des requêtes d'ecriture ● Prendre en compte la selectivité : moins les données sont redondantes, plus l'index est efficace ● Ne pas indexer plusieurs fois les mêmes colonnes ● N'indexer que les colonnes nécessaires ● Vérifier la pertinence des index (EXPLAIN) ● Mettre à jours les stats (ANALYZE TABLE) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 29 Forum PHP Novembre 2007
  • 30. http://dasini.net/blog/ Les index: Cardinalité ● Plus la cardinalité est élevée, plus un index est selectif, il est donc d'autant plus efficace ● SHOW INDEX FROM ma_table CREATE PROCEDURE `sp_pert_idx`(IN _table CHAR(255), IN _col CHAR(255)) COMMENT 'Calcul la pertinence d''un index' BEGIN DECLARE req char(255); SET @req = CONCAT('SELECT count(*) AS "Total Rows", count(DISTINCT ', _col,') AS "Valeurs distinctes", count(*) - count(DISTINCT ', _col, ') AS "Valeurs dupliquées" FROM ', _table); PREPARE st_pert_idx FROM @req; EXECUTE st_pert_idx; DEALLOCATE PREPARE st_pert_idx; END $$ Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 30 Forum PHP Novembre 2007
  • 31. http://dasini.net/blog/ Algorithmes d'index de MySQL ● B-TREE (Arbre binaire équilibré) – Recherche dichotomique – Inférieur à log2(N) – Log2(1048576) = 20 – Plusieurs variantes (B+tree, RB-tree, T-tree,...) ● HASH (table memory) – Très rapide pour recherche avec égalité (=) – Ne fonctionne pas avec inégalité (<, >, between,..) – Pas performant avec beaucoup de duplicats Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 31 Forum PHP Novembre 2007
  • 32. http://dasini.net/blog/ Les types d'index de MySQL ● Primary key – unique – not null ● Unique – unique – accepte les NULL ● Index – Index simple (pas de contraintes) ● GIS – Gestion, génération, stockage et analyse des données spatiales Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 32 Forum PHP Novembre 2007
  • 33. http://dasini.net/blog/ Les types d'index de MySQL ● Fulltext – Uniquement pour les tables MyISAM – Pour les champs de type char, varchar et text – Optimise la recherche de mots dans du texte – MATCH (index_fulltext) AGAINST (mot_recherché) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 33 Forum PHP Novembre 2007
  • 34. http://dasini.net/blog/ Les index: astuces ● Index composites – INDEX (col1, col2) permet d'utiliser l'index pour les colonnes suivantes ● ... WHERE col1=valx AND col2=valy ● ... WHERE col1=valx ● SELECT col2 ... WHERE col1=valx ● SELECT col1 ... WHERE col2=valx (full scan index) ● SELECT col2 ... WHERE col2=valx (full scan index) – Mais pas pour ● SELECT * ... WHERE col2=valx Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 34 Forum PHP Novembre 2007
  • 35. http://dasini.net/blog/ Les index: astuces ● Préfixes d'index – Minimiser la taille de l'index – Indexer les n premiers caractères d'un champs de type texte – Ces n caractères doivent être suffisament discriminants – CREATE INDEX pref_index ON ma_table(col_text(30)); Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 35 Forum PHP Novembre 2007
  • 36. http://dasini.net/blog/ Les index: astuces ● Préfixes d'index CREATE PROCEDURE `sp_pref_idx`(IN _table CHAR(255), IN _col char(255), IN _nbr tinyint unsigned) COMMENT 'Determine la pertinence du prefix d''un index' BEGIN DECLARE req CHAR(255); SET @req = CONCAT('SELECT count(DISTINCT LEFT(', _col, ', ', _nbr,')) AS "Valeurs prefix distinctes", count(*) - count(DISTINCT LEFT(', _col, ', ', _nbr,')) AS "Valeurs prefix dupliquées" FROM ', _table); PREPARE st_pref_idx FROM @req; EXECUTE st_pref_idx; DEALLOCATE PREPARE st_pref_idx; END $$ Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 36 Forum PHP Novembre 2007
  • 37. http://dasini.net/blog/ Optimiser ses requêtes ● Comprendre l'optimiseur – Élimine le plus d'enregistrements possible – Utilise l'index quand cela est possible – Évite (autant que possible), les full table scans – Cherche l'ordre de jointure des tables optimal – Cherche à éviter les accès disque – Préfère les accès index aux accès données Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 37 Forum PHP Novembre 2007
  • 38. http://dasini.net/blog/ Optimiser ses requêtes ● Identifier les requêtes candidates à l'optimisation – Slow log (log-slow-queries, log-queries-not-using-indexes, long_query_time) – Log general – SHOW PROCESSLIST ● Écrire des requêtes simples (si possible) – Une requête simple verrouillera moins longtemps les ressources ● Simplifier les expressions – SELECT name,population FROM city WHERE population*1.5 > 10000000; => pas index – SELECT name,population FROM city WHERE population > 10000000/1.5 ; => index Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 38 Forum PHP Novembre 2007
  • 39. http://dasini.net/blog/ Optimiser ses requêtes ● Utiliser des tables temporaires (temporary tables) – CREATE TEMPORARY TABLE tmp_ma_table ● Utiliser l' extension MySQL REPLACE – Correspond selon le contexte, à une clause INSERT ou à la suite de clauses DELETE + INSERT – L’enregistrement est supprimé si et seulement si, la clause INSERT entraîne une violation d’unicité sur la clé primaire – Pas identique à la clause UPDATE les champs omis prendront comme valeur, la valeur par défaut ● Insertion multi-enregistrements – INSERT INTO ma_table VALUES (...),(...),(...); Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 39 Forum PHP Novembre 2007
  • 40. http://dasini.net/blog/ Optimiser ses requêtes ● Regrouper les requêtes dans des transactions – START TRANSACTION; ... COMMIT; ● Minimiser la tailles des index (surtout la PK pour InnoDB) ● LOAD DATA INFILE (mysqlimport) ● Bannir le SELECT * FROM ... ● Utiliser des index (pertinents) ● Utiliser la commande EXPLAIN Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 40 Forum PHP Novembre 2007
  • 41. http://dasini.net/blog/ Optimiser ses requêtes: EXPLAIN ● EXPLAIN explique comment MySQL va traiter la commande SELECT ● Donne les informations suivantes: – L'ordre de traitement des tables – Le(s) index vu par l'optimiseur – Le(s) index utilisé(s) – Nombre de lignes à analyser ● EXPLAIN SELECT ... Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 41 Forum PHP Novembre 2007
  • 42. http://dasini.net/blog/ Optimiser ses requêtes: EXPLAIN ● type 1/3: – All ● Lecture entière du fichier de données ● Le cas à éviter – Index ● Lecture entière du fichier d'index ● A priori mieux que all Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 42 Forum PHP Novembre 2007
  • 43. http://dasini.net/blog/ Optimiser ses requêtes: EXPLAIN ● type 2/3: – range ● Recherche par intervalle ● <, <=, >, >=, ... – Index_subquery, unique_subquery ● Sous requête utilisant un index – index_merge (MySQL 5.0 +) ● Combine différents index Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 43 Forum PHP Novembre 2007
  • 44. http://dasini.net/blog/ Optimiser ses requêtes: EXPLAIN ● type 3/3: – ref_or_null / ref / eq_ref ● Index non unique « nullable » ● Index non unique ● Index unique – Const / system ● Référence à un enregistrement Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 44 Forum PHP Novembre 2007
  • 45. http://dasini.net/blog/ Optimiser ses requêtes: EXPLAIN ● possible_keys: – Index vu par MySQL ● Key – Index choisis par MySQL ● Ref – Colonne utilisée pour sélectionner les lignes de la table ● Rows – Nombre de ligne à analyser (estimation) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 45 Forum PHP Novembre 2007
  • 46. http://dasini.net/blog/ Optimiser ses requêtes: EXPLAIN ● Extra (Informations complémentaire sur la stratégie employée par l'optimiseur) – Using filesort – Using temporary – ... – Using index Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 46 Forum PHP Novembre 2007
  • 47. http://dasini.net/blog/ Optimiser ses requêtes ● L'optimiseur est performant, mais il peut se tromper ● Possibilité de le contraindre – USE INDEX – FORCE INDEX – IGNORE INDEX ● STRAIGHT_JOIN Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 47 Forum PHP Novembre 2007
  • 48. http://dasini.net/blog/ Les requêtes préparées ● Préparer une requête en vue de l'exécuter plusieurs fois avec des paramètres différents ● SELECT, INSERT, REPLACE, UPDATE, DELETE, CREATE TABLE, SET, ANALYSE TABLE, OPTIMIZE TABLE, REPAIR TABLE, SHOW... ● L'analyse de la requête n'est faite qu'une seule fois, lors de la préparation de la requête ● La requête préparée n'est visible que pour la session en cours, et sa durée de vie max est celle de la session ● Compatible avec le cache de requête depuis MySQL 5.1.17 Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 48 Forum PHP Novembre 2007
  • 49. http://dasini.net/blog/ Les requêtes préparées ● PREPARE ma_rp FROM 'SELECT name FROM city WHERE countrycode = ? AND population > ?'; ● SET @cc='fra', @pop=400000; ● EXECUTE ma_rp USING @cc, @pop; ● SET @cc='USA', @pop=800000; ● EXECUTE ma_rp USING @cc, @pop; Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 49 Forum PHP Novembre 2007
  • 50. http://dasini.net/blog/ Le cache de requêtes Client1 Client2 ClientN MySQL Server Connection Thread Pool Query Cache  InnoDB Storage Engines  MyISAM Parser Query 101101  MERGE  MEMORY  Federated Optimizer  ARCHIVE Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 50 Forum PHP Novembre 2007
  • 51. http://dasini.net/blog/ Le cache de requêtes ● Mise en cache des requêtes SELECT et de leur résultat ● Les requêtes doivent être strictement identiques (casse, espace,...) ● Le cache est toujours à jour, car lorsqu'une table est modifiée, les requêtes qui lui font références sont invalidées ● Certaines fonctions empêchent la mise en cache(NOW(), RAND()...) ● Désactivé par défaut, car query_cache_size=0 – SHOW VARIABLES LIKE 'query_cache%'; ● query_cache_size |0 ● query_cache_type | ON Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 51 Forum PHP Novembre 2007
  • 52. http://dasini.net/blog/ Le cache de requêtes ● query_cache_type – ON ● Met en cache les requêtes select ● Sauf si SELECT SQL_NO_CACHE – DEMAND ● SELECT SQL_CACHE – OFF ● query_cache_size – Taille du cache de requêtes (en octets) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 52 Forum PHP Novembre 2007
  • 53. http://dasini.net/blog/ Le cache de requêtes ● SHOW STATUS LIKE 'qcache%'; ● Qcache_hits – Nombre de fois que le cache de requête a servi ● Qcache_inserts – Nombre de requêtes insérées dans le cache ● Qcache_lowmem_prunes – Nombre de requêtes effacées du cache pour laisser place a de nouvelles requêtes (cache trop petit) ● Qcache_not_cached – Nombre de requêtes non ''cachable'' ● Qcache_queries_in_cache – Nombre de requêtes dans le cache Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 53 Forum PHP Novembre 2007
  • 54. http://dasini.net/blog/ Le cache de requêtes ● FLUSH QUERY CACHE – Défragmente le cache de requête ● RESET QUERY CACHE – Réinitialise le cache de requêtes ● FLUSH TABLES – Réinitialise le cache de requêtes Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 54 Forum PHP Novembre 2007
  • 55. http://dasini.net/blog/ Optimisation du serveur MySQL ● Rassembler l'information pour savoir quoi optimiser – Log général, slow log, log binaire – SHOW PROCESSLIST – SHOW VARIABLES – SHOW STATUS – STATUS – MySQL Administrator Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 55 Forum PHP Novembre 2007
  • 56. http://dasini.net/blog/ Optimisation du serveur MySQL: MyISAM ● Key_buffer_size – Tampon qui stock les index des tables MyISAM – 25 à 30% de la RAM, pour un serveur dédié MySQL, en full MyISAM – Pas trop grand car risque de swap ! – Ratio: ● key_reads / key_read_requests < 0.03 (0.01 encore mieux) sinon l'augmenter Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 56 Forum PHP Novembre 2007
  • 57. http://dasini.net/blog/ Optimisation du serveur MySQL: MyISAM • myisam_sort_buffer_size – Tampon pour la création d'index pour les requêtes de maintenance: ALTER TABLE, REPAIR TABLE, LOAD DATA INFILE SET SESSION myisam_sort_buffer_size = – 800*1024*1024; ALTER TABLE ma_table ADD INDEX ...; • bulk_insert_buffer_size – Tampon pour les insertions massives • INSERT ...SELECT • INSERT VALUES(),(),(),.... • LOAD DATA INFILE Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 57 Forum PHP Novembre 2007
  • 58. http://dasini.net/blog/ Optimisation du serveur MySQL: InnoDB • innodb_buffer_pool_size – Tampon pour stocker les index et des données des tables InnoDB Jusqu'à 80% de la RAM, pour un serveur dédié – MySQL, en full InnoDB • innodb_flush_logs_at_trx_commit (1 par défaut) – 0: Risque de pertes de transactions validées en cas de crash d 'InnoDB – 1: transactions flushées après chaque commit. Pas de pertes de transactions validées (ACID) – 2: Risque de pertes de transactions validées uniquement en cas de crash de l'O.S. Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 58 Forum PHP Novembre 2007
  • 59. http://dasini.net/blog/ Optimisation du serveur MySQL: InnoDB • innodb_log_buffer_size – Taille du tampon des logs d'InnoDB – Vidé environ toutes les secondes (checkpoint) – En général entre 8Mo & 16Mo • innodb_log_file_size – Taille des fichiers de log d'InnoDB (2 par défaut) – Une grande valeur améliore les performances Mais augmente le temps de restauration – Valeurs courantes: 64Mo à 512Mo Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 59 Forum PHP Novembre 2007
  • 60. http://dasini.net/blog/ Optimisation du serveur MySQL: Variables globales • table_cache – Cache des descripteurs de fichier – Chaque table ouverte nécessite un descripteur de fichiers (par connection), plus un pour le .MYI (MyISAM) – Augmenter votre table_cache si opened_tables croit rapidement • thread_cache – Cache des threads – Chaque session prend un thread à la connexion et le rend à la déconnexion – Augmenter si threads_created croit rapidement – Taux de succès du cache de thread: threads_created/connections Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 60 Forum PHP Novembre 2007
  • 61. http://dasini.net/blog/ Optimisation du serveur MySQL: Variables spécifiques à la session ● read_buffer_size – Tampon d'enregistrements pour les full table scans ● sort_buffer_size – Tampon pour GROUP BY / ORDER BY ● tmp_table_size – Tampon pour les tables temporaires stockées en mémoire (memory). Au delà, elles sont copiées sur disque (MyISAM) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 61 Forum PHP Novembre 2007
  • 62. http://dasini.net/blog/ Optimisation du serveur MySQL: Autres variables à surveiller... ● Indicateur de hautes charges – max_used_connections – threads_created – opened_tables ● Indicateur de réponses lentes – slow_queries – Slow_launch_threads (Nombre de threads qui ont pris plus de slow_launch_time secondes pour être créés) Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 62 Forum PHP Novembre 2007
  • 63. http://dasini.net/blog/ Optimisation du serveur MySQL: Autres variables à surveiller... ● Indicateurs de comportements – Table_locks_immediate – Table_locks_waited ● Les handler – Handler_read_first=>lecture d'index – Handler_read_key=>lecture d'index – Handler_read_next=>lecture d'index – Handler_read_prev=>lecture d'index – Handler_read_rnd=>lecture des données – Handler_read_rnd_next=>lecture des données Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 63 Forum PHP Novembre 2007
  • 64. http://dasini.net/blog/ Optimisation du serveur MySQL: Autres variables à surveiller... ● Indicateurs de requêtes: – Tables temporaires ● Created_tmp_disk_tables => augmenter tmp_table_size ● Created_tmp_tables => order by, group by – Requêtes pas optimisées ● Select_full_join, Select_full_range_join: problèmes d'index dans la jointure ● Select_scan: full scan sur la premiere table de la jointure – Requêtes coûteuse ● sort_merge_passes => augmenter le sort_buffer_size Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 64 Forum PHP Novembre 2007
  • 65. http://dasini.net/blog/ Optimisation de MySQL... ● Les procédures stockées ● Le partitionnement (MySQL 5.1) ● La réplication ● Le cluster Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 65 Forum PHP Novembre 2007
  • 66. http://dasini.net/blog/ Aller (encore) plus loin ● Comme JC Vandamme, soyez « aware » ● http://www.mysql.com ● http://www.mysqlperformanceblog.com ● http://jpipes.com/index.php ● http://dasini.net/blog/ Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 66 Forum PHP Novembre 2007
  • 67. http://dasini.net/blog/ Questions ? Optimisation de MySQL Olivier DASINI - http://dasini.net/blog 67 Forum PHP Novembre 2007