MySQL 5.6. Performances et Tuning. MySQL 5.6 - Performances et Tuning. MySQL 5.6. Vincent TAHON



Documents pareils
Architectures haute disponibilité avec MySQL. Olivier Olivier DASINI DASINI - -

MySQL. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Audit et optimisation MySQL 5

Optimisations des SGBDR. Étude de cas : MySQL

Oracle 11g Optimisez vos bases de données en production (ressources matérielles, stockage, mémoire, requêtes)

CYCLE CERTIFIANT ADMINISTRATEUR BASES DE DONNÉES

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

//////////////////////////////////////////////////////////////////// Administration bases de données

SQL Server 2014 Administration d'une base de données transactionnelle avec SQL Server Management Studio

SQL Server Administration d'une base de données transactionnelle avec SQL Server Management Studio (édition enrichie de vidéos)

Optimisation de MySQL

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

et Groupe Eyrolles, 2006, ISBN :

Base de données MySQL

Du 10 Fév. au 14 Mars 2014

ORACLE TUNING PACK 11G

et Groupe Eyrolles, 2006, ISBN :

MySQL - Réplication. Fichiers de relais et de statut de la réplication. Mise en place de la réplication

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Création d'une nouvelle base de données

Cours 6. Sécurisation d un SGBD. DBA - M1ASR - Université Evry 1

Chapitre 1 Introduction

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

<Insert Picture Here> Solaris pour la base de donnés Oracle

Hyper-V et SC Virtual Machine Manager Technologie de virtualisation sous Windows Server 2008 R2 [2ième édition]

Acronis Backup & Recovery for Mac. Acronis Backup & Recovery et Acronis ExtremeZ-IP ARCHITECTURE DE RÉFÉRENCE

Business Intelligence avec SQL Server 2012

MariaDB/MySQL Avancé. Pierre Mavro Creative Commons License

VMware vsphere 5 Préparation à la certification VMware Certified Professional 5 Data Center Virtualization (VCP5-DCV) - Examen VCP510

Oracle Database 11g: Administration Workshop I Release 2

Introduction aux SGBDR

Notion de base de données

Haute disponibilité avec PostgreSQL

Acronis Backup & Recovery 10 Advanced Server Virtual Edition. Guide de démarrage rapide

Hyper-V (version 3) et System Center Virtual Machine Manager Technologie de virtualisation sous Windows Server 2012 R2

Administration Centrale : Opérations

Hyper-V et SC Virtual Machine Manager sous Windows Server 2008 R2

Synchronisation Mysql (Replication)

Table des matières Chapitre 1 Virtualisation, enjeux et concepts Chapitre 2 Ligne de produit XEN

Le Ro le Hyper V Troisie me Partie Haute disponibilite des machines virtuelles

WEA Un Gérant d'objets Persistants pour des environnements distribués

Tâches planifiées. Chapitre Introduction

Table des matières Page 1

Citrix XenApp 7.5 Concepts et mise en oeuvre de la virtualisation d'applications

Catalogue Formation «Vanilla»

Chapitre 2 Rôles et fonctionnalités

Exchange Server 2013 Préparation à la certification MCSE Messaging - Examen

Guide de déploiement

Boîte à outils OfficeScan

PostgreSQL. Formations. SQL avancé Calendrier... 18

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Hyper-V Virtualisation de serveurs avec Windows Server 2008 R2 - Préparation à l'examen MCTS

Objectif. Participant. Prérequis. Oracle BI Suite EE 10g R3 - Développer des référentiels. 5 Jours [35 Heures]

ORACLE DIAGNOSTIC PACK 11G

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Description de SQL SERVER. historique

Guide de configuration de SQL Server pour BusinessObjects Planning

Guide de prise en main Symantec Protection Center 2.1

Exchange Server 2010 Exploitation d'une plateforme de messagerie

CA ARCserve Backup pour Windows

pour Windows Manuel de l agent pour Microsoft SQL Server r11.1 C F

SQL Server 2012 Administration d une base de données transactionnelle

VMWare Infrastructure 3

Déploiement, administration et configuration

SQL Server 2012 Implémentation d'une solution de Business Intelligence (Sql Server, Analysis Services...)

Implémentation des SGBD

CHAPITRE 1 ARCHITECTURE

Oracle 10g Administration +

Encryptions, compression et partitionnement des données

Oracle Maximum Availability Architecture

PC Check & Tuning 2010 Optimisez et accélérez rapidement et simplement les performances de votre PC!

Technologie SDS (Software-Defined Storage) de DataCore

3. La SGA ou System global Area

Addenda du Guide de l administrateur

VRM Monitor. Aide en ligne

Table des matières 1. Avant-propos. Chapitre 1 Virtualisation du poste de travail

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

Proce dure Installation Cluster de basculement SQL Server 2005

ORACLE 10g Découvrez les nouveautés. Jeudi 17 Mars Séminaire DELL/INTEL/ORACLE

Licences Windows Server 2012 R2 dans le cadre de la virtualisation

Cours 8 Not Only SQL

Comparaison du coût total de propriété de MongoDB et d Oracle. Un livre blanc 10gen

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

La replication dans PostgreSQL

contact@nqicorp.com - Web :

TP Bases de données réparties

//////////////////////////////////////////////////////////////////// Administration systèmes et réseaux

Cloud Computing Maîtrisez la plate-forme AWS - Amazon Web Services

Ora2Pg Performances. (C) 2013 Gilles Darold

VM Card. Manuel des paramètres des fonctions étendues pour le Web. Manuel utilisateur

Windows Server 2012 R2 Administration avancée - 2 Tomes

Didacticiel de mise à jour Web

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Tungsten: une implémentation du futur clustering de PostgreSQL

Introduction : présentation de la Business Intelligence

Cours Bases de données

Transcription:

Ce livre sur l exploitation des bases de données MySQL (versions 5.1 à 5.6) s adresse aux architectes et administrateurs de bases de données, aux chefs de projets techniques et bien entendu à tous les développeurs qui souhaitent utiliser de façon pertinente et efficace toutes les fonctionnalités de ce serveur et aussi écrire des requêtes optimisées. Le livre intègre les nouveautés de la version 5.6 et propose des solutions d analyses techniques pour permettre de tirer un maximum de performances de MySQL Server. L auteur décrit la méthodologie pour identifier les problèmes au niveau de l exécution de requêtes et décrit également comment analyser correctement le moteur de données pour le configurer de façon optimale (les besoins en mémoire / buffers et les besoins transactionnels, buffers logs / redo logs ) notamment avec le moteur InnoDB. Un autre aspect de l architecture MySQL repose sur l adéquation entre le besoin en données et le support physique adopté. L auteur propose donc au lecteur d apprendre à dimensionner correctement les mémoires nécessaires, à gérer le calibrage des I/O sur disques, par rapport à l architecture physique et au système d exploitation et enfin à configurer les exécutions en mode multi-thread en fonction du nombre de cores supportés par l environnement hôte. La haute performance est décrite avec la réplication bi-directionnelle ainsi que la haute disponibilité avec la mise en œuvre de solutions cluster système et du produit MySQL Cluster 7.3. Enfin, le besoin en données de type Big Data, de ressources dans un Cloud, sont autant de demandes auxquelles l auteur répond en présentant les solutions MySQL 5.6 existantes. Les scripts proposés en téléchargement sur le site www.editions-eni.fr sont des exemples de mises en œuvre des bonnes pratiques conseillées dans l ouvrage, notamment des scénarios d écriture de requêtes optimisées. Vincent TAHON est Architecte technique et applicatif, Expert en Bases de données. Il est certifié Oracle et MySQL et dispense tout le cursus officiel des cours MySQL auprès de professionnels en entreprise. En tant qu expert il réalise des audits de performances pour de grands comptes et des sites à haute valeur ajoutée sur des architectures MySQL complexes et hétérogènes. Cette double compétence, technique et pédagogique, lui permet de guider le lecteur sur des voies et solutions pour répondre aux enjeux de développetéléchargement www.editions-eni.fr.fr ment des entreprises d aujourd hui. Sur www.editions-eni.fr : b Scripts d exemples. b Scénarios pour des requêtes optimisées. Pour plus d informations : 39 ISBN : 978-2-7460-9018-7 Les chapitres du livre Avant-propos Introduction à MySQL Architecture MySQL Concept de performance Conception et analyse de performance Indexation Partitionnement Tuning des requêtes MySQL Cache et cache système Configuration de MySQL Server Caractéristiques avancées des objets MySQL Gestion d un moteur de stockage Moteur de stockage InnoDB Prise en compte de l environnement Haute performance MySQL (réplication) Haute disponibilité MySQL (cluster) MySQL et le Big Data - Performances et Tuning Performances et Tuning Performances et Tuning Vincent TAHON

Table des matières 1 Les éléments à télécharger sont disponibles à l'adresse suivante : http://www.editions-eni.fr Saisissez la référence ENI de l'ouvrage EI56MYS dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement. Avant-propos Chapitre 1 Introduction à MySQL 1. Introduction................................................... 23 2. Historique de MySQL........................................... 24 3. Liste des produits MySQL........................................ 26 4. Liste des environnements supportés............................... 27 5. Les certifications MySQL........................................ 28 6. Documentation en ligne......................................... 30 Chapitre 2 Architecture MySQL 1. Présentation de l'architecture MySQL.............................. 31 2. Architecture client/serveur....................................... 32 2.1 Programme client.......................................... 32 2.2 Programme non client...................................... 33 2.3 Programme serveur......................................... 33 3. Concept client/serveur.......................................... 34 3.1 Processus serveur.......................................... 34 3.2 Processus de connexion..................................... 35 3.3 Couche de connexion....................................... 35 3.4 Protocoles de communication................................ 36

2 Performances et tuning 4. Concept de traitement d'information.............................. 38 4.1 Processus SQL............................................. 38 4.2 Couche SQL............................................... 38 5. Concept des moteurs de stockage.................................. 39 5.1 Présentation des moteurs de stockage.......................... 39 5.2 Couche de stockage......................................... 41 6. Concept des mémoires........................................... 43 6.1 Présentation des mémoires dans MySQL....................... 43 6.1.1 Mémoire globale...................................... 43 6.1.2 Mémoire de session................................... 44 6.2 Structure des mémoires..................................... 45 7. Contrôle d'accès concurrentiel.................................... 46 7.1 Explication du contrôle de cohérence.......................... 46 7.2 Gestion des verrous......................................... 47 7.2.1 Verrou de lecture et d'écriture........................... 47 7.2.2 Granularité des verrous................................ 48 7.3 Multiversion Concurrency Control............................ 48 Chapitre 3 Concept de performance 1. Terminologie.................................................. 51 2. Planification d'une analyse comparative............................ 53 2.1 Étudier les profils d'analyse.................................. 53 2.2 Établir une tactique d'analyse................................ 53 2.3 Établir des résultats précis................................... 54 3. Étape de test de performances..................................... 54 3.1 Définition des tests de performances........................... 55 3.2 Liste des tests de performances............................... 56 4. Diagnostiquer un problème....................................... 56 4.1 Obtenir des informations.................................... 57 4.2 Problème de tuning SQL..................................... 57 4.3 Rôle de l'administrateur de données........................... 58

Table des matières 3 5. Déployer des sessions de tests.................................... 58 5.1 Capturer les performances du système d'exploitation............. 58 5.2 Capturer les performances des applications..................... 59 5.3 Capturer les statuts du système de données MySQL Server........ 61 Chapitre 4 Conception et analyse de performance 1. Liste des utilitaires de surveillance................................. 71 1.1 Utilitaires système......................................... 71 1.2 Utilitaires MySQL......................................... 74 2. Outils d'administration MySQL................................... 75 2.1 MySQL Administration..................................... 75 2.2 MySQL Workbench........................................ 75 3. Module de stress de base de données............................... 77 3.1 Présentation du stress de base................................ 77 3.2 Procédé système........................................... 77 3.2.1 Utilitaire sysbench.................................... 77 3.2.2 Utilitaire SAR........................................ 79 3.3 Procédé MySQL........................................... 79 3.3.1 Utilitaire MySQL sql-bench............................ 79 3.3.2 Utilitaire mysqlslap................................... 80 4. Savoir utiliser les types de données................................ 82 4.1 Déterminer le poids de stockage des lignes...................... 82 4.2 Évaluer le type de données dans une table...................... 83 4.3 Utiliser la procédure ANALYSE sur un jeu de données............ 84 5. Commandes spécifiques de surveillance MySQL..................... 85 5.1 Surveiller les threads MySQL................................. 85 5.2 Surveiller les moteurs MySQL................................ 85 5.2.1 Surveiller l'activité des moteurs MySQL.................. 85 5.2.2 Surveiller le poids des moteurs MySQL................... 86 6. Analyses des traces............................................. 86 6.1 Traces de l'instance......................................... 86 6.2 Traces des requêtes......................................... 87

4 Performances et tuning 7. Utilisation de MySQL Enterprise Monitor.......................... 88 7.1 Description de MySQL Enterprise Monitor..................... 88 7.2 Fonctionnalités de MySQL Enterprise Monitor.................. 89 7.2.1 Fonctionnalités des systèmes........................... 89 7.2.2 Fonctionnalités des données............................ 90 7.2.3 Fonctionnalités de performances........................ 90 7.2.4 Fonctionnalités dans un Cloud.......................... 91 8. Utilisation de Performance Schema................................ 91 8.1 Description de Performance Schema........................... 92 8.2 Installation de Performance Schema........................... 92 8.3 Relevé et analyse des captures................................ 93 8.3.1 Investigation de performances au niveau serveur........... 93 8.3.2 Investigation de performances au niveau table............. 94 Chapitre 5 Indexation 1. Qu'est-ce qu'un index?.......................................... 97 2. Présentation des types d'index.................................... 98 2.1 Index B-Tree.............................................. 98 2.2 Index Hash............................................... 98 2.3 Index R-Tree............................................. 100 2.4 Index Bitmap............................................. 101 2.5 Index FullText............................................ 101 3. Stratégie de mise en œuvre d'un index............................. 104 3.1 Impact des index sur l'environnement base de données........... 104 3.1.1 Stockage des index sur disque.......................... 104 3.1.2 Mode de stockage des index sur moteur MyISAM......... 104 3.1.3 Chargement des index en mémoire..................... 104 3.1.4 Coût de mise à jour des données........................ 106 3.2 Opérations sur les index.................................... 107 3.2.1 Création d'un index.................................. 107 3.2.2 Suppression d'un index............................... 107 3.3 Justification de mise en œuvre............................... 108 3.3.1 Principe de cardinalité................................ 108 3.3.2 Principe de sélectivité................................. 108

Table des matières 5 4. Sélectivité d'un index.......................................... 109 4.1 Bonnes pratiques d'indexation............................... 109 4.1.1 Surveiller le Select_full_join........................... 109 4.1.2 Définir les clauses d'indexation......................... 109 4.2 Justification d'utilisation................................... 110 5. Utilisation d'un index.......................................... 111 5.1 Plan d'exécution.......................................... 111 5.2 Forcer l'utilisation d'un index................................ 112 5.3 Ignorer l'utilisation d'un index............................... 112 5.4 Modifier l'ordre du parseur SQL............................. 112 5.5 Coût de mise à jour des données............................. 113 6. Index et maintenance de table................................... 114 6.1 Prise en compte des buffers................................. 114 6.2 Reconstruction d'objet table................................ 114 6.3 Mise à jour des statistiques................................. 115 6.3.1 Vérification de mise à jour des statistiques............... 115 6.3.2 Analyse des statistiques.............................. 115 6.4 Mise à jour d un index..................................... 116 7. Optimisation d'un index........................................ 117 7.1 Justification d'un index.................................... 117 7.2 Mise à jour en différé...................................... 117 7.3 Désactiver la mise à jour automatique des statistiques........... 117 7.4 Activer l'optimisation des index FullText...................... 118 Chapitre 6 Partitionnement 1. Qu'est-ce que le partitionnement?............................... 119 1.1 Quels sont les critères de mise en œuvre?..................... 119 1.2 Concept de partitionnement de données...................... 120 1.3 Augmenter les performances................................ 121 2. Description du partitionnement................................. 121 2.1 Fonctionnement.......................................... 121 2.2 Mécanisme.............................................. 123 2.2.1 Caractéristiques techniques du partitionnement.......... 123 2.2.2 Gestion des données partitionnées sur disque............. 124

6 Performances et tuning 3. Types de partitionnement....................................... 125 4. Création d'un partitionnement vertical............................ 125 5. Création d'un partitionnement horizontal......................... 126 5.1 Méthodologie de création de partition........................ 126 5.2 Création de type Hash partition............................. 127 5.3 Création de type Key partition.............................. 128 5.4 Création de type Range partition............................ 128 5.5 Création de type List partition............................... 130 5.6 Création de type Columns partition.......................... 131 5.7 Création de type Linear partition............................ 132 6. Sous-partitionnement des données................................ 133 7. Partitionnement avancé et moteur de stockage...................... 134 7.1 Prise en charge des moteurs de stockage....................... 134 7.2 Partitionnement non applicable.............................. 135 8. Manipulation des données partitionnées........................... 135 8.1 Sélection de données dans une partition spécifique.............. 135 8.2 Mécanisme de pruning partition............................. 136 9. Monitorer le partitionnement.................................... 137 9.1 Informations sur le partitionnement.......................... 137 9.1.1 Méthode Show Create Table.......................... 138 9.1.2 Méthode Show Table Status........................... 138 9.1.3 Méthode Information_Schema Partition................. 139 9.1.4 Méthode Explain Partition............................ 139 9.2 Surveiller la répartition des données.......................... 140 10. Maintenance des tables partitionnées............................. 141 10.1 Activer le partitionnement de données........................ 141 10.1.1 Activer le partitionnement au niveau de l'instance......... 141 10.1.2 Activer le partitionnement au niveau de la table........... 141 10.2 Maintenance des partitions................................. 142 10.2.1 Ajout de partition................................... 142 10.2.2 Réorganisation de partition............................ 142 10.2.3 Reconstruction de partition........................... 142 10.2.4 Division (split) de partition............................ 143 10.2.5 Fusion (merge) de partitions........................... 143 10.2.6 Libération (coalesce) de partition....................... 144

Table des matières 7 10.2.7 Suppression de partition.............................. 144 10.3 Supprimer le partitionnement des données.................... 145 10.4 Impact de performance des opérations de partition.............. 145 Chapitre 7 Tuning des requêtes 1. Qu'est-ce qu'une requête lente?.................................. 147 2. Premiers pas dans l'optimisation SQL............................. 148 2.1 Collecter les requêtes de l'instance........................... 148 2.2 Analyse des requêtes journalisées............................ 150 2.2.1 Utilitaire d'analyse................................... 150 2.2.2 Analyse des requêtes collectées......................... 151 3. Contrôle des points d'optimisation............................... 152 3.1 Contrôler les paramètres clés................................ 152 3.2 Cacher les index.......................................... 154 3.3 Cacher les résultats des requêtes............................. 155 3.4 Surveiller la consommation mémoire......................... 156 3.5 Optimiser le modèle de requête.............................. 157 4. Plan d'optimisation............................................ 158 4.1 MySQL Query Optimizer.................................. 158 4.2 Transformation des requêtes................................ 159 5. Exécution des requêtes......................................... 159 5.1 Valoriser le coût des requêtes................................ 159 5.2 Contrôler les optimisations................................. 160 5.3 Paramètres système d'amélioration des requêtes................ 161 5.3.1 Déterminer la valeur optimale du read_buffer_size........ 161 5.3.2 Déterminer la valeur optimale du sort_buffer_size......... 162 5.4 Paramètres hints d'amélioration des requêtes................... 164 6. Statistiques.................................................. 164 6.1 Fonctionnement.......................................... 164 6.2 Échantillon des statistiques................................. 165 6.2.1 Mode de fonctionnement transitoire.................... 165 6.2.2 Mode de fonctionnement d'échantillonnage.............. 166 6.2.3 Mode de fonctionnement persistant.................... 167

8 Performances et tuning 6.3 Mise à jour des statistiques................................. 168 6.4 Suivi des statistiques....................................... 169 7. Analyse du plan d'exécution..................................... 169 7.1 Optimisation des requêtes avec EXPLAIN..................... 170 7.2 Commande EXPLAIN au format traditionnel.................. 170 7.3 Commande EXPLAIN au format JSON........................ 172 8. Sous-requêtes................................................. 173 8.1 Description des sous-requêtes............................... 173 8.1.1 Présentation des stratégies d'optimisation................ 173 8.1.2 Optimisation traditionnelle........................... 174 8.2 Amélioration des sous-requêtes.............................. 174 8.3 Paramètres d'optimisation des sous-requêtes................... 175 Chapitre 8 MySQL Cache et cache système 1. Qu'est-ce que le cache et le Query Cache?......................... 177 1.1 Le cache des données système............................... 177 1.2 Les caches des données MySQL.............................. 178 1.3 Le cache des requêtes MySQL............................... 178 1.3.1 Mécanisme de fonctionnement......................... 178 1.3.2 Gestion des données dans le Query Cache................ 180 2. Configuration du Query Cache.................................. 181 2.1 Le Query Cache est-il toujours nécessaire?.................... 181 2.2 Liste des paramètres....................................... 181 2.2.1 Initialisation des paramètres........................... 181 2.2.2 Paramètre QUERY_CACHE_TYPE..................... 182 2.2.3 Paramètre QUERY_CACHE_SIZE...................... 183 2.2.4 Paramètre QUERY_CACHE_LIMIT.................... 183 2.2.5 Paramètre QUERY_CACHE_MIN_RES_UNIT........... 184 2.2.6 Paramètre QUERY_CACHE_ALLOC_BLOCK_SIZE....... 184 2.2.7 Paramètre QUERY_PREALLOC_SIZE................... 184 3. Gestion et maintenance du Query Cache.......................... 184 3.1 Activer le Query Cache..................................... 184 3.2 Désactiver le Query Cache.................................. 185 3.3 Vider le Query Cache...................................... 186

Table des matières 9 3.4 Surveiller le Query Cache................................... 186 3.4.1 Surveiller le statut des variables du Query Cache.......... 186 3.4.2 Surveiller les performances............................ 187 4. Variables avancées du Query Cache............................... 188 4.1 Variable Qcache_free_blocks................................ 188 4.2 Variable Qcache_free_memory.............................. 188 4.3 Variable Qcache_hits...................................... 188 4.4 Variable Qcache_inserts.................................... 188 4.5 Variable Qcache_lowmem_prunes........................... 188 4.6 Variable Qcache_not_cached................................ 189 4.7 Variable Qcache_queries_in_cache........................... 189 4.8 Variable Qcache_total_blocks............................... 189 5. Optimiseur et cache des données (SQL_CACHE).................... 189 6. Prise en compte des limitations du Query Cache.................... 190 7. Monitorer la performance du Query Cache......................... 191 7.1 Déterminer le taux de remplissage du Query Cache............. 191 7.2 Déterminer le taux de fragmentation du Query Cache........... 191 7.3 Déterminer le pourcentage de requêtes en cache................ 192 7.4 Déterminer le pourcentage de rotation du Query Cache.......... 192 7.5 Déterminer le pourcentage d'efficacité du Query Cache.......... 193 Chapitre 9 Configuration de MySQL Server 1. Configuration du serveur MySQL................................ 195 1.1 Initialisation des paramètres................................ 195 1.2 Démarrage de l'instance MySQL............................. 197 1.3 Prise en compte d'un chargement initial....................... 198 2. Configuration des paramètres de connexion........................ 198 2.1 Description du mode de connectivité......................... 198 2.2 Jeton de connectivité client................................. 200 2.3 Processus d arrière-plan : Listener............................ 200 2.4 Paramètres avancés de connexion............................ 201 2.4.1 Paramètre MAX_CONNECTIONS..................... 201 2.4.2 Paramètre MAX_USER_CONNECTIONS............... 202

10 Performances et tuning 2.4.3 Paramètre MAX_CONNECT_ERRORS................. 202 2.4.4 Paramètre SKIP_NAME_RESOLVE..................... 203 2.4.5 Paramètre MAX_ALLOWED_PACKET.................. 204 2.4.6 Paramètre SKIP_NETWORKING....................... 204 2.5 Surveiller les sessions de connectivité......................... 205 2.6 Surveiller les erreurs de connexion............................ 205 3. Configuration de l'utilisation mémoire............................ 206 3.1 Mémoire réservée pour le système d exploitation............... 206 3.2 Mémoire nécessaire pour MySQL............................ 207 3.3 Cache des moteurs de stockage.............................. 209 3.3.1 Cache des données MyISAM.......................... 209 3.3.2 Cache des données InnoDB............................ 210 3.4 Mémoire nécessaire par connexion........................... 211 3.4.1 Description technique des buffers de sessions............. 211 3.4.2 Calcul des buffers de sessions.......................... 213 3.5 Allocation mémoire temporaire.............................. 213 3.5.1 Mode de fonctionnement............................. 213 3.5.2 Caractéristiques techniques........................... 215 3.5.3 Calcul de l'efficacité du cache temporaire................ 216 4. Gestion des I/O Files........................................... 217 4.1 Prise en compte I/O de l'environnement....................... 217 4.1.1 Analyse des schémas de données MySQL................ 217 4.1.2 Paramètre OPEN_FILES_LIMIT........................ 218 4.1.3 Vérifier la configuration de la description I/O Files utilisateur...................................... 219 4.2 Paramètres du cache des tables.............................. 219 4.2.1 Paramètre TABLE_OPEN_CACHE...................... 219 4.2.2 Paramètre DEFINITION_TABLE_CACHE............... 219 4.2.3 Déterminer l efficacité du cache des tables............... 220 4.3 Paramètres avancés sur les fichiers de structure InnoDB.......... 222 5. Configuration de la concurrence d'accès aux données................. 222 5.1 Concurrence d'accès sur moteur MyISAM..................... 222 5.2 Concurrence d'accès sur moteur InnoDB...................... 224 6. Gestion des transactions........................................ 225 6.1 Les transactions........................................... 225 6.2 Niveaux d'isolation des transactions.......................... 226

Table des matières 11 6.3 Phénomène de deadlock.................................... 227 6.4 Journalisation des transactions.............................. 228 6.5 Fonctionnement des transactions dans MySQL................. 228 6.5.1 Paramètre AUTOCOMMIT........................... 228 6.5.2 Paramètre ISOLATION_LEVEL........................ 229 6.5.3 Verrouillage implicite et explicite....................... 229 7. Nouveautés........................................ 230 Chapitre 10 Caractéristiques avancées des objets MySQL 1. Les objets pris en charge........................................ 233 2. Les utilisateurs................................................ 234 2.1 Description des utilisateurs................................. 234 2.2 Création des utilisateurs.................................... 234 2.3 Fonctionnalités avancées de connectivité et d utilisation......... 234 2.3.1 Gestion de la sécurité................................. 234 2.3.2 Paramétrages avancés d utilisation...................... 235 3. Les tables.................................................... 236 3.1 Stockage d une table....................................... 236 3.2 Création avancée d une table compressée...................... 236 3.3 Prise en compte des clés étrangères........................... 238 4. Vues........................................................ 239 4.1 Fonctionnement.......................................... 239 4.2 Création de vue........................................... 239 4.3 Création avancée d une vue................................. 240 4.4 Suppression de vue........................................ 240 5. Requêtes préparées............................................ 241 5.1 Pourquoi utiliser des requêtes préparées?...................... 241 5.2 Création d une requête préparée............................. 241 5.3 Exécuter une requête préparée.............................. 241 5.4 Libérer une requête préparée................................ 242 6. Procédures stockées et fonctions................................. 242 6.1 Pourquoi utiliser des procédures stockées?.................... 242 6.2 Création d une procédure stockée............................ 243

12 Performances et tuning 6.3 Création d une fonction.................................... 244 6.4 Gestion des paramètres..................................... 244 6.5 Exécuter une procédure stockée.............................. 244 6.6 Supprimer une procédure stockée............................ 244 7. Triggers...................................................... 245 7.1 Pourquoi utiliser un trigger?................................ 245 7.2 Création d un trigger...................................... 245 7.3 Gestion d événement...................................... 246 7.4 Supprimer un trigger....................................... 246 7.5 Prise en compte des limitations d un trigger.................... 247 8. Recherche fulltext............................................. 247 8.1 Présentation du fulltext.................................... 247 8.2 Création de colonne fulltext................................ 248 8.3 Création d index sur colonne fulltext......................... 248 8.4 Sélectionner des données fulltext............................ 248 9. Obtenir les métadonnées des objets............................... 249 9.1 Métadonnées des tables.................................... 249 9.2 Métadonnées des procédures................................ 249 9.3 Métadonnées des triggers................................... 249 9.4 Métadonnées des vues..................................... 250 Chapitre 11 Gestion d'un moteur de stockage 1. Définition d un moteur de stockage............................... 251 2. Liste des moteurs de stockage.................................... 252 2.1 Principaux moteurs sous MySQL............................ 252 2.2 Liste des moteurs de stockage disponibles...................... 252 2.3 Moteurs de stockage disponibles en version 5.6................. 255 3. Moteur de stockage MyISAM.................................... 255 3.1 Description du moteur MyISAM............................. 255 3.1.1 Historique.......................................... 255 3.1.2 Caractéristiques techniques et fonctionnalités............ 255

Table des matières 13 3.2 Fonctionnement.......................................... 257 3.2.1 Mécanisme de fonctionnement........................ 257 3.2.2 Gestion des données en mémoire....................... 260 3.2.3 Gestion des données sur disques........................ 262 3.3 Gestion des buffers MyISAM............................... 263 3.3.1 Paramètre KEY_BUFFER_SIZE......................... 263 3.3.2 Déterminer la taille optimale du Key buffer.............. 264 3.3.3 Déterminer le pourcentage d'occupation du Key buffer..... 264 3.3.4 Déterminer de multiples Key Cache..................... 265 3.3.5 Surveiller le buffer MyISAM........................... 266 3.3.6 Surveiller la performance du buffer MyISAM............. 267 3.4 Gestion des tables......................................... 267 3.4.1 Création d'une table................................. 267 3.4.2 Déterminer la taille d'une table......................... 269 3.4.3 Maintenance et optimisation d'une table................ 270 3.4.4 Compactage d'une table.............................. 272 3.4.5 Informations détaillées d'une table...................... 274 3.5 Paramétrages avancés MyISAM............................. 275 3.5.1 Optimisation de la concurrence d'accès aux données....... 275 3.5.2 Paramètre BULK_INSERT_BUFFER_SIZE............... 275 3.5.3 Paramètre MYISAM_SORT_BUFFER_SIZE.............. 276 3.5.4 Paramètre MYISAM_STATS_METHOD................ 276 3.5.5 Paramètre MYISAM-BLOCK-SIZE..................... 277 3.5.6 Paramètre KEY_CACHE_BLOCK_SIZE................. 277 3.5.7 Paramètre TMP_TABLE_SIZE......................... 278 4. Moteur de stockage Memory.................................... 278 4.1 Description du moteur Memory............................. 278 4.1.1 Présentation de Memory.............................. 278 4.1.2 Caractéristiques techniques........................... 279 4.1.3 Principe d'utilisation................................. 280 4.2 Fonctionnement.......................................... 280 4.2.1 Mécanisme de fonctionnement........................ 280 4.2.2 Gestion des données en mémoire....................... 281 4.2.3 Gestion des données sur disque........................ 282 4.3 Gestion des buffers Memory................................ 282 4.3.1 Paramètre MAX_HEAP_TABLE_SIZE................... 282 4.3.2 Surveiller le buffer Memory........................... 282

14 Performances et tuning 4.4 Gestion des tables et index.................................. 283 4.4.1 Création d'une table.................................. 283 4.4.2 Déterminer la taille d'une table......................... 284 4.4.3 Maintenance et optimisation d'une table................. 285 4.4.4 Persistance des données Memory sur disque.............. 285 4.4.5 Informations détaillées d'une table mémoire.............. 286 4.4.6 Utilisation d'un index................................ 286 5. Utilisation des moteurs de stockage secondaires..................... 287 5.1 Moteur de stockage Archive................................. 287 5.1.1 Présentation du moteur Archive........................ 287 5.1.2 Création d'une table.................................. 287 5.1.3 Maintenance de la table............................... 288 5.1.4 Limites techniques du moteur.......................... 288 5.2 Moteur de stockage CSV................................... 288 5.2.1 Présentation du moteur CSV.......................... 288 5.2.2 Création d'une table.................................. 289 5.2.3 Limites techniques du moteur.......................... 289 5.3 Moteur de stockage Federated............................... 289 5.3.1 Présentation du moteur Federated...................... 289 5.3.2 Création d'une table.................................. 290 5.3.3 Gestion des données.................................. 290 5.3.4 Limites techniques du moteur.......................... 291 6. Besoin d'un moteur transactionnel?.............................. 291 7. Comparatif des moteurs de stockage MyISAM vs InnoDB............ 292 7.1 Comparatif des fonctionnalités.............................. 292 7.2 Comparatif des performances............................... 293 8. Quel avenir pour MyISAM?..................................... 299 Chapitre 12 Moteur de stockage InnoDB 1. Description et utilisation du moteur InnoDB....................... 301 1.1 Description du moteur..................................... 301 1.1.1 Historique.......................................... 301 1.1.2 Versions du moteur InnoDB........................... 302 1.1.3 Caractéristiques techniques du moteur.................. 302

Table des matières 15 1.2 Fonctionnement.......................................... 303 1.2.1 Mécanisme de fonctionnement........................ 303 1.2.2 Gestion des données en mémoire....................... 308 1.2.3 Gestion des données sur disque........................ 309 2. Configuration du moteur InnoDB................................ 310 2.1 Initialisation des paramètres................................ 310 2.2 Paramètre DEFAULT_STORAGE_ENGINE.................... 311 2.3 Paramètre INNODB_FILE_PER_TABLE....................... 312 2.4 Paramètre INNODB_FILE_FORMAT......................... 312 2.5 Paramètre INNODB_STRICT_MODE........................ 314 3. Prise en compte du plug-in InnoDB............................... 315 3.1 Installation du plug-in InnoDB.............................. 315 3.2 Vérification du plug-in InnoDB.............................. 318 4. Gestion des tables............................................. 318 4.1 Création d'une table....................................... 318 4.2 Maintenance et optimisation d'une table...................... 319 4.3 Compactage d'une table.................................... 320 5. Gestion des buffers InnoDB..................................... 320 5.1 Paramètre INNODB_BUFFER_POOL_SIZE.................... 320 5.2 Paramètre INNODB_ADDITIONAL_MEM_POOL_SIZE........ 321 5.3 Paramètre INNODB_BUFFER_POOL_AWE_MEM_MB......... 322 5.4 Déterminer l'efficacité du Buffer Pool......................... 323 5.5 Déterminer le pourcentage de pages libres..................... 323 6. Gestion des journaux InnoDB................................... 324 6.1 Fonctionnement de la journalisation......................... 324 6.2 Déterminer la taille optimale des journaux.................... 325 6.3 Déterminer le pourcentage d'occupation des fichiers Log Files..... 326 6.4 Surveiller les Redo logs..................................... 327 6.5 Paramètres InnoDB Log.................................... 328 6.5.1 Paramètre INNODB_LOG_GROUP_HOME_DIR......... 328 6.5.2 Paramètre INNODB_LOG_BUFFER_SIZE............... 329 6.5.3 Paramètre INNODB_LOG_FILE_SIZE................... 330 6.5.4 Paramètre INNODB_FLUSH_LOG_AT_TRX_COMMIT... 332 6.5.5 Paramètre INNODB_LOG_FILES_IN_GROUP............ 333

16 Performances et tuning 7. Gestion des segments d'annulation............................... 334 7.1 Le tablespace d'undo..................................... 334 7.2 Paramètre INNODB_DATA_FILE_PATH..................... 334 7.3 Paramètre INNODB_UNDO_DIRECTORY................... 335 7.4 Paramètre INNODB_UNDO_LOGS.......................... 336 7.5 Paramètre INNODB_UNDO_TABLESPACES.................. 336 7.6 Surveiller les segments d'annulation.......................... 337 8. Paramétrages avancés InnoDB................................... 337 8.1 Paramètre INNODB_BUFFER_POOL_INSTANCES............. 337 8.2 Paramètre INNODB_CHANGE_BUFFER_MAX_SIZE........... 339 8.3 Paramètre INNODB_IO_CAPACITY......................... 339 8.4 Paramètre INNODB_CHECKSUM_ALGORITHM.............. 340 8.5 Paramètre INNODB_DOUBLEWRITE........................ 341 8.6 Paramètre INNODB_FLUSH_METHOD...................... 342 8.7 Paramètre INNODB_USE_NATIVE_AIO..................... 343 8.8 Paramètre INNODB_XA_SUPPORTS......................... 343 8.9 Paramètre INNODB_THREAD_CONCURRENCY............. 344 8.10 Paramètre INNODB_PURGE_THREADS...................... 345 8.11 Paramètre INNODB_READ_IO_THREADS................... 346 8.12 Paramètre INNODB_WRITE_IO_THREADS.................. 346 8.13 Paramètre INNODB_MAX_DIRTY_PAGES_PCT............... 347 8.14 Paramètre INNODB_OPEN_FILES........................... 347 9. Surveillance du moteur InnoDB.................................. 348 9.1 Information InnoDB STATUS............................... 348 9.2 Informations sur les InnoDB MUTEX........................ 351 9.3 Surveillance de la journalisation............................. 352 10. Nouveautés du moteur InnoDB........................ 354 11. Nouveautés MySQL 5.7 du moteur InnoDB attendues............... 354

Table des matières 17 Chapitre 13 Prise en compte de l'environnement 1. Quelle architecture système?.................................... 355 2. Prise en considération de l'environnement hôte..................... 356 3. Prise en compte du stockage (SAN, NAS, SSD, HDISK...)............. 357 3.1 Présentation des systèmes de stockage........................ 357 3.1.1 Le SAN (Storage Area Network)........................ 357 3.1.2 Le NAS (Network-Attached Storage).................... 357 3.1.3 Le SSD (Solid-State Drive)............................ 358 3.2 Description des types de RAID.............................. 359 4. Prise en compte des processeurs (cores)............................ 360 4.1 Présentation des processeurs................................ 360 4.2 Architecture Threading.................................... 361 4.3 Architecture SMP......................................... 362 4.4 Architecture NUMA....................................... 363 5. Prise en compte de la mémoire (RAM)............................ 366 5.1 Mémoire haute (RAM)..................................... 366 5.2 Mémoire basse (SWAP).................................... 367 5.3 Mémoire disque (RAMDISK/RAMFS)........................ 369 5.4 Mémoire verrouillée (MEMLOCK)........................... 370 6. Configuration et optimisation du système d'exploitation............. 371 7. Configuration de la couche réseau (Network)....................... 372 8. Performances du partitionnement système (filesystem).............. 374 8.1 Présentation des systèmes de fichiers......................... 374 8.2 Caractéristiques techniques des systèmes de fichiers............. 374 8.3 Configuration des systèmes de fichiers........................ 375 8.4 Performances des systèmes de fichiers........................ 377 9. Sauvegarde et restauration...................................... 378 9.1 Sauvegarde MYSQLDUMP................................. 378 9.2 Restauration MYSQL...................................... 379

18 Performances et tuning 10. MySQL Enterprise Backup (MEB)................................ 380 10.1 Présentation de MEB....................................... 380 10.2 Mise en œuvre............................................ 380 10.3 Sauvegarde en ligne........................................ 381 10.3.1 Sauvegarde complète................................. 381 10.3.2 Sauvegarde incrémentielle............................. 383 10.4 Restauration............................................. 383 Chapitre 14 Haute performance MySQL (réplication) 1. Description de la réplication..................................... 385 1.1 Présentation de la réplication des données..................... 385 1.1.1 Qu'est-ce qu'une réplication de données?................ 385 1.1.2 Dans quels cas utiliser la réplication?................... 386 1.2 Fonctionnement.......................................... 387 1.2.1 Mécanisme de fonctionnement......................... 387 1.2.2 Gestion des données en mémoire....................... 389 1.2.3 Gestion des données sur disques........................ 390 2. Conception d'architecture répliquée............................... 391 2.1 Prise en compte de l'environnement.......................... 391 2.2 Architecture de réplication.................................. 391 2.3 Concept de réplication..................................... 394 2.3.1 Réplication maître/esclave............................ 394 2.3.2 Réplication maître/maître............................. 394 3. Mise en œuvre d'une réplication.................................. 394 4. Configuration de la fonctionnalité MySQL Replication............... 395 4.1 Préparation des environnements............................. 395 4.2 Configuration MySQL Server............................... 396 4.2.1 Préparation de l'environnement maître.................. 396 4.2.2 Préparation de l'environnement esclave.................. 396 4.3 Synchronisation des données à répliquer...................... 397 4.3.1 Relevé de position de l'environnement maître............. 397 4.3.2 Sauvegarde des données de l'environnement maître........ 397 4.3.3 Restauration des données de l'environnement esclave...... 398 4.3.4 Positionner l'environnement esclave..................... 398

Table des matières 19 4.4 Démarrer la réplication..................................... 399 4.5 Suivi des événements de réplication.......................... 399 5. Paramétrages avancés de MySQL Replication....................... 401 5.1 Gestion des paramètres de réplication......................... 401 5.1.1 Paramètre SERVER-ID............................... 401 5.1.2 Paramètre AUTO_INCREMENT_INCREMENT.......... 401 5.1.3 Paramètre AUTO_INCREMENT_OFFSET............... 402 5.1.4 Paramètre EXPIRE_LOG_DAYS........................ 403 5.1.5 Paramètre SLAVE_NET_TIMEOUT.................... 403 5.2 Gestion des paramètres des binlogs........................... 404 5.2.1 Paramètre SYNC_BINLOG............................ 404 5.2.2 Paramètre BINLOG_CACHE_SIZE..................... 404 5.2.3 Paramètre BINLOG_FORMAT......................... 405 5.2.4 Paramètre BINLOG-IGNORE-DB...................... 406 5.3 Gestion des paramètres des relaylogs......................... 406 5.3.1 Paramètre REPLICATE-IGNORE-DB.................... 406 5.3.2 Paramètre REPLICATE-DO-DB........................ 406 5.4 Optimisation des paramètres de réplication.................... 407 5.4.1 Présentation des points de contrôle de réplication......... 407 5.4.2 Paramètre BINLOG_CHECKSUM...................... 408 5.4.3 Paramètre MASTER_VERIFY_CHECKSUM............. 408 5.4.4 Paramètre SLAVE_SQL_VERIFY_CHECKSUM........... 409 5.5 Amélioration de la réplication en mode ROW.................. 409 5.6 Gestion du parallélisme de réplication........................ 412 5.6.1 Augmenter la capacité avec la réplication multithread...... 412 5.6.2 Paramètre SLAVE_PARALLEL_WORKERS............... 412 6. Surveiller les serveurs de réplication............................... 413 6.1 Monitorer l'environnement maître........................... 413 6.1.1 Information du statut Master......................... 413 6.1.2 Surveiller les sessions de réplication..................... 413 6.2 Monitorer l'environnement esclave........................... 414 6.2.1 Information du statut Slave........................... 414 6.2.2 Surveiller les threads esclaves.......................... 416 6.2.3 Surveiller le parallélisme du travail...................... 417 6.3 Informations basiques de réplication esclave................... 418 6.3.1 Information de la réplication en provenance du maître..... 418 6.3.2 Information de la réplication mise à jour esclave.......... 418

20 Performances et tuning 6.4 Thread de réplication...................................... 419 6.4.1 Le Binlog Dump..................................... 419 6.4.2 Le Slave_IO......................................... 419 6.4.3 Le Slave_SQL....................................... 420 6.4.4 Démarrer ou arrêter les threads de réplication............. 420 6.5 Monitorer le retard de réplication............................ 421 6.6 Surveiller le cache des binlogs................................ 422 6.6.1 Calculer l'efficacité du Binlog cache..................... 422 6.6.2 Visualisation des fichiers Binlog cache sur disque.......... 422 7. Identifier les problèmes de réplication............................. 423 8. Nouveautés sur Replication........................... 424 8.1 Mode de parallélisme de réplication des données................ 424 8.2 Contrôle de cohérence des données répliquées.................. 424 9. Nouveautés attendues MySQL 5.7 Replication...................... 424 Chapitre 15 Haute disponibilité MySQL (cluster) 1. Qu'est-ce que la haute disponibilité?.............................. 425 2. Choisir la solution de haute disponibilité........................... 428 2.1 Solution de réplication de données........................... 428 2.2 Solutions de répartition de charge............................ 428 2.2.1 Solution de répartition de charge système................ 429 2.2.2 Solution de répartition de charge MySQL Proxy........... 430 2.3 Solutions de virtualisation des environnements................. 430 2.4 Solutions de synchronisation des partitions.................... 430 3. Concept de cluster système (Linux/Windows)...................... 432 3.1 Présentation de la solution cluster système.................... 432 3.1.1 Groupe de services et applications...................... 432 3.1.2 Ressources MySQL.................................. 432 3.2 Introduction à Windows Server R2 Failover Clustering.......... 432 3.3 Introduction aux solutions cluster Linux...................... 435 3.3.1 Cluster Linux Pacemaker.............................. 435 3.3.2 Cluster Linux Heartbeat.............................. 435

Table des matières 21 4. Le premier cluster data : MySQL DRBD........................... 436 4.1 Présentation de DRBD..................................... 436 4.2 Premier cluster MySQL DRBD.............................. 437 5. Introduction à MySQL Cluster.................................. 440 5.1 Présentation de l'architecture MySQL Cluster.................. 440 5.1.1 Mode de fonctionnement............................. 440 5.1.2 Présentation des process Mycluster..................... 443 5.1.3 Topologie d'architecture Mycluster..................... 444 5.2 Gestion de nœuds Mycluster................................ 445 5.2.1 Nœud de management............................... 445 5.2.2 Nœud de données................................... 445 5.2.3 Nœud d'exécution................................... 446 5.3 Gestion du cluster MySQL.................................. 446 5.4 Optimisation de l'environnement Mycluster................... 449 5.4.1 Configuration avancée du Kernel Linux................. 449 5.4.2 Configuration avancée du nœud de données.............. 450 5.4.3 Configuration avancée du nœud d'exécution SQL......... 450 6. Nouveautés MySQL Cluster 7.3.................................. 451 6.1 Gestion des Foreign Keys................................... 451 6.2 Fonction d'auto_installeur.................................. 452 6.3 Fonctionnalité NoSQL avec JavaScript........................ 454 6.4 Intégration native de MySQL Server 5.6....................... 455 6.5 Consolidation des sauvegardes et restauration.................. 455 7. Nouveautés MySQL Cluster 7.4 attendues......................... 456 Chapitre 16 MySQL et le Big Data 1. MySQL pour le Big Data........................................ 457 1.1 Les applications dans des plateformes MySQL Big Data.......... 457 1.1.1 Présentation du Big Data............................. 457 1.1.2 Mécanismes d'intégration MySQL Big Data.............. 458 1.2 Les composants d'architecture MySQL Big Data................ 460 2. MySQL dans le Cloud.......................................... 462 2.1 Présentation du Cloud..................................... 462 2.2 Les quatre principales ressources et fondements du Cloud........ 463

22 Performances et tuning 2.3 Une solution hautement disponible et évolutive................ 464 3. MySQL pour le SaaS........................................... 465 3.1 Définition du SaaS........................................ 465 3.2 Architecture SaaS vs Hosting................................ 465 3.3 Avantages du SaaS........................................ 466 3.4 Haute disponibilité et protection des données.................. 466 4. MySQL et NoSQL............................................. 467 4.1 Présentation du NoSQL.................................... 467 4.2 De nouvelles technologies pour de nouvelles demandes........ 468 4.3 Utilisation de NoSQL...................................... 469 4.3.1 Relation Key-value avec MySQL Memcached............. 469 4.3.2 Relation Key-value avec MySQL....................... 469 4.3.3 Implémentation de Memcached dans......... 469 4.3.4 Installation de Memcached dans InnoDB................ 470 4.4 Performances de NoSQL.................................... 470 5. MySQL et Memcached......................................... 471 5.1 Présentation de Memcached................................. 471 5.2 Architecture Memcached................................... 471 5.2.1 Memcached Server................................... 471 5.2.2 Memcached Client................................... 472 5.3 Niveaux d architecture MySQL Memcached................... 473 Index............................................................ 475

147 Chapitre 7 Tuning des requêtes 1. Qu'est-ce qu'une requête lente? Tuning des requêtes Lorsqu'il y a des remontées d'utilisateurs ou une constatation de comportement lent au niveau de l'application, améliorer les requêtes les plus problématiques s'avère généralement payant. Les utilisateurs auront un ressenti de gain d'exécution, le niveau d'activité du serveur sera quant à lui moins important et enfin il sera plus disponible en ressource, pour permettre une charge d exécution plus importante. Chacun possède sa propre perception des lenteurs... Un traitement qui dure une heure ne signifie pas pour autant une lenteur d'exécution. Ce qui est important, c'est la comparaison entre l'avant et l'après. Que s'est-il passé? La question que tout le monde se pose quand il faut améliorer l'exécution d'un traitement d'application est : Comment analyser et optimiser une requête SQL pour de meilleures performances? MySQL permet de collecter les requêtes exécutées sur l'instance. L'administrateur aura la charge de positionner le seuil de capture des requêtes jugées comme lentes en utilisant le journal des requêtes lentes et en activant le paramètre slow_queries_log.

148 Performances et tuning 2. Premiers pas dans l'optimisation SQL Avant toute chose, il est nécessaire de collecter l'ensemble des requêtes qui sont exécutées au niveau de l'instance puis d'analyser le journal des requêtes. 2.1 Collecter les requêtes de l'instance Le journal des requêtes permet de relever toutes les requêtes qui sont passées au niveau de l'instance selon un critère de seuil. La requête est alors journalisée uniquement après son exécution. Par défaut, la journalisation des requêtes est désactivée. C'est la variable slow_query_log qui renseigne sur l'état actif/inactif de la collecte des instructions. SHOW VARIABLES LIKE 'slow_query_lo%'; mysql> show variables like 'slow_query_lo%'; +---------------------+-------+ Variable_name Value +---------------------+-------+ slow_query_log OFF slow_query_log_file +---------------------+-------+ 2 rows in set (0.00 sec) Ici, la journalisation des requêtes est désactivée. C'est le comportement par défaut. Collecter les requêtes Pour activer la capture, il faut positionner dans le fichier de configuration MySQL Server, le paramètre slow_query_log. La simple présence de ce paramètre sera considérée comme active au niveau de l'instance. [mysqld] slow_query_log -- ON 1 slow_query_log_file = /app/log_queries/slow_queries.log long_query_time = 10 Le paramètre slow_query_log_file n'est pas obligatoire. Sans précision sur ce paramètre, le fichier de journalisation des requêtes est créé à l'emplacement des données et porte le nom de hostname-slow.log. Un second paramètre est tout aussi important, le long_query_time. Par défaut ce paramètre est positionné à 10, c'est-à-dire que la collecte des requêtes est effective uniquement dans une condition d'exécution de 10 secondes ou plus. Editions ENI - All rights reserved

Tuning des requêtes Chapitre 7 149 Baisser cette valeur permet d'affiner la capture. mysql> show variables like 'long_query_time'; +-----------------+-------+ Variable_name Value +-----------------+-------+ long_query_time 10 +-----------------+-------+ 1 row in set (0.00 sec) Ici, le long_query_time possède une configuration par défaut. Ce paramètre est dynamique et peut être changé au niveau du prompt MySQL client. mysql/> set @@global.long_query_time = 0; Query OK, 0 rows affected (0.00 sec) Ici, le fait de positionner la valeur à 0 va provoquer la collecte de toutes les requêtes exécutées au niveau de l'instance. Ceci peut être particulièrement efficace pour identifier le comportement et le nombre de requêtes exécutées sur le serveur selon une période donnée. Collecter les requêtes dans un fichier ou dans une table Le paramètre log_output est configuré par défaut en tant que FILE. C'est-à-dire que par défaut toutes les journalisations sont effectuées dans un fichier au format ASCII. Toutefois, il est également possible de journaliser les requêtes dans une table. Pour cela, il est nécessaire de surcharger ce paramètre avec la valeur TABLE. [mysqld] log_output = FILE, TABLE Collecter les requêtes d'un nombre de lignes minimales Le paramètre min_examined_row_limit permet d'examiner uniquement les requêtes dont le nombre de lignes minimales est renseigné. Par défaut, la valeur de ce paramètre est 0. Collecter les requêtes sans index Une variable système log_queries_not_using_indexes permet de collecter uniquement les requêtes n'utilisant pas d'index lors des instructions SQL. Toutes les requêtes SQL exécutées sans index seront collectées.

150 Performances et tuning Cette variable est à positionner dans le fichier de configuration de l'instance. [mysqld] slow_query_log slow_query_log_file = /app/log_queries/slow_queries.log long_query_time = 0 long_queries_not_using_indexes Remarque Dans les anciennes versions de MySQL, notamment en 5.1, le paramètre long_slow_queries correspondait à slow_query_log en version 5.6. 2.2 Analyse des requêtes journalisées 2.2.1 Utilitaire d'analyse MySQL met à disposition un utilitaire mysqldumpslow, qui permet d'analyser un fichier de journalisation de requêtes selon différents critères. Définition des paramètres de mysqldumpslow Paramètre Description t, at Trié par le temps d'exécution des requêtes, par le temps moyen d'exécution des requêtes. l, al Trié par le temps de verrouillage des requêtes, par le temps moyen de verrouillage des requêtes. r, ar Trié par le temps d'envoi des requêtes, par le temps moyen d'envoi des requêtes. c Trié par une valeur. Editions ENI - All rights reserved

Tuning des requêtes Chapitre 7 151 2.2.2 Analyse des requêtes collectées Analyse des requêtes les plus courantes #mysqldumpslow -t 3 -s c /app/log_queriers/slow_queries.log Dans cet exemple, mysqldumpslow avec l'option -t renvoie les trois requêtes les plus courantes. [mysql@ol-mysql56-master app]$ mysqldumpslow -t 3 -s c slow_queries.log Reading mysql slow query log from slow_queries.log Count: 27423 Time=0.01s (15s) Lock=0.00s (14s) Rows=13.0 (1110538), mysql[mysql]@localhost SELECT......... Count: 13812 Time=0.02s (105s) Lock=0.00s (1s) Rows=100.0 (27354), mysql[mysql]@localhost

152 Performances et tuning SELECT * FROM city_huge WHERE CountryCode like 'FR%' ORDER BY CountryCode LIMIT 100 Count: 6251 Time=0.00s (0s) Lock=0.00s (1s) Rows=0.0 (5093457), mysql[mysql]@localhost SELECT count(*) FROM city_big_huge [mysql@ol-mysql56-master app]$ Analyse des requêtes les plus lentes #mysqldumpslow -t 3 -s at /app/log_queriers/slow_queries.log Ici, l'option at renvoie les trois requêtes les plus lentes. Analyse des requêtes possédant les plus gros résultats #mysqldumpslow -t 3 -s as /app/log_queriers/slow_queries.log Ici, l'option as renvoie les trois requêtes disposant des plus gros résultats. Analyse des requêtes possédant le plus d'interblocages #mysqldumpslow -t 3 -s al /app/log_queriers/slow_queries.log Ici, l'option al renvoie les trois requêtes d'interblocage. 3. Contrôle des points d'optimisation Pour optimiser les requêtes, il faut aussi veiller à ce que les points permettant d'assurer la bonne exécution soient cohérents au niveau de l'instance. 3.1 Contrôler les paramètres clés MySQL Server offre la possibilité d'afficher certains paramètres clés en utilisant l'utilitaire mysqladmin. C'est l'option extended-status qui permet d'afficher les valeurs positionnées au niveau de l'instance. mysqladmin -uroot -p extended-status mysqladmun -uroot -p extended-status [ grep {variable_name} ] Editions ENI - All rights reserved