Lock dalam Database
Lock dalam database merujuk pada praktik mengamankan tabel atau baris tertentu dalam database untuk mencegah gangguan dari transaksi lainnya. Ketika tabel atau baris tertentu dikunci, transaksi lain tidak dapat merujuk atau memperbarui data tersebut. Mekanisme ini penting dalam mengelola transaksi database secara konkuren dan menjaga integritas data, memastikan bahwa data yang sama tidak dimodifikasi oleh beberapa transaksi secara bersamaan.
Jenis-jenis Lock
Lock Bersama
Lock bersama adalah jenis lock database yang memungkinkan konkurensi dalam pembacaan data sambil memastikan integritas data. Setelah lock bersama diterapkan pada tabel atau baris, transaksi lain masih dapat membaca (merujuk) data tersebut, tetapi tidak dapat memodifikasi (memperbarui) data tersebut. Mekanisme ini memastikan bahwa saat data sedang dibaca, keadaannya tetap konsisten dan tidak terpengaruh oleh transaksi lain.
Aksesibilitas Multitransaksi
Fitur khas dari lock bersama adalah kemampuannya untuk diperoleh oleh beberapa transaksi secara bersamaan. Kemampuan ini memungkinkan konkurensi yang lebih tinggi dengan memungkinkan beberapa transaksi membaca data yang sama pada saat yang bersamaan, tanpa risiko inkonsistensi data akibat pembaruan konkuren.
Lock Eksklusif
Lock eksklusif mewakili tingkat perlindungan data yang lebih tinggi dalam lingkungan transaksional. Ketika lock eksklusif diterapkan pada tabel atau baris, semua transaksi lainnya dibatasi dari pembacaan (penyebutan) dan penulisan (pembaruan) data yang dikunci. Lock eksklusif memastikan bahwa transaksi yang memegang lock memiliki akses eksklusif ke data selama lock berlangsung, sehingga mencegah konflik atau inkonsistensi potensial.
Penguncian Otomatis dengan Operasi Update, Delete, dan Insert
Pada banyak sistem manajemen database, operasi tertentu seperti pembaruan, penghapusan, atau penyisipan data secara otomatis menerapkan lock eksklusif pada tabel atau baris yang terkena dampak. Penerapan otomatis lock eksklusif ini memastikan bahwa data yang dimodifikasi tetap dalam keadaan konsisten selama operasi, memberikan hasil yang dapat diandalkan dan dapat diprediksi.
Tingkat Lock
Penguncian pada Tingkat Baris
Penguncian pada tingkat baris adalah strategi di mana baris individu dalam tabel database dikunci, memungkinkan kontrol terperinci atas akses database. Pada dasarnya, ini menyediakan mekanisme untuk mengamankan entri tertentu dalam tabel, sambil tetap membuka entri lain untuk dibaca atau ditulis oleh transaksi lain. Tingkat granularitas ini berarti bahwa meskipun suatu baris dikunci, operasi masih dapat dilakukan pada baris lain dalam tabel yang sama. Keuntungan utama dari penguncian pada tingkat baris adalah mengurangi kemungkinan persaingan antara transaksi, memungkinkan tingkat operasi database yang konkuren yang lebih tinggi.
Penguncian pada Tingkat Tabel
Penguncian pada tingkat tabel, seperti namanya, melibatkan penguncian seluruh tabel dalam database. Selama jenis penguncian ini, tidak ada transaksi yang dapat mengakses tabel yang terkunci untuk operasi membaca atau menulis. Manfaat utama dari penguncian pada tingkat tabel adalah kesederhanaan dan overhead yang lebih rendah, karena sistem hanya perlu melacak satu lock untuk seluruh tabel, bukan beberapa lock untuk baris individu. Namun, jenis penguncian ini juga meningkatkan kemungkinan persaingan, terutama dalam sistem multi-pengguna, karena seluruh tabel menjadi tidak dapat diakses selama penguncian. Jenis penguncian ini biasanya berguna ketika jumlah data yang besar dalam sebuah tabel perlu diperbarui atau dibaca sekaligus.
Penguncian dan Transaksi
Penguncian transaksi adalah komponen penting dalam memastikan konsistensi dan kehandalan operasi database. Ketika transaksi dimulai dan menjalankan operasi seperti pembaruan, penghapusan, atau penambahan, tabel atau catatan yang terlibat dikunci. Lock tetap berlaku sampai transaksi selesai, baik melalui commit atau rollback.
Penerapan lock selama transaksi memastikan bahwa transaksi lain tidak mengganggu data yang sedang dimanipulasi, menjaga sifat atomisitas dan isolasi transaksi. Ini berarti bahwa setiap transaksi diperlakukan sebagai unit kerja tunggal yang tidak terpisahkan, dan operasinya terisolasi dari semua transaksi lainnya.
Dampak pada Akses Tabel dan Catatan
Lock yang diterapkan selama transaksi dapat memiliki efek signifikan pada aksesibilitas tabel atau catatan. Selama lock berlaku, data yang terkunci tidak dapat diakses untuk ditulis oleh transaksi lain, dan dalam kasus lock eksklusif, juga tidak dapat diakses untuk dibaca.
Mekanisme penguncian transaksional ini dapat menyebabkan berhenti sementara pada aksesibilitas data tertentu, mencegah transaksi lain untuk menjalankan operasi yang konflik. Namun, ini adalah proses yang diperlukan untuk memastikan integritas dan konsistensi data dalam database. Sistem harus menyeimbangkan antara mempertahankan konsistensi ini dan mengoptimalkan kinerja, mencegah penguncian yang berlangsung lama jika memungkinkan untuk meminimalkan dampak pada akses dan penggunaan.
Deadlocks
Deadlock dalam database adalah keadaan di mana dua atau lebih sesi mengunci resource masing-masing dan tidak dapat melanjutkan karena masing-masing menunggu pembebasan lock oleh yang lain. Hal ini dapat menyebabkan sistem terhenti, menyebabkan penundaan dalam pemrosesan transaksi.
Skenario dan Konsekuensi Deadlock
Misalkan ada suatu skenario di mana Sesi A telah mengunci Tabel 1 dan membutuhkan akses ke Tabel 2, yang dikunci oleh Sesi B. Sementara itu, Sesi B, sambil masih memegang lock pada Tabel 2, juga membutuhkan akses ke Tabel 1. Ketergantungan melingkar ini di mana setiap sesi menunggu pembebasan lock oleh yang lain menghasilkan deadlock. Dalam situasi seperti itu, diperlukan strategi penyelesaian deadlock, biasanya dengan DBMS secara otomatis mendeteksi dan menyelesaikan deadlock, seringkali dengan menggugurkan salah satu transaksi.