Gambaran
Transaksi ada di mana-mana dalam sistem perusahaan saat ini dan dapat memberikan integritas data bahkan dalam lingkungan yang sangat serentak. Transaksi adalah kumpulan yang hanya berisi semua operasi baca / tulis yang berhasil. Seperti yang ditunjukkan di bawah ini:
ASAM
Transaksi pada dasarnya memiliki empat karakteristik ASAM:
Atomicity
Tugas atom adalah unit operasi independen, operasi kesatuan atom yang terdiri dari semua atau tidak sama sekali.
konsistensi
Sebuah transaksi dapat merangkum perubahan status (kecuali itu adalah hanya-baca). Transaksi harus selalu menjaga sistem dalam keadaan yang konsisten, tidak peduli berapa banyak transaksi bersamaan pada waktu tertentu.
Konsistensi memiliki ciri-ciri sebagai berikut:
- Jika operasi memicu operasi tambahan (kaskade, pemicu), ini juga harus berhasil, jika tidak, transaksi gagal.
- Jika sistem terdiri dari beberapa node, konsistensi menetapkan bahwa semua perubahan harus disebarkan ke semua node (replikasi multi-master). Jika node slave diperbarui secara asinkron, maka kita melanggar aturan konsistensi dan sistem menjadi "konsistensi akhir".
- Transaksi adalah sakelar status data, oleh karena itu, jika ada beberapa transaksi secara bersamaan, sistem juga harus beroperasi sebagai transaksi serial.
Pada kenyataannya, ketika sistem transaksi menghadapi permintaan bersamaan, serialisasi ini mahal. Hukum Amdahl dijelaskan sebagai berikut: Ini menggambarkan hubungan antara eksekusi serial dan konkurensi urutan.
"Kecepatan program dapat meningkat dengan menggunakan beberapa prosesor dalam komputasi paralel ditentukan oleh waktu eksekusi serial program."
Sebagian besar sistem manajemen database memilih (secara default) untuk melonggarkan konsistensi untuk mencapai konkurensi yang lebih baik.
Isolasi
Transaksi adalah mekanisme kontrol konkurensi, dan juga dapat memberikan konsistensi saat disisipkan. Isolasi memungkinkan kita untuk menyembunyikan perubahan status yang tidak terikat dari dunia luar. Transaksi yang gagal seharusnya tidak merusak status sistem. Isolasi dicapai dengan menggunakan mekanisme penguncian pesimis atau optimis.
Daya tahan
Transaksi yang berhasil akan mengubah status sistem secara permanen, jadi sebelum berakhir, semua perubahan yang mengarah ke status tersebut dicatat dalam log transaksi yang persisten. Jika sistem kami tiba-tiba mengalami kerusakan sistem atau listrik mati, semua transaksi yang belum selesai dan dilakukan dapat terulang kembali.
Meskipun beberapa sistem database menyediakan MVCC kontrol konkurensi multi-versi, kontrol konkurensi mereka dilakukan melalui penguncian. Oleh karena itu, penguncian meningkatkan serialisasi eksekusi dan memengaruhi konkurensi.
Tingkat isolasi
Standar SQL menentukan empat tingkat isolasi:
- READ_UNCOMMITTED
- READ_COMMITTED
- REPETABLE_READ
- SERIALISASI
Bacaan kotor
Pembacaan kotor terjadi ketika: ketika suatu transaksi diperbolehkan untuk membaca keadaan yang telah diubah oleh transaksi lain tetapi tidak dilakukan, hal ini karena tidak ada kunci untuk mencegah pembacaan.Seperti yang ditunjukkan pada gambar di atas, Anda dapat melihat bahwa transaksi kedua membaca tidak konsisten Nilai, inkonsistensi berarti nilai ini tidak valid, karena transaksi pertama yang mengubah nilai ini telah dibatalkan, yaitu, transaksi pertama mengubah nilai ini, tetapi tidak dilakukan dan dikonfirmasi oleh transaksi kedua Baca, transaksi pertama menghentikan modifikasi lagi, menyesali permainan, dan transaksi kedua mendapat data kotor.
Pembacaan tidak berulang
Membaca data yang sama berulang kali dapat memperoleh hasil yang berbeda, hal ini karena data dimodifikasi selama proses pembacaan berulang, yang mengarahkan kita untuk menggunakan data usang, yang dapat dihindari dengan kunci baca bersama. Inilah alasan mengapa tingkat isolasi READ_COMMITTED akan menyebabkan pembacaan berulang. Menyetel kunci baca bersama berarti tingkat isolasi ditingkatkan menjadi REPETABLE_READ.
Phantom membaca
Ketika transaksi kedua memasukkan deretan record, dan transaksi pertama tepat sebelum menanyakan data yang seharusnya berisi record baru ini, maka hasil transaksi query ini tidak boleh berisi data yang baru dimasukkan. Pada saat ini, pembacaan bayangan terjadi. Hindari melalui ganti kunci dan penguncian predikat.
Ringkasan: READ_COMMITED adalah pilihan yang lebih tepat, karena SERIALIZABLE dapat menghindari data basi ketika terjadi transaksi yang berbeda, yaitu untuk menghindari hilangnya data yang baru dimodifikasi, tetapi kinerjanya paling rendah karena merupakan serial yang dimaksimalkan.
Lebih banyak pengembang dan konten DBA akan dibagikan nanti, teman yang tertarik dapat mengikutinya!