Bases de données PostgreSQL
Transcription
Bases de données PostgreSQL
Bases de données PostgreSQL Gestion des performances Gregory Smith Traduit de l’anglais par Guillaume Lelarge et Thomas Reiss © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 1 18/04/11 17:35 Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous fournir une information complète et fiable. Cependant, Pearson Education France n’assume de responsabilités, ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes qui pourraient résulter de cette utilisation. Les exemples ou les programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle. Pearson Education France ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque nature que ce soit pouvant résulter de l’utilisation de ces exemples ou programmes. Tous les noms de produits ou marques cités dans ce livre sont des marques déposées par leurs propriétaires respectifs. Publié par Pearson Education France 47 bis, rue des Vinaigriers 75010 PARIS Tél. : 01 72 74 90 00 www.pearson.fr Collaboration éditoriale : Hervé Guyader Mise en pages : Léa B. ISBN : 978-2-7440-2483-2 Copyright © 2011 Pearson Education France Tous droits réservés Titre original : PostgreSQL 9.0 High Performance Traduit de l’anglais par Guillaume Lelarge et Thomas Reiss ISBN original : 978-1-849510-30-1 Copyright © 2010 Packt Publishing All rights reserved Aucune représentation ou reproduction, même partielle, autre que celles prévues à l’article L. 122-5 2˚ et 3˚ a) du code de la propriété intellectuelle ne peut être faite sans l’autorisation expresse de Pearson Education France ou, le cas échéant, sans le respect des modalités prévues à l’article L. 122-10 dudit code. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 2 18/04/11 17:35 Table des matières à propos des auteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII à propos des traducteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX Préface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Ce que ce livre couvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Ce dont vous avez besoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 À qui s’adresse ce livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1 PostgreSQL et ses versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Performances des versions de PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Choix d’une version à utiliser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Mise à jour vers une version majeure . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 PostgreSQL ou une autre base de données ? . . . . . . . . . . . . . . . . . . . . . . . . . 10 Les outils autour de PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Les contributions PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 pgFoundry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Autres logiciels liés à PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Montée en charge d’une application PostgreSQL . . . . . . . . . . . . . . . . . . . . 15 Pratique de l’optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 3 18/04/11 17:35 IV 2 Bases de données PostgreSQL Matériel pour la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Équilibrer les dépenses en matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Processeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Disques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Contrôleurs disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Amélioration de la fiabilité des contrôleurs et des disques . . . . . . . . . . . . . 34 Cache write-back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Conséquences d’un cache write-through sur les performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3 Tests de performance du matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Tests des processeurs et de la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 memtest86+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Tests mémoires STREAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Tests des processeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Les sources de lenteur des processeurs et de la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Tests des disques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Accès aléatoire et entrées/sorties par seconde . . . . . . . . . . . . . . . . . . . . 48 Accès séquentiel et ZCAV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Taux de COMMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Outils de test pour les disques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 hdtune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 dd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 bonnie++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 sysbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Tests complexes des disques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Exemples de résultats pour les disques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Attentes sur les performances des disques . . . . . . . . . . . . . . . . . . . . . . . 67 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 4 18/04/11 17:35 4 Table des matières V Configuration des disques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Taille maximale des systèmes de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Restauration suite à un crash du système de fichiers . . . . . . . . . . . . . . . . . . 74 Systèmes de fichiers journalisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Systèmes de fichiers Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 ext2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 ext3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 ext4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 XFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Autres systèmes de fichiers Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Barrières d’écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Configuration générique des systèmes de fichiers . . . . . . . . . . . . . . . . . 84 Systèmes de fichiers Solaris et FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 UFS sur Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 UFS2 sur FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 ZFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Systèmes de fichiers Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 FAT32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 NTFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Topologie des disques pour PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Liens symboliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Tablespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Structure du répertoire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Grappes de disques, RAID et répartition . . . . . . . . . . . . . . . . . . . . . . . . 100 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5 La mémoire comme cache pour la base de données . . . . . . . . . . . . . . . . . . . . 105 Unités mémoire dans le fichier postgresql.conf . . . . . . . . . . . . . . . . . . . . . . 106 Gestion des ressources du noyau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107 Étude du cache de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Installation de pg_buffercache dans une base de données . . . . . . . . . . 111 Topologie de la base de données sur disque . . . . . . . . . . . . . . . . . . . . . . 112 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 5 18/04/11 17:35 VI Bases de données PostgreSQL Création d’un nouveau bloc dans la base de données . . . . . . . . . . . . . . 115 L’écriture des blocs modifiés sur le disque . . . . . . . . . . . . . . . . . . . . . . . 116 Protection des données et cache de données . . . . . . . . . . . . . . . . . . . . . . . . . 116 Principes du traitement des checkpoints . . . . . . . . . . . . . . . . . . . . . . . . . 116 Restauration par les journaux de transactions . . . . . . . . . . . . . . . . . . . . 117 Exécution des checkpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Cycle de vie d’un bloc de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Cache de données et cache du système d’exploitation . . . . . . . . . . . . . . . . 121 Données doublement cachées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Surcharge due aux checkpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Points de départ pour le dimensionnement . . . . . . . . . . . . . . . . . . . . . . . 124 Analyse du contenu du cache de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Requêtes pour inspecter le cache disque . . . . . . . . . . . . . . . . . . . . . . . . . 126 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 6 Configuration du serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Modification de la configuration à la volée . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Valeurs par défaut et valeurs de réinitialisation . . . . . . . . . . . . . . . . . . . 134 Contextes de modification des paramètres . . . . . . . . . . . . . . . . . . . . . . . 134 Recharger le fichier de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Paramètres au niveau serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Connexions aux bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 max_connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139 Traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Nettoyage et collecte des statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Checkpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Configuration des journaux de transactions . . . . . . . . . . . . . . . . . . . . . . 147 PITR et réplication des journaux de transactions . . . . . . . . . . . . . . . . . 149 Paramètres clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Paramètres à éviter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 6 18/04/11 17:35 Table des matières VII Configuration initiale d’un serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Les grandes lignes pour configurer un serveur dédié . . . . . . . . . . . . . . 155 Les grandes lignes pour configurer un serveur mutualisé . . . . . . . . . . 156 pgtune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 7Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Visibilité des transactions avec MVCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Calculs internes de visibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Mises à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Verrous de lignes et conflits de verrouillage . . . . . . . . . . . . . . . . . . . . . 163 Suppressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Avantages de MVCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Inconvénients de MVCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Rebouclage des identifiants de transactions . . . . . . . . . . . . . . . . . . . . . . 166 VACUUM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Implémentation de VACUUM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Modèle de coût pour le VACUUM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 autovacuum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Problèmes courants avec VACUUM et autovacuum . . . . . . . . . . . . . . . 177 Autoanalyze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Dégénérescence des index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Mesurer la dégénérescence des index . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Supervision détaillée des tables et index . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Supervision des traces d’exécution des requêtes . . . . . . . . . . . . . . . . . . . . . 186 Configuration basique des traces de PostgreSQL . . . . . . . . . . . . . . . . . 186 Trace des requêtes lentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Analyse des journaux de traces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Normalisation des requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 pg_stat_statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 7 18/04/11 17:35 Bases de données PostgreSQL VIII pgFouine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 PQA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 pgsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 mk-query-digest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8 Tests de performances des bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Tests par défaut de pgbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Définition des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Définition de l’échelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Définition du script de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Configuration du serveur de bases de données pour pgbench . . . . . . . 205 Exécuter pgbench manuellement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Créer des graphes avec pgbench-tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Configuration de pgbench-tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Exemples de résultats avec pgbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Tests d’extraction seule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Tests du type TPC-B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Analyse de la latence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Sources de variation des performances et de mauvaises performances . . 214 Version en développement de PostgreSQL . . . . . . . . . . . . . . . . . . . . . . .215 Tests personnalisés avec pgbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Tests des performances en insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Tests de performances du TPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 9Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Exemples d’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Mesure statistique des blocs d’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Exécution d’un exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Création du jeu de tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 8 18/04/11 17:35 Table des matières IX Recherche simple dans l’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Parcours complet de table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Création d’un index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Recherche avec un index inefficace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Combiner des index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Basculer d’un parcours d’index à un parcours complet . . . . . . . . . . . . 229 Ordonner les valeurs de la table par rapport à un index . . . . . . . . . . . . 231 Plan d’exécution et compteur de blocs . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Création et maintenance des index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Index uniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Création non bloquante d’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Ordonner une table par rapport à un index . . . . . . . . . . . . . . . . . . . . . . . 235 Facteur de remplissage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Ré-indexation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 Types d’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 B-tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237 Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238 GIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 GiST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Utilisation avancée des index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Index multicolonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Index pour le tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Index partiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Index fondé sur une expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Index pour la recherche plein texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 10 Optimisation des requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Données pour les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Pagila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Dell Store 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 9 18/04/11 17:35 X Bases de données PostgreSQL Informations de bases sur EXPLAIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Surcharge du chronométrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Cache à froid et cache à chaud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Structure d’un nœud du plan d’exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Calcul du coût de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Outils d’analyse de plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 EXPLAIN visuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Affichage verbeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Affichage lisible par des programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Outils d’analyse de plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Assembler des ensembles de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Identifiant de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Parcours séquentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Parcours d’index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Parcours d’index bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Traitement des nœuds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Limite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Agrégat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 HashAggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Parcours de sous-requêtes et de sous-plan . . . . . . . . . . . . . . . . . . . . . . . 266 Opérations sur des ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Materialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 CTE Scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Jointure par boucle imbriquée (Nested Loop) . . . . . . . . . . . . . . . . . . . . 270 Jointure d’assemblage (Merge Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Jointures de hachage (Hash Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 10 18/04/11 17:35 Table des matières XI Statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Visualisation et estimation des statistiques . . . . . . . . . . . . . . . . . . . . . . . 279 Cibles statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Cas difficiles à estimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Autres paramètres du planificateur de requête . . . . . . . . . . . . . . . . . . . . . . . 285 effective_cache_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 work_mem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 constraint_exclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 cursor_tuple_fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Exécuter d’autres types de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Optimiser les requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Optimiser pour des données en cache . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Tester l’équivalence des requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Désactiver les fonctionnalités du planificateur . . . . . . . . . . . . . . . . . . . 290 Contourner les bugs de l’optimiseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Éviter un changement de plan avec OFFSET . . . . . . . . . . . . . . . . . . . . 295 Problèmes externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Limitations du SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Numéroter des lignes en SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Utilisation des fonctions de fenêtrage pour la numérotation . . . . . . . . 300 Utilisation des fonctions de fenêtrage pour calculer des cumuls . . . . 300 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 11 Activité et statistiques de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Vues statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Vues cumulatives et vues instantanées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Statistiques sur les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Entrées/sorties sur les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Statistiques sur les index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Entrées/sorties sur les index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Cumuls par base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 11 18/04/11 17:35 XII Bases de données PostgreSQL Connexions et activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Verrous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Transactions virtuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Interpréter les informations des verrous . . . . . . . . . . . . . . . . . . . . . . . . . 317 Attente des verrous de transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 Attente de verrous de table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Tracer les informations sur les verrous . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Utilisation du disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Activités sur les tampons, le bgwriter et les checkpoints . . . . . . . . . . . . . . 325 Sauvegarder des images de pg_stat_bgwriter . . . . . . . . . . . . . . . . . . . . 327 Améliorer la configuration en utilisant les statistiques du bgwriter . . 329 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 12 Supervision et tendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Outils de supervision Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Configuration d’exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 vmstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 iostat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 sysstat et sar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Outils de supervision Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 Gestionnaire des tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 Windows System Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Logiciels d’analyse de tendance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Supervision et logiciels d’analyse de tendance . . . . . . . . . . . . . . . . . . . 353 Nagios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Cacti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Munin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Autres outils de tendance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 12 18/04/11 17:35 Table des matières XIII 13 Pool de connexions et cache de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Le multiplexage de connexions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Dimensionnement du pool de connexions . . . . . . . . . . . . . . . . . . . . . . . 364 pgpool-II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 pgBouncer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Cache externe de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 memcached . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 pgmemcache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 14 Montée en charge avec la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Hot Standby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Configurer l’envoi des journaux de transactions . . . . . . . . . . . . . . . . . . 375 Streaming Replication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Configurer le Hot Standby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Gestionnaires de file de réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Slony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Londiste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Répartir les lectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Besoins spécifiques des applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Bucardo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 pgpool-II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Autres projets intéressants de réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 15 Partitionner des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Partitionner une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Déterminer la clé de partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Dimensionner les partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .387 Créer les partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 13 18/04/11 17:35 Bases de données PostgreSQL XIV Rediriger les instructions INSERT vers les partitions . . . . . . . . . . . . . 389 Plans d’exécution de requêtes pour des partitions vides . . . . . . . . . . . 392 Trigger de mise à jour sur le changement de date . . . . . . . . . . . . . . . . . 392 Migration en directe d’une table partitionnée . . . . . . . . . . . . . . . . . . . . 393 Requêtes sur les tables partitionnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Créer des nouvelles partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Avantages du partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399 Erreurs habituelles avec le partitionnement . . . . . . . . . . . . . . . . . . . . . . 399 Partitionnement horizontal avec PL/Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Génération de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 PL/proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 GridSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 16 Éviter les problèmes courants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Chargement en masse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Méthodes de chargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Configuration pour les chargements en masse . . . . . . . . . . . . . . . . . . . . 409 Éviter les écritures dans les journaux de transactions . . . . . . . . . . . . . 410 Récréer les index et ajouter les contraintes . . . . . . . . . . . . . . . . . . . . . . 411 Restauration parallélisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 Nettoyage post-chargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Problèmes courants de performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Compter les lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Écritures inexpliquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Exécution lente des fonctions et requêtes préparées . . . . . . . . . . . . . . . 415 Tests de performances de PL/pgsql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Surcharge importante causée par les clés étrangères . . . . . . . . . . . . . . 416 Utilisation de la mémoire par les triggers . . . . . . . . . . . . . . . . . . . . . . . . 417 Charge importante causée par le collecteur de statistiques . . . . . . . . . 417 Vues matérialisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 14 18/04/11 17:35 Table des matières XV Profiler la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 gprof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 OProfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 DTrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Fonctionnalités en relation avec les performances par version . . . . . . . . . 421 Mise à jour agressive d’une version de PostgreSQL . . . . . . . . . . . . . . 421 8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 8.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 8.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 8.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 9.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 © 2011 Pearson Education France – Bases de données PostgreSQL – Gregory Smith Book_PostgreSQL.indb 15 18/04/11 17:35