Transaksi dan mekanisme pengendaliannya

Transaksi

Transaksi adalah rangkaian operasi pada data yang memiliki awal dan akhir.

Transaksi adalah eksekusi berurutan dari operasi baca dan tulis. Akhir dari suatu transaksi dapat berupa menyimpan perubahan (commit) atau membatalkan perubahan (rollback). Sehubungan dengan database, suatu transaksi terdiri dari beberapa permintaan yang diperlakukan sebagai satu permintaan.

Transaksi harus memenuhi properti ACID

atomisitas. Transaksi selesai sepenuhnya atau tidak selesai sama sekali.

Konsistensi. Saat menyelesaikan transaksi, batasan yang dikenakan pada data (misalnya batasan dalam database) tidak boleh dilanggar. Konsistensi menyiratkan bahwa sistem akan dipindahkan dari satu keadaan benar ke keadaan benar lainnya.

Isolasi. Transaksi yang berjalan secara paralel tidak boleh saling mempengaruhi, misalnya mengubah data yang digunakan oleh transaksi lain. Hasil eksekusi transaksi paralel harus sama seperti jika transaksi dieksekusi secara berurutan.

Keberlanjutan. Setelah dilakukan, perubahan tidak boleh hilang.

Catatan transaksi

Log menyimpan perubahan yang dilakukan oleh transaksi, memastikan atomisitas dan stabilitas data jika terjadi kegagalan sistem

Log berisi nilai-nilai yang dimiliki data sebelum dan sesudah diubah oleh transaksi. Strategi log write-ahead memerlukan penambahan entri log tentang nilai sebelumnya sebelum memulai, dan tentang nilai akhir setelah transaksi selesai. Jika sistem berhenti tiba-tiba, database membaca log dalam urutan terbalik dan membatalkan perubahan yang dilakukan oleh transaksi. Setelah mengalami transaksi yang terputus, database mengeksekusinya dan membuat perubahan pada log. Berada dalam keadaan pada saat kegagalan, database membaca log dalam urutan maju dan mengembalikan perubahan yang dilakukan oleh transaksi. Dengan cara ini, stabilitas transaksi yang telah dilakukan dan atomisitas transaksi yang terputus tetap terjaga.

Mengeksekusi ulang transaksi yang gagal saja tidak cukup untuk pemulihan.

Contoh. Pengguna memiliki $500 di akunnya dan pengguna memutuskan untuk menariknya dari ATM. Dua transaksi sedang berlangsung. Yang pertama membaca nilai saldo dan jika ada cukup dana di saldo, ia akan mengeluarkan uang kepada pengguna. Yang kedua mengurangi jumlah yang diperlukan dari saldo. Katakanlah sistem mogok dan operasi pertama gagal, tetapi operasi kedua gagal. Dalam hal ini, kami tidak dapat mengeluarkan kembali uang kepada pengguna tanpa mengembalikan sistem ke keadaan semula dengan saldo positif.

Tingkat isolasi

Baca Berkomitmen

Masalah Dirty Read adalah suatu transaksi dapat membaca hasil antara dari transaksi lain.

Contoh. Nilai saldo awal adalah $0. T1 menambahkan $50 ke saldo Anda. T2 membaca nilai saldo ($50). T1 membuang perubahan dan keluar. T2 melanjutkan eksekusi dengan data saldo yang salah.

Solusinya adalah dengan membaca data tetap (Read Commited), yang melarang pembacaan data yang diubah oleh transaksi. Jika transaksi A telah mengubah sekumpulan data tertentu, maka transaksi B, ketika mengakses data tersebut, terpaksa menunggu hingga transaksi A selesai.

Bacaan yang Dapat Diulang

Masalah Pembaruan Hilang. T1 menyimpan perubahan di atas perubahan T2.

Contoh. Nilai saldo awal adalah $0 dan dua transaksi secara bersamaan mengisi saldo. T1 dan T2 membaca saldo $0. T2 kemudian menambahkan $200 ke $0 dan menyimpan hasilnya. T1 menambahkan $100 ke $0 dan menyimpan hasilnya. Hasil akhirnya adalah $100, bukan $300.

Masalah pembacaan yang tidak dapat diulang. Membaca data yang sama berulang kali akan menghasilkan nilai yang berbeda.

Contoh. T1 membaca nilai saldo $0. T2 kemudian menambahkan $50 ke saldo dan berakhir. T1 membaca kembali data tersebut dan menemukan ketidaksesuaian dengan hasil sebelumnya.

Bacaan Berulang memastikan bahwa pembacaan kedua akan memberikan hasil yang sama. Data yang dibaca oleh satu transaksi tidak dapat diubah di transaksi lain sampai transaksi selesai. Jika transaksi A telah membaca sekumpulan data tertentu, maka transaksi B ketika mengakses data tersebut terpaksa menunggu hingga transaksi A selesai.

Bacaan yang dipesan (Dapat Diserialkan)

Masalah Pembacaan Phantom. Dua kueri yang memilih data berdasarkan kondisi tertentu mengembalikan nilai berbeda.

Contoh. T1 meminta jumlah semua pengguna yang saldonya lebih besar dari $0 tetapi kurang dari $100. T2 memotong $1 dari pengguna dengan saldo $101. T1 menerbitkan kembali permintaan tersebut.

Bacaan yang dipesan (Dapat Diserialkan). Transaksi dieksekusi sepenuhnya berurutan. Dilarang memperbarui atau menambah catatan yang termasuk dalam ketentuan permintaan. Jika transaksi A telah meminta data dari seluruh tabel, maka seluruh tabel dibekukan untuk transaksi lainnya hingga transaksi A selesai.

Penjadwal

Menetapkan urutan operasi yang harus dilakukan selama transaksi paralel.

Memberikan tingkat isolasi tertentu. Jika hasil operasi tidak bergantung pada ordonya, maka operasi tersebut bersifat komutatif (Permutable). Operasi membaca dan operasi pada data yang berbeda bersifat komutatif. Operasi baca-tulis dan tulis-tulis tidak bersifat komutatif. Tugas penjadwal adalah menyisipkan operasi yang dilakukan oleh transaksi paralel sehingga hasil eksekusi setara dengan eksekusi transaksi berurutan.

Mekanisme pengendalian pekerjaan paralel (Concurrency Control)

Optimis didasarkan pada deteksi dan penyelesaian konflik, pesimis didasarkan pada pencegahan timbulnya konflik.

Dalam pendekatan optimis, banyak pengguna memiliki salinan data yang mereka miliki. Orang pertama yang menyelesaikan pengeditan menyimpan perubahan, sementara orang lain harus menggabungkan perubahan. Algoritma optimis memungkinkan terjadinya konflik, namun sistem harus pulih dari konflik tersebut.

Dengan pendekatan pesimis, pengguna pertama yang mengambil data mencegah orang lain menerima data tersebut. Jika konflik jarang terjadi, sebaiknya pilih strategi optimis, karena strategi ini memberikan tingkat konkurensi yang lebih tinggi.

Mengunci

Jika suatu transaksi memiliki data yang terkunci, maka transaksi lainnya harus menunggu hingga data tersebut terbuka kuncinya saat mengakses data tersebut.

Sebuah blok dapat di-overlay pada database, tabel, baris, atau atribut. Kunci Bersama dapat diterapkan pada data yang sama dengan beberapa transaksi, mengizinkan semua transaksi (termasuk yang memberlakukannya) untuk dibaca, melarang modifikasi dan penangkapan eksklusif. Penguncian Eksklusif hanya dapat diterapkan pada satu transaksi, mengizinkan tindakan apa pun dari transaksi yang dikenakan, melarang tindakan apa pun oleh orang lain.

Kebuntuan adalah situasi di mana transaksi berakhir dalam keadaan tertunda yang berlangsung tanpa batas waktu.

Contoh. Transaksi pertama menunggu data yang diambil oleh transaksi kedua dirilis, sedangkan transaksi kedua menunggu data yang diambil oleh transaksi pertama dirilis.

Solusi optimis terhadap masalah kebuntuan memungkinkan terjadinya kebuntuan, namun kemudian memulihkan sistem dengan memutar kembali salah satu transaksi yang terlibat dalam kebuntuan tersebut.

Kebuntuan dicari pada interval tertentu. Salah satu cara pendeteksiannya adalah berdasarkan waktu, yaitu menganggap telah terjadi kebuntuan jika transaksi memakan waktu terlalu lama untuk diselesaikan. Ketika kebuntuan ditemukan, salah satu transaksi dibatalkan, sehingga transaksi lain yang terlibat dalam kebuntuan tersebut dapat diselesaikan. Pemilihan korban dapat didasarkan pada nilai transaksi atau senioritasnya (skema Wait-Die dan Wound-wait).

Setiap transaksi T stempel waktu ditetapkan TS berisi waktu mulainya transaksi.

Tunggu-Mati.

Jika TS(Ti) < TS(Tj), Kemudian Ti tunggu, sebaliknya Ti memutar kembali dan memulai lagi dengan stempel waktu yang sama.

Jika transaksi baru telah memperoleh sumber daya dan transaksi lama meminta sumber daya yang sama, maka transaksi lama diperbolehkan menunggu. Jika transaksi lama telah memperoleh sumber daya, maka transaksi muda yang meminta sumber daya tersebut akan dibatalkan.

Luka-tunggu.

Jika TS(Ti) < TS(Tj), Kemudian Tj memutar kembali dan memulai lagi dengan stempel waktu yang sama, jika tidak Ti menunggu.

Jika transaksi yang lebih muda telah memperoleh sumber daya dan transaksi yang lebih lama meminta sumber daya yang sama, maka transaksi yang lebih muda akan dibatalkan. Jika transaksi lama telah memperoleh sumber daya, maka transaksi muda yang meminta sumber daya tersebut diperbolehkan menunggu. Pemilihan korban berdasarkan prioritas mencegah kebuntuan, namun mengembalikan transaksi yang tidak menemui kebuntuan. Soalnya transaksi bisa di rollback berkali-kali karena... transaksi yang lebih lama mungkin menyimpan sumber daya untuk waktu yang lama.

Solusi pesimistis terhadap masalah kebuntuan tidak memungkinkan transaksi untuk mulai dieksekusi jika terdapat risiko kebuntuan.

Untuk mendeteksi kebuntuan, dibuat suatu graf (grafik tunggu, grafik tunggu), yang simpul-simpulnya adalah transaksi, dan ujung-ujungnya diarahkan dari transaksi yang menunggu rilis data ke transaksi yang telah menangkap data tersebut. Kebuntuan dianggap terjadi jika grafik mempunyai loop. Membuat grafik tunggu, terutama pada database terdistribusi, merupakan prosedur yang mahal.

Penguncian dua fase - mencegah kebuntuan dengan menyita semua sumber daya yang digunakan oleh suatu transaksi di awal transaksi dan melepaskannya di akhir

Semua operasi pemblokiran harus mendahului operasi pembukaan kunci pertama. Ini memiliki dua fase - Fase Pertumbuhan, di mana genggaman terakumulasi, dan Fase Penyusutan, di mana genggaman dilepaskan. Jika tidak mungkin untuk menangkap salah satu sumber daya, transaksi akan dimulai kembali. Ada kemungkinan bahwa suatu transaksi tidak akan dapat memperoleh sumber daya yang dibutuhkan, misalnya jika beberapa transaksi bersaing untuk mendapatkan sumber daya yang sama.

Komitmen dua fase memastikan bahwa komit dijalankan pada semua replika database

Setiap database memasukkan informasi tentang data yang akan diubah ke dalam log dan memberikan respon kepada koordinator OK (Tahap Voting). Setelah semua orang menjawab OK, koordinator mengirimkan sinyal yang mewajibkan semua orang untuk berkomitmen. Setelah melakukan, server merespons OK; jika setidaknya ada satu yang tidak merespons OK, maka koordinator mengirimkan sinyal untuk membatalkan perubahan ke semua server (Tahap Penyelesaian).

Metode stempel waktu

Transaksi yang lebih lama dibatalkan ketika mencoba mengakses data yang terlibat dalam transaksi yang lebih muda

Setiap transaksi diberi stempel waktu TS sesuai dengan waktu mulai eksekusi. Jika Ti lebih tua Tj, Kemudian TS(Ti) < TS(Tj).

Saat suatu transaksi dibatalkan, transaksi tersebut diberi stempel waktu baru. Setiap objek data Q terlibat dalam transaksi ditandai dengan dua label. WTS(Q) β€” stempel waktu transaksi termuda yang berhasil menyelesaikan rekor Q. R-TS(Q) β€” stempel waktu transaksi termuda yang melakukan pembacaan catatan Q.

Saat transaksi T permintaan untuk membaca data Q dua pilihan yang mungkin.

Jika TS(T) < WTS(Q), yaitu data diperbarui oleh transaksi yang lebih muda, kemudian transaksi tersebut T berguling kembali.

Jika TS(T) >= WTS(Q), kemudian dilakukan pembacaan dan R-TS(Q) menjadi MAKS(R-TS(Q), TS(T)).

Saat transaksi T meminta perubahan data Q dua pilihan yang mungkin.

Jika TS(T) < R-TS(Q)Artinya, data telah dibaca oleh transaksi yang lebih muda dan jika dilakukan perubahan maka akan timbul konflik. Transaksi T berguling kembali.

Jika TS(T) < WTS(Q), yaitu transaksi mencoba menimpa nilai yang lebih baru, transaksi T dibatalkan. Dalam kasus lain, perubahan dilakukan dan WTS(Q) menjadi setara TS(T).

Tidak diperlukan konstruksi grafik tunggu yang mahal. Transaksi lama bergantung pada transaksi baru, sehingga tidak ada siklus dalam grafik tunggu. Tidak ada deadlock karena transaksi tidak ditunggu melainkan langsung di-rollback. Rollback berjenjang dimungkinkan. Jika Ti terguling, dan Tj Saya membaca data yang saya ubah Ti, Kemudian Tj juga harus memutar kembali. Jika pada saat yang sama Tj telah dilakukan, maka akan terjadi pelanggaran terhadap prinsip stabilitas.

Salah satu solusi untuk cascading rollback. Suatu transaksi menyelesaikan semua operasi penulisan di akhir, dan transaksi lainnya harus menunggu hingga operasi tersebut selesai. Transaksi menunggu untuk dilakukan sebelum dibaca.

Aturan penulisan Thomas - variasi metode stempel waktu di mana data yang diperbarui oleh transaksi yang lebih muda dilarang ditimpa oleh transaksi yang lebih lama

Transaksi T meminta perubahan data Q. Jika TS(T) < WTS(Q), yaitu transaksi mencoba menimpa nilai yang lebih baru, transaksi T tidak dibatalkan seperti pada metode stempel waktu.

Sumber: www.habr.com

Tambah komentar