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 UPDATEKelebihan 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, retryOptimistis 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 messageKunci 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 secondsRingkasan
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
- Properti ACID dan Anomali
- Tingkat Isolasi: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
- Deadlock: Deteksi dan Pencegahan
- Penguncian Optimistis vs Pesimistis