PostgreSQL Et MVCC v.1.0 07/11/2009 Licence Creative Commmons CC-BY-NC-SA.

Slides:



Advertisements
Présentations similaires
Gestion de la concurrence avec Entity Framework Développement d’application avec base de données Chapitre 23 Hugo St-Louis – Automne 2015.
Advertisements

SQLSaturday Paris 2016 Query Store ou comment donner de la mémoire à sa base de données Sarah Bessard Philippe Geiger.
GCstar Gestionnaire de collections personnelles Christian Jodar (Tian)
Ghost (Création d'image Système)‏ C.R.I.P.T Informatique (BOYER Jérôme)‏
Les sauvegardes Pourquoi sauvegarder ? Que sauvegarder ? Quand sauvegarder ? Ou sauvegarder ? Et comment ?
Logiciel Assistant Gestion d’Événement Rémi Papillié (Chef d’équipe) Maxime Brodeur Xavier Pajani Gabriel Rolland David St-Jean.
Projet tuteuré 2009 Les clients légers Alexandre Cédric Joël Benjamin.
Système de gestion d'entrées pour un cinéma Scanvion Michel – Etudiant 4.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
PostgreSQLfr.org Nouvelles fonctionnalités de la version 8.3.
Le système Raid 5 Table des matières Qu'est ce que le RAID ? Les objectifs Le raid 5 Les avantages et les inconvénients Les composants d’un Raid.
I-Cloud By i-Team TIC 17/11/2014. INTRO Cloud computing Apple, 20/12/2014 iPhone,iPad,iPod Touch & Mac OS X // Windows Vista (Outlook) Révolution numérique,
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
SQL partie 5 1 LMD create – update – primary key secondary key.
Le référencement gratuit Référencer gratuitement Licence Creative Common by SA Matthieu GIROUX Développeur en informatique de gestion libre
Utilisation du logiciel EduStat © Construire une épreuve.
Master ESEEC Rédaction de documents (longs) structurés Patrice Séébold Bureau 109, Bât B.
A partir du 1er mars 2016 : 2 offres
Notre site Internet Un outil d'information au service de tous
La feuille de style LaTeX
Module S41 Chapitre 11  Configuration de Windows XP Professionnel pour l'informatique mobile.
L'ESPACE NUMÉRIQUE DE TRAVAIL
Rechercher des articles et des sites web
Mise en place d’un système de partage de fichiers
Module de gestion des tournées de livraison
Mettre à jour les données
Environnement du développement de BD ORACLE REPORTS 10g
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
ملخص Initiation à la sgbdr
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Pas de variable globale
Se connecter toujours depuis TecfaMoodle
Gestion de version centralisée et décentralisée
Utilisation de PostgreSQL
Langage de manipulation de données (LMD)
Marc Cousin Meetup PostgreSQL Nantes 8 mars 2017
Séminaire EOLE Beaune Septembre 2007
Principes de programmation (suite)
DARCY Lionel BTS SIO Option SLAM
Chapitre 12 Surveillance des ressources et des performances
Mini synthèse accès fichier en C
Difficultés de programmation
Formation Microsoft® Office SharePoint® Server 2007
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Gestion du cours Aissa Boulmerka.
Chapitre 7 Configuration de l'environnement du bureau
Cyber-Sphinx Séance 2.
SQL LMD FICHE 4.6.
Manipulation D’Une Base De Données
SRT2 APACHE.
</Présentation de solutions documentaires>
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
6. CONCEPTION PHYSIQUE RELATIONNELLE
Gestion des photos Organisation du disque dur, Navigation
1. LE LANGAGE SQL DDL Version 2 - Janvier Le langage SQL-DDL
BUFFER CIRCULAIRE Meryem EL BAKRI. PLAN Introduction Buffer circulaire Fonctionnement.
Info Bases de données avancées
RABAH M ed Ali 2018/2019
Ordonnancement des processus sous Windows NT
Notions d'architecture client-serveur. Présentation de l'architecture d'un système client/serveur Des machines clientes contactent un serveur qui leur.
Présentation du site Martine Cochet.
Tableau de bord d’un système de recommandation
Definition de html sommaire. Présentation de html, css et javascript Module 1.
Contenu Systèmes de test parallèles Multithreading Synchronisation
REUNION RUPN Transition d’année - Archivage
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Comment aller plus loin avec Zotero? Comité d’Aide à la Publication, FMT Zotero worshop Hand’s on session Zotero worshop Hand’s on session 12h-12h30.
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

PostgreSQL Et MVCC v /11/2009 Licence Creative Commmons CC-BY-NC-SA

Guillaume Lelarge Membre fondateur de PostgreSQLfr Contributeur de longue date Traduction de la documentation Patchs pour de nombreux projets (pgAdmin) Patchs pour PostgreSQL Promotion de PostgreSQL Articles dans linux mag Conférences Blog Consultant chez Dalibo

3 Sommaire MVCC Quel but ? Comment se font les modifications de données Avantages / Inconvénients Quelles solutions pour ces inconvénients Améliorations des différentes versions

4 MVCC Acronyme Multi Version Concurrency Control Autrement dit ? Contrôle des accès simultanés par gestion de différentes versions d'une même ligne

5 Principe Une lecture ne doit pas bloquer une autre lecture Une écriture ne doit pas bloquer une lecture Une lecture ne doit pas bloquer une écriture Une écriture ne doit pas bloquer une écriture Sauf si l'écriture concerne la même ligne

6 But de MVCC Fluidifier l'accès aux données grâce à des verrous légers Faciliter la vie des développeurs pas de gestion manuelle des verrous

7 L'implémentation 1/3 Du côté des processus clients À chaque début de transaction, un identifiant de transaction est associé SELECT virtualxid, transactionid FROM pg_locks; virtualxid transactionid 1/

8 L'implémentation 2/3 Chaque ligne de chaque table contient deux informations essentielles Identifiant de transaction qui a créé la ligne Identifiant de transaction qui a supprimé la ligne

9 L'implémentation 3/3 Chaque processus voit une image spécifique de la base de données Un processus/Une transaction ne voit que les lignes dont l'identifiant de création est inférieure à l'identifiant de la transaction et dont l'identifiant de suppression est supérieure à l'identifiant de transaction Et évidemment à condition que la transaction de création/suppression soit validée

10 Faisons quelques tests Base de tests pgday2009 createdb pgday2009 Une table t1, deux colonnes CREATE TABLE t1 (i integer, t text);

11 Insérons des lignes... Trois lignes pour commencer INSERT INTO t1 VALUES (1, 'un'), (2, 'deux'), (3, 'trois'); Vérifions leur présence avec un SELECT

12 Contenu réel de la table Il existe aussi des colonnes systèmes xmin, identifiant de transaction de création de la ligne xmax, identifiant de transaction de suppression de la ligne ctid, paire indiquant l'emplacement dans le fichier et quelques autres...

13 Contenu réel de la table - 2 Il existe aussi des colonnes systèmes xmin, identifiant de transaction de création de la ligne xmax, identifiant de transaction de suppression de la ligne ctid, paire indiquant l'emplacement dans le fichier SELECT xmin, xmax, ctid, * FROM t1;

14 Mettons à jour une ligne UPDATE t1 SET t=upper(t) WHERE i=2; SELECT xmin, xmax, ctid, * FROM t1; Mais que s'est-il réellement passé ? La ligne de ctid (0,2) est morte La nouvelle ligne est la (0,4)

15 Ligne vivante / Ligne morte Ancienne ligne 2 : ligne morte (dead tuple) Nouvelle ligne 2 : ligne vivante (live tuple) Ce comportement permet la sauvegarde à chaud (pg_dump)

16 Mettons à jour une ligne UPDATE t1 SET t=upper(t) WHERE i=2; À priori, cela ne modifie rien... SELECT xmin, xmax, ctid, * FROM t1; … et pourtant nous avons une nouvelle ligne vivante et une nouvelle ligne morte

17 Que peut-on en déduire Les lignes mortes grossissent la table indument Lecture séquentielle plus longue D'où des pertes de performance Résultat de ce comportement : fragmentation des tables La fragmentation est à combattre

18 Et si on insérait une ligne ? INSERT INTO t1 VALUES (4, 'quatre'); À quel emplacement va se trouver cette ligne ? En position 2 ? En position 4 ? En position 6 ?

19 Et si on insérait une ligne ? SELECT xmin, xmax, ctid, * FROM t1; Il n'a pas ré-utilisé l'espace mort ! Pourquoi ?

20 Pas de récup auto de l'espace mort PostgreSQL ne suit pas automatiquement les espaces morts Sans opération supplémentaire, la fragmentation ne pourra qu'augmenter D'où la commande VACUUM

21 VACUUM Lit séquentiellement la table Vérifie pour chaque ligne morte si la ligne est toujours visible par certaines transactions Sinon, enregistre l'information dans une structure appelée FSM

22 FSM Acronyme de Free Space Map Pour les versions < 8.4 Structure en mémoire uniquement Configuration max_fsm_pages et max_fsm_relations À partir de la 8.4 Structure disque Développement de Heikki Linnakangas Disparition des paramètres max_fsm_*

23 Et si on testait un VACUUM ? VACUUM VERBOSE t1; INFO: exécution du VACUUM sur « public.t1 » INFO: « t1 » : 2 versions de ligne supprimables, 4 non supprimables parmi 1 pages sur 1 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 1 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: exécution du VACUUM sur « pg_toast.pg_toast_34333 » INFO: l'index « pg_toast_34333_index » contient maintenant 0 versions de ligne dans 1 pages DÉTAIL : 0 versions de ligne d'index ont été supprimées. 0 pages d'index ont été supprimées, 0 sont actuellement réutilisables. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: « pg_toast_34333 » : 0 versions de ligne supprimables, 0 non supprimables parmi 0 pages sur 0 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 0 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. VACUUM

24 Explication de texte 1/3 VACUUM VERBOSE t1; INFO: exécution du VACUUM sur « public.t1 » INFO: « t1 » : 2 versions de ligne supprimables, 4 non supprimables parmi 1 pages sur 1 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 1 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: exécution du VACUUM sur « pg_toast.pg_toast_34333 » INFO: l'index « pg_toast_34333_index » contient maintenant 0 versions de ligne dans 1 pages DÉTAIL : 0 versions de ligne d'index ont été supprimées. 0 pages d'index ont été supprimées, 0 sont actuellement réutilisables. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: « pg_toast_34333 » : 0 versions de ligne supprimables, 0 non supprimables parmi 0 pages sur 0 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 0 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. VACUUM

25 Explication de texte 2/3 VACUUM VERBOSE t1; INFO: exécution du VACUUM sur « public.t1 » INFO: « t1 » : 2 versions de ligne supprimables, 4 non supprimables parmi 1 pages sur 1 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 1 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: exécution du VACUUM sur « pg_toast.pg_toast_34333 » INFO: l'index « pg_toast_34333_index » contient maintenant 0 versions de ligne dans 1 pages DÉTAIL : 0 versions de ligne d'index ont été supprimées. 0 pages d'index ont été supprimées, 0 sont actuellement réutilisables. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: « pg_toast_34333 » : 0 versions de ligne supprimables, 0 non supprimables parmi 0 pages sur 0 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 0 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. VACUUM

26 Explication de texte 3/3 VACUUM VERBOSE t1; INFO: exécution du VACUUM sur « public.t1 » INFO: « t1 » : 2 versions de ligne supprimables, 4 non supprimables parmi 1 pages sur 1 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 1 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: exécution du VACUUM sur « pg_toast.pg_toast_34333 » INFO: l'index « pg_toast_34333_index » contient maintenant 0 versions de ligne dans 1 pages DÉTAIL : 0 versions de ligne d'index ont été supprimées. 0 pages d'index ont été supprimées, 0 sont actuellement réutilisables. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: « pg_toast_34333 » : 0 versions de ligne supprimables, 0 non supprimables parmi 0 pages sur 0 DÉTAIL : 0 versions de lignes mortes ne peuvent pas encore être supprimées. Il y avait 0 pointeurs d'éléments inutilisés. 0 pages sont entièrement vides. CPU 0.00s/0.00u sec elapsed 0.00 sec. VACUUM

27 Et maintenant, faisons un INSERT INSERT INTO t1 VALUES (5, 'cinq'); À quel emplacement va se trouver cette ligne ? En position 2 ? En position 4 ? En position 7 ?

28 Et maintenant, faisons un INSERT INSERT INTO t1 VALUES (5, 'cinq'); YES ! C'est à ça que sert le VACUUM Explication des SELECT sans ORDER BY

29 Et la taille de la table ? Elle ne change pas, ou alors très peu Pour réellement réduire la taille de la table... VACUUM FULL Utile dans quelques cas Plusieurs années de lignes supprimées d'un coup … et ça doit être tout (Gros) problèmes Verrou exclusif Dégrade les performances des index

30 La fragmentation n'est pas le diable Un peu de fragmentation peut être utile Suffisamment pour qu'il soit possible de la réclamer Clause FILL FACTOR À partir de la 8.2 Par défaut: 100% pour les tables 90% pour les index

31 autovacuum Apparu en 8.1 (en module contrib avant) Permet de paramétrer l'exécution automatique d'un VACUUM après une certaine activité autovacuum_vacuum_threshold autovacuum_vacuum_scale_factor à comparer à n_dead_tup Pas de lancement de VACUUM FULL en automatique

32 Nouveau FSM À partir de la 8.4 Pas de perte d'informations sur les blocs disponibles Stocké sur disque dans les fichiers d'extension _fsm Placé en mémoire dans le cache disque (shared_buffers)

33 VACUUM partiel En 8.4 Ne lit que les pages disque modifiées depuis le dernier VACUUM VACUUM complet (pas FULL) forcé si l'âge de la table a dépassé vacuum_freeze_table_age

34 Conclusion MVCC a de très nombreux avantages Ses inconvénients peuvent être diminués À condition de bien comprendre le fonctionnement de PostgreSQL

35 PGDay 2009 N'oubliez pas de rendre compte de votre appréciation des conférences

36 Merci... d'être venu et de m'avoir écouté :) Vos questions sont les bienvenues !