0Pricing
SQL Academy · Pelajaran

Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE

Bandingkan tingkat isolasi standar SQL, implementasinya di PostgreSQL, dan pilih tingkat yang tepat untuk beban kerja Anda

Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Empat Tingkat Standar

Standar SQL mendefinisikan empat tingkat isolasi:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

PostgreSQL menerapkan tiga tingkat (READ UNCOMMITTED berperilaku seperti READ COMMITTED).

READ COMMITTED (Default PostgreSQL)

Setiap pernyataan melihat data yang sudah di-COMMIT sebelum pernyataan tersebut dimulai. Anda mungkin melihat snapshot yang berbeda dalam satu transaksi.

-- Inside one transaction:
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- meanwhile another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- 200  (non-repeatable read)

REPEATABLE READ (Isolasi Snapshot)

Melihat snapshot yang diambil saat transaksi dimulai. Pembacaan ulang pada baris yang sama selalu mengembalikan nilai yang sama. REPEATABLE READ PostgreSQL juga mencegah baris semu.

BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1;  -- 100
-- another tx commits balance=200
SELECT balance FROM accounts WHERE id = 1;  -- still 100
COMMIT;

SERIALIZABLE

Paling kuat: seolah-olah transaksi dijalankan satu per satu. PostgreSQL menggunakan Serializable Snapshot Isolation (SSI) — mendeteksi dependensi yang berjalan bersamaan dan membatalkan transaksi yang bertentangan:

BEGIN ISOLATION LEVEL SERIALIZABLE;
...
COMMIT;
-- ERROR: could not serialize access due to read/write dependencies

Mengatur Tingkat Isolasi

Per transaksi, per sesi, atau secara global:

-- Per transaction:
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- Per session:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- Default for new transactions in this session:
SET default_transaction_isolation = 'repeatable read';

-- Global default in postgresql.conf:
-- default_transaction_isolation = 'read committed'

Anomali yang Diizinkan oleh Setiap Tingkat

TingkatKotorTidak BerulangBaris Semu
READ UNCOMMITTEDmungkinmungkinmungkin
READ COMMITTEDtidakmungkinmungkin
REPEATABLE READtidaktidaktidak (di PG)
SERIALIZABLEtidaktidaktidak

Pertukaran Kinerja

  • READ COMMITTED — beban tambahan minimal, default
  • REPEATABLE READ — rencana yang sama, konsistensi snapshot, tanpa penurunan kinerja kecuali jika terjadi konflik penulisan
  • SERIALIZABLE — pencatatan tambahan, dapat membatalkan transaksi; aplikasi memerlukan logika percobaan ulang

Pola Percobaan Ulang Serializable

SERIALIZABLE mungkin membatalkan transaksi dengan kode 40001. Lakukan percobaan ulang dalam perulangan:

for (let i = 0; i < 3; i++) {
  try {
    await client.query('BEGIN ISOLATION LEVEL SERIALIZABLE');
    // ... work ...
    await client.query('COMMIT');
    break;
  } catch (e) {
    if (e.code === '40001') continue;
    throw e;
  }
}

Membaca Snapshot yang Konsisten

Untuk query analitis yang berjalan lama dan memerlukan data konsisten, REPEATABLE READ memberikan keseimbangan yang tepat.

Perilaku Konflik Penulisan

Jika dua transaksi mengubah baris yang sama:

  • READ COMMITTED — transaksi kedua menunggu, lalu membaca ulang baris yang baru dan mencoba lagi
  • REPEATABLE READ — transaksi kedua dibatalkan dengan pesan "could not serialize" — aplikasi harus mencoba lagi

Memilih Tingkat yang Tepat

Aturan praktis:

  • OLTP — READ COMMITTED (default)
  • Laporan yang memerlukan konsistensi — REPEATABLE READ
  • Uang / persediaan — SERIALIZABLE + percobaan ulang, ATAU kunci eksplisit (FOR UPDATE)

Kunci Eksplisit Terkadang Mengungguli Isolasi

Sering kali, SELECT ... FOR UPDATE pada READ COMMITTED lebih sederhana daripada SERIALIZABLE untuk satu baris yang sangat sering diakses.

Ringkasan

Tingkat isolasi menukar keamanan dengan konkurensi.

  • READ COMMITTED adalah default
  • REPEATABLE READ untuk pembacaan yang konsisten
  • SERIALIZABLE untuk perilaku "seolah-olah serial" — memerlukan logika percobaan ulang

Pemeriksaan Singkat

Manakah tingkat isolasi default PostgreSQL?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” gratis?

Ya — teks lengkap “Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE”?

Bandingkan tingkat isolasi standar SQL, implementasinya di PostgreSQL, dan pilih tingkat yang tepat untuk beban kerja Anda Kamu berlatih SQL Academy 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 SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy 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 2 dari 4.

Berapa lama pelajaran “Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE” 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 SQL Academy ini?

Ya. Setiap pelajaran SQL Academy 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. Properti ACID dan Anomali
  2. Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  3. Deadlock: Deteksi dan Pencegahan
  4. Penguncian Optimistis vs Pesimistis
← Kembali ke SQL Academy