0Pricing
SQL Interview Prep · Pelajaran

Empat Tingkat Isolasi

Dari Read Uncommitted hingga Serializable dan hal yang diizinkan oleh masing-masing tingkat.

Empat Tingkat Isolasi adalah pelajaran SQL Interview Prep 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 Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Pertanyaan di Balik Pertanyaan

Ketika pewawancara meminta Anda "menyebutkan empat tingkat isolasi", pengujian yang sebenarnya adalah apakah Anda dapat menjelaskan komprominya: isolasi yang lebih kuat berarti lebih sedikit anomali, tetapi konkurensi lebih rendah.

Standar SQL menetapkan empat tingkat, diurutkan dari yang paling lemah hingga paling kuat:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

Setiap tingkat mengizinkan atau melarang kumpulan anomali pembacaan tertentu. Pelajaran ini membahas tingkat-tingkat tersebut; pelajaran berikutnya membahas anomalinya secara mendetail.

Menetapkan Tingkat Isolasi

Anda menetapkan isolasi per transaksi atau per sesi. Sintaksnya hampir sama di berbagai mesin.

Jika tidak menetapkannya, setiap basis data memiliki tingkat bawaan. Mengetahui tingkat bawaan adalah pertanyaan wawancara yang sering muncul, jadi kita akan membahasnya di bagian akhir.

-- Per transaction (standard SQL)
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- ... statements ...
COMMIT;

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

Tingkat 1: READ UNCOMMITTED

READ UNCOMMITTED adalah tingkat yang paling lemah. Transaksi dapat membaca baris yang telah diubah oleh transaksi lain tetapi belum disahkan. Pembacaan ini disebut pembacaan kotor.

Jika transaksi lain tersebut dibatalkan, berarti Anda telah membaca data yang secara resmi tidak pernah ada. Hal ini berbahaya untuk segala sesuatu yang harus benar.

Catatan: PostgreSQL memperlakukan READ UNCOMMITTED sama seperti READ COMMITTED, sehingga tidak pernah benar-benar melakukan pembacaan kotor. SQL Server dan MySQL benar-benar menerapkannya.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
-- may see another transaction's uncommitted (dirty) rows
SELECT balance FROM accounts WHERE id = 1;
COMMIT;

Tingkat 2: READ COMMITTED

READ COMMITTED menjamin bahwa Anda hanya membaca data yang telah disahkan. Tidak ada pembacaan kotor.

Namun, setiap pernyataan melihat cuplikan terbaru yang telah disahkan. Jika Anda menjalankan kueri yang sama dua kali dalam satu transaksi, transaksi lain yang disahkan di antaranya dapat mengubah hasilnya. Anomali tersebut disebut pembacaan tidak berulang.

Ini adalah tingkat bawaan di PostgreSQL, Oracle, dan SQL Server, serta merupakan keseimbangan yang masuk akal untuk sebagian besar aplikasi.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;  -- returns 500
-- another transaction commits an update to id = 1
SELECT balance FROM accounts WHERE id = 1;  -- may now return 700
COMMIT;

Tingkat 3: REPEATABLE READ

REPEATABLE READ memastikan bahwa jika Anda membaca sebuah baris dua kali dalam transaksi yang sama, Anda mendapatkan nilai yang sama pada kedua pembacaan. Tingkat ini mengambil cuplikan yang konsisten pada awal transaksi.

Tingkat ini mencegah pembacaan kotor dan pembacaan tidak berulang. Standar masih mengizinkan pembacaan hantu: baris baru yang cocok dengan klausa WHERE Anda dan muncul saat kueri diulang.

Penting: ini adalah tingkat bawaan di MySQL/InnoDB, dan penerapan InnoDB juga memblokir sebagian besar pembacaan hantu melalui penguncian kunci berikutnya.

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;  -- 500
-- another transaction commits a change to id = 1
SELECT balance FROM accounts WHERE id = 1;  -- still 500 in this txn
COMMIT;

Tingkat 4: SERIALIZABLE

SERIALIZABLE adalah tingkat yang paling ketat. Basis data menjamin bahwa hasil menjalankan transaksi secara bersamaan identik dengan hasil menjalankannya satu demi satu dalam suatu urutan serial.

Tingkat ini mencegah pembacaan kotor, pembacaan tidak berulang, dan pembacaan hantu. Konsekuensinya adalah penguncian yang lebih banyak atau, di PostgreSQL, pembatalan akibat kegagalan serialisasi yang harus Anda coba lagi.

Ungkapan dalam wawancara: "SERIALIZABLE memberikan ilusi bahwa setiap transaksi berjalan sendirian, dengan biaya berupa konkurensi yang lebih rendah dan kemungkinan percobaan ulang."

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
INSERT INTO audit (total) VALUES (...);
COMMIT;  -- may raise a serialization_failure you retry

Matriks Anomali

Hal yang paling berguna untuk dihafalkan adalah anomali mana yang diizinkan oleh setiap tingkat. "Ya" berarti anomali tersebut dapat terjadi.

  • READ UNCOMMITTED: kotor=Ya, tidak berulang=Ya, hantu=Ya
  • READ COMMITTED: kotor=Tidak, tidak berulang=Ya, hantu=Ya
  • REPEATABLE READ: kotor=Tidak, tidak berulang=Tidak, hantu=Ya (menurut standar)
  • SERIALIZABLE: kotor=Tidak, tidak berulang=Tidak, hantu=Tidak

Setiap kenaikan tingkat melarang satu anomali tambahan. Perkembangan itulah inti seluruh jawabannya.

Standar dan Penerapan Nyata

Pembedaan tingkat senior: standar SQL mendefinisikan tingkat berdasarkan anomali yang wajib dicegahnya, bukan cara mencegahnya. Mesin nyata sering kali mencegah lebih banyak anomali.

  • REPEATABLE READ PostgreSQL menggunakan isolasi berbasis cuplikan dan juga memblokir pembacaan hantu, meskipun masih dapat mengalami anomali penulisan menyilang.
  • REPEATABLE READ MySQL/InnoDB memblokir pembacaan hantu dengan penguncian kunci berikutnya.
  • SERIALIZABLE PostgreSQL menggunakan SSI (Isolasi Cuplikan Serial), dengan membatalkan transaksi saat terjadi konflik, bukan menggunakan penguncian berat.

Menyebutkan hal ini menunjukkan bahwa Anda tahu standar adalah batas minimum, bukan gambaran perilaku yang persis.

Tingkat Bawaan Tiap Mesin

Tingkat bawaan sangat sering ditanyakan. Hafalkan hal-hal berikut:

  • PostgreSQL: READ COMMITTED
  • Oracle: READ COMMITTED (tidak pernah ada pembacaan kotor)
  • SQL Server: READ COMMITTED
  • MySQL (InnoDB): REPEATABLE READ

Pengecualian MySQL adalah jebakan favorit. Jika ditanya "apa tingkat isolasi bawaannya?", selalu pastikan mesin yang dimaksud terlebih dahulu.

Memilih Tingkat dalam Praktik

Bagaimana cara menentukannya? Rumuskan sebagai pertukaran antara risiko dan laju pemrosesan.

  • Gunakan READ COMMITTED untuk OLTP pada umumnya; tingkat ini cepat dan menghindari pembacaan kotor.
  • Gunakan REPEATABLE READ ketika transaksi membaca data yang sama beberapa kali dan data tersebut harus tetap stabil (laporan, perhitungan bertahap).
  • Gunakan SERIALIZABLE untuk logika yang sangat bergantung pada ketepatan, ketika anomali apa pun tidak dapat diterima, dan rancang logika percobaan ulang untuk pembatalan.

Hampir jangan pernah menggunakan READ UNCOMMITTED di lingkungan produksi.

Pertanyaan Lanjutan yang Umum

Setelah Anda menyebutkan tingkat-tingkat tersebut, pewawancara akan mengajukan pertanyaan lanjutan dengan cepat. Siapkan jawaban yang singkat dan tegas:

  • "Tingkat mana yang mencegah pembacaan kotor tetapi mengizinkan pembacaan tidak berulang?" READ COMMITTED.
  • "Apa satu-satunya anomali yang masih diizinkan REPEATABLE READ menurut standar?" Pembacaan hantu.
  • "Mengapa tidak selalu menggunakan SERIALIZABLE?" Tingkat ini mengurangi konkurensi dan dapat memaksa transaksi dicoba ulang saat terjadi kegagalan serialisasi.
  • "Apakah tingkat yang lebih tinggi lebih mahal?" Ya, dalam bentuk biaya penguncian atau beban pembatalan dan percobaan ulang.

Menjawabnya secara langsung membuktikan bahwa jenjang ini benar-benar dipahami, bukan sekadar dihafalkan.

Uji Cepat

Salah satu fakta tentang tingkat bawaan berikut adalah yang paling sering diujikan.

Ringkasan: Empat Tingkat, Satu Kompromi

Empat tingkat isolasi membentuk jenjang dari yang paling lemah hingga paling kuat: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Setiap kenaikan tingkat melarang satu anomali tambahan (kotor, tidak berulang, hantu) dengan mengorbankan konkurensi.

Ingat tingkat bawaannya (READ COMMITTED di semua tempat kecuali REPEATABLE READ milik MySQL), dan perhatikan bahwa mesin nyata sering mencegah lebih banyak hal daripada yang diwajibkan standar. Berikutnya, kita menelaah tiga anomali pembacaan yang dirancang untuk dicegah oleh tingkat-tingkat ini.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Empat Tingkat Isolasi” gratis?

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

Apa yang akan aku pelajari di “Empat Tingkat Isolasi”?

Dari Read Uncommitted hingga Serializable dan hal yang diizinkan oleh masing-masing tingkat. Kamu berlatih SQL Interview Prep 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 Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep 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 “Empat Tingkat Isolasi” 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 Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep 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. Menjelaskan Properti ACID
  2. Empat Tingkat Isolasi
  3. Pembacaan Kotor, Tidak Berulang, dan Hantu
  4. Deadlock, Penguncian, dan MVCC
← Kembali ke SQL Interview Prep