0Pricing
SQL Academy · Pelajaran

Penguncian Optimistis vs Pesimistis

Bandingkan SELECT ... FOR UPDATE (pesimistis) dan pola version-column / WHERE updated_at = ? (optimistis)

Penguncian Optimistis vs Pesimistis adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Dua Strategi Konkurensi

  • Pesimistis — kunci baris saat membacanya; tidak ada pihak lain yang dapat mengubahnya
  • Optimistis — jangan mengunci; saat memperbarui, verifikasi bahwa baris belum berubah

Pesimistis: SELECT ... FOR UPDATE

Kunci sekarang, tulis nanti:

BEGIN;
SELECT balance FROM accounts WHERE id = 1 FOR UPDATE;
-- other transactions cannot lock or update this row
-- compute new balance...
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;

FOR SHARE

Kunci baca — pihak lain dapat membaca tetapi tidak dapat menulis:

SELECT * FROM orders WHERE id = 1 FOR SHARE;
-- others can SELECT FOR SHARE but cannot UPDATE

Kelebihan dan Kekurangan Pesimistis

Kelebihan: mudah dipahami, tidak memerlukan percobaan ulang.
Kekurangan: mengurangi konkurensi, dapat menyebabkan penungguan kunci dan kebuntuan.

Optimistis: Kolom Versi

Baca dengan versi, tulis dengan WHERE version = expected:

BEGIN;
SELECT id, balance, version FROM accounts WHERE id = 1;
-- compute new balance...
UPDATE accounts
   SET balance = ?, version = version + 1
WHERE id = 1 AND version = ?;
-- check rows affected: 0 means someone else updated, retry

Optimistis dengan updated_at

Gagasan yang sama, menggunakan updated_at sebagai pengganti kolom versi eksplisit:

UPDATE accounts
   SET balance = ?, updated_at = NOW()
WHERE id = ? AND updated_at = ?;

-- If updated_at has changed in the meantime, 0 rows affected — retry.

Kelebihan dan Kekurangan Optimistis

Kelebihan: konkurensi tinggi, tanpa penungguan.
Kekurangan: penulisan dapat gagal dan memerlukan logika percobaan ulang; konflik baru terlihat saat UPDATE dijalankan.

Kapan Memilih Pesimistis

Untuk:

  • Transaksi singkat dengan persaingan tinggi pada baris sibuk
  • Transfer uang — Anda tidak menginginkan pekerjaan yang hanya selesai sebagian
  • Operasi yang berjalan lama dan kemungkinan konfliknya tinggi

Kapan Memilih Optimistis

Untuk:

  • Beban kerja yang sebagian besar membaca dengan konflik yang jarang
  • API tanpa status, ketika klien menyimpan baris di antara permintaan
  • Pengeditan melalui perangkat seluler atau saat luring, yang kemudian disinkronkan

Hibrida: FOR UPDATE NOWAIT

Coba kunci; jika sudah terkunci, segera gagal dan biarkan pengguna mencoba lagi:

SELECT * FROM accounts WHERE id = 1 FOR UPDATE NOWAIT;
-- ERROR if someone else holds it — user sees a friendly retry message

Kunci Advisory

Kunci tingkat aplikasi yang tidak terikat pada baris mana pun:

SELECT pg_try_advisory_xact_lock(hashtext('order:42'));
-- True if you got the lock, false otherwise — useful for cross-row coordination.

Jangan Lupa Mengindeks Target Kunci

FOR UPDATE tanpa indeks pada kolom WHERE mungkin mengunci lebih banyak baris daripada yang diharapkan (mengunci baris yang dipindai, bukan hanya baris yang cocok).

Batas Waktu Kunci

Atur lock_timeout agar tidak menunggu selamanya:

SET lock_timeout = '5s';
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
-- ERROR if lock not acquired in 5 seconds

Ringkasan

Strategi pesimistis mengunci baris; strategi optimistis memeriksa saat penulisan.

  • Pesimistis: FOR UPDATE — sederhana tetapi mengurangi konkurensi
  • Optimistis: kolom versi — lebih banyak konkurensi, memerlukan percobaan ulang
  • Pilih sesuai beban kerja; gabungkan jika diperlukan

Pemeriksaan Singkat

Pengurangan stok dalam perdagangan elektronik sangat banyak diperebutkan. Strategi penguncian mana yang umumnya lebih aman?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penguncian Optimistis vs Pesimistis” gratis?

Ya — teks lengkap “Penguncian Optimistis vs Pesimistis” 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 “Penguncian Optimistis vs Pesimistis”?

Bandingkan SELECT ... FOR UPDATE (pesimistis) dan pola version-column / WHERE updated_at = ? (optimistis) 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 4 dari 4.

Berapa lama pelajaran “Penguncian Optimistis vs Pesimistis” 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