PostgreSQL Performance & Query Optimization · Pelajaran

Memahami MVCC dan VACUUM

Pelajari Multi-Version Concurrency Control (MVCC) dan peran penting VACUUM dalam mencegah penggelembungan tabel.

Pelajaran 1 dari 411 langkah

Memahami MVCC dan VACUUM adalah pelajaran PostgreSQL Performance & Query Optimization gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PostgreSQL Performance & Query Optimization, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PostgreSQL Performance & Query Optimization mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

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 and DELETEs create dead tuples.
  • Table bloat occurs when these dead tuples accumulate, wasting space.
  • The VACUUM command cleans up dead tuples, making their space reusable and preventing bloat.

Understanding these is key to maintaining a healthy and performant PostgreSQL database!

Gratis untuk memulai

Belajar SQL dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
22
Pelajaran
88

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memahami MVCC dan VACUUM” gratis?

Ya — teks lengkap “Memahami MVCC dan VACUUM” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PostgreSQL Performance & Query Optimization, upgrade ke CoddyKit PRO. Kursus PostgreSQL Performance & Query Optimization mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Memahami MVCC dan VACUUM”?

Pelajari Multi-Version Concurrency Control (MVCC) dan peran penting VACUUM dalam mencegah penggelembungan tabel. Kamu berlatih PostgreSQL Performance & Query Optimization dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PostgreSQL Performance & Query Optimization?

Tidak diperlukan pengalaman sebelumnya. PostgreSQL Performance & Query Optimization di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Memahami MVCC dan VACUUM” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PostgreSQL Performance & Query Optimization ini?

Ya. Setiap pelajaran PostgreSQL Performance & Query Optimization menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Memahami MVCC dan VACUUM
  2. Konfigurasi dan Penyetelan Autovacuum
  3. Dampak Tingkat Isolasi Transaksi
  4. Mencegah Perputaran ID Transaksi
← Kembali ke PostgreSQL Performance & Query Optimization