Comprendre MVCC et VACUUM
Découvrez le contrôle de concurrence multiversion (MVCC) et le rôle essentiel de VACUUM dans la prévention du gonflement des tables.
Comprendre MVCC et VACUUM est une leçon PostgreSQL Performance & Query Optimization gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PostgreSQL Performance & Query Optimization, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PostgreSQL Performance & Query Optimization comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Meet MVCC: Concurrency's Friend
Welcome to understanding PostgreSQL's core! Today, we dive into Multi-Version Concurrency Control (MVCC). It's a fancy term for a simple, powerful idea.
MVCC is how PostgreSQL allows many users or applications to access and modify data at the same time without interfering with each other. Think of it as a traffic controller for your database.
Why MVCC Matters for Speed
Imagine a database without MVCC. If one user is reading a row, another user trying to update that same row would have to wait. This is called locking, and too much of it can make your database painfully slow.
MVCC solves this by ensuring that readers don't block writers, and writers don't block readers. Everyone gets their own consistent view of the data.
Rows Have Many Lives
The magic of MVCC lies in how it handles changes. When you UPDATE or DELETE a row in PostgreSQL, the database doesn't immediately overwrite or remove the original data.
Instead, it creates a new version of the row (for updates) or simply marks the existing row as 'deleted' without physically removing it. The old version remains, temporarily.
Seeing the Right Data
How does PostgreSQL know which version of a row to show you? Each transaction gets a unique ID. When a row is created, it gets an xmin (creation transaction ID). When it's 'deleted', it gets an xmax (deletion transaction ID).
- Your transaction only sees rows committed *before* it started.
- It ignores rows deleted *after* it started.
This ensures you always see a consistent snapshot of the data.
The Aftermath of an UPDATE
Let's see a simple example of how an UPDATE creates new row versions:
First, we create a table and insert a product:
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2)
);
INSERT INTO products (name, price) VALUES ('Laptop', 1200.00);Updates Create Dead Tuples
Now, when we update the price, PostgreSQL doesn't change the existing row. Instead, it marks the old row version as 'dead' and inserts a brand new row version with the updated price.
The old version is now a 'dead tuple' – it's no longer visible to new transactions but still occupies disk space.
UPDATE products SET price = 1250.00 WHERE id = 1;The Hidden Mess: Table Bloat
Over time, with many UPDATEs and DELETEs, tables can accumulate a lot of these 'dead tuples'. This leads to table bloat.
Table bloat means your database files are larger than they need to be, consuming more disk space and potentially slowing down queries because more data needs to be read from disk.
Enter VACUUM!
This is where the VACUUM command comes in! Its primary job is to clean up these dead tuples. It's like a janitor for your database, tidying up the old, unused versions of data.
VACUUM marks the space occupied by dead tuples as reusable, making it available for new data to be inserted into the table. This prevents continuous table growth and improves performance.
How VACUUM Cleans Up
When you run VACUUM, PostgreSQL scans the table, identifies dead tuples, and adds their locations to a 'free space map'. This doesn't immediately shrink the table file on disk, but it ensures that future INSERTs or UPDATEs can reuse that space.
Here's how you'd run a basic VACUUM:
-- Clean up the 'products' table
VACUUM products;MVCC & VACUUM Check
Let's test your understanding of MVCC and VACUUM's roles.
MVCC & VACUUM: Key Takeaways
You've just learned about two critical PostgreSQL concepts!
- MVCC enables high concurrency by allowing multiple versions of data.
UPDATEs andDELETEs create dead tuples.- Table bloat occurs when these dead tuples accumulate, wasting space.
- The
VACUUMcommand cleans up dead tuples, making their space reusable and preventing bloat.
Understanding these is key to maintaining a healthy and performant PostgreSQL database!
Apprends SQL avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 22
- Leçons
- 88
Questions Fréquemment Posées
La leçon « Comprendre MVCC et VACUUM » est-elle gratuite ?
Oui — le texte complet de « Comprendre MVCC et VACUUM » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PostgreSQL Performance & Query Optimization, passe à CoddyKit PRO. Le cours PostgreSQL Performance & Query Optimization comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Comprendre MVCC et VACUUM » ?
Découvrez le contrôle de concurrence multiversion (MVCC) et le rôle essentiel de VACUUM dans la prévention du gonflement des tables. Tu pratiques PostgreSQL Performance & Query Optimization avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer PostgreSQL Performance & Query Optimization ?
Aucune expérience préalable n'est requise. PostgreSQL Performance & Query Optimization sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Comprendre MVCC et VACUUM » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon PostgreSQL Performance & Query Optimization ?
Oui. Chaque leçon PostgreSQL Performance & Query Optimization inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Comprendre MVCC et VACUUM
- Configuration et réglage de l’autovacuum
- Impact des niveaux d’isolation des transactions
- Prévenir le bouclage des identifiants de transaction