SQL Academy · Pelajaran

MVCC dan Punca Pengembungan

Fahami kawalan keserentakan berbilang versi, sebab tupel mati terkumpul, dan cara transaksi panjang menyebabkan pengembungan.

Pelajaran 1 daripada 414 langkah

MVCC dan Punca Pengembungan ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah MVCC?

Kawalan Keserentakan Berbilang Versi. Daripada menggunakan penguncian, PostgreSQL mengekalkan berbilang versi sesuatu baris. Pembaca melihat petikan yang konsisten; penulis mencipta versi baharu tanpa menyekat pembaca.

Cara UPDATE Berfungsi

UPDATE tidak mengubah baris di tempatnya:

  1. Tandakan versi baris lama sebagai "mati" pada transaksi T
  2. Tulis versi baharu
  3. Transaksi lain melihat versi yang dibenarkan oleh petikannya

Mengapa Kembungan Berlaku

Versi mati terkumpul. Jadual menjadi semakin besar walaupun bilangan barisnya kekal. Tanpa pembersihan, pertanyaan mengimbas semakin banyak baris mati.

Apabila VACUUM Mendapatkan Semula Ruang

VACUUM menandakan baris mati sebagai boleh digunakan semula (dalam fail jadual). Ia TIDAK mengecilkan fail melainkan fail tersebut kosong sepenuhnya di bahagian akhir. VACUUM FULL menulis semula jadual — kunci eksklusif dan proses yang perlahan.

Autovacuum

PostgreSQL menjalankan autovacuum di latar belakang. Ia dicetuskan apabila baris mati melepasi ambang:

autovacuum_vacuum_threshold = 50
autovacuum_vacuum_scale_factor = 0.2
-- vacuum when dead_rows > 50 + 0.2 * total_rows

Beban Kerja yang Menyebabkan Kembungan

  • Trafik UPDATE yang tinggi pada jadual kecil / sibuk
  • Kelompok DELETE yang besar (memerlukan vacuum untuk membebaskan ruang)
  • Transaksi yang berjalan lama menyekat vacuum (mengekalkan petikan)
  • Sesi terbiar dalam transaksi mengumpulkan baris mati pada jadual yang sibuk

Mendiagnosis Kembungan

Sambungan pgstattuple memberikan angka yang tepat:

CREATE EXTENSION pgstattuple;

SELECT * FROM pgstattuple('orders');
-- table_len, tuple_count, dead_tuple_count, free_space, etc.

SELECT * FROM pgstatindex('orders_user_id_idx');

Transaksi Panjang Menyekat Vacuum

VACUUM hanya boleh membersihkan baris yang lebih lama daripada transaksi aktif paling lama. Sesi terbiar dalam transaksi selama 4 jam bermakna terdapat baris mati yang tidak dituntut selama 4 jam.

SELECT pid, state, xact_start, NOW() - xact_start AS duration
FROM pg_stat_activity
WHERE state IN ('active', 'idle in transaction')
ORDER BY duration DESC NULLS LAST;

Perlindungan Kitaran Semula

ID transaksi mempunyai lebar 32 bit. Jika autovacuum tidak dapat mengejar, kelompok akan menghadapi "kitaran semula" dan masuk ke mod keselamatan (VACUUM dipaksa). Pantau:

SELECT datname, age(datfrozenxid) FROM pg_database
ORDER BY age(datfrozenxid) DESC;

Pemadaman Logikal ≠ Fizikal

DELETE menandakan baris sebagai mati; ruang tersebut hanya boleh diperoleh semula oleh VACUUM. DELETE pukal yang tidak diikuti vacuum meninggalkan kumpulan besar baris mati.

Kemas Kini HOT

Jika anda hanya mengemas kini lajur yang tidak diindeks dan terdapat ruang kosong pada halaman yang sama, PostgreSQL melakukan kemas kini HOT (Heap-Only Tuple) — tiada pengubahsuaian indeks dan kurang kembungan.

Mengurangkan Kembungan

  • Pastikan transaksi singkat
  • Elakkan UPDATE yang meluas pada lajur berindeks (HOT tidak dapat digunakan)
  • Laraskan autovacuum secara agresif pada jadual yang kerap berubah
  • Gunakan pg_repack untuk menulis semula tanpa kunci yang lama

Ringkasan

MVCC membolehkan keserentakan dengan kos pengumpulan baris mati.

  • VACUUM membersihkan baris mati
  • VACUUM automatik adalah penting — jangan nyahdayakannya
  • Transaksi yang lama menghalang pembersihan
  • Diagnosis menggunakan pgstattuple

Semakan Pantas

Mengapakah UPDATE tidak mengecilkan jadual walaupun hanya satu lajur berubah?

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “MVCC dan Punca Pengembungan” percuma?

Ya — teks penuh “MVCC dan Punca Pengembungan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “MVCC dan Punca Pengembungan”?

Fahami kawalan keserentakan berbilang versi, sebab tupel mati terkumpul, dan cara transaksi panjang menyebabkan pengembungan. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “MVCC dan Punca Pengembungan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. MVCC dan Punca Pengembungan
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE dan pg_statistic
  4. Imbasan Hanya Indeks dan Peta Keterlihatan
← Kembali ke SQL Academy