Manajemen Transaksi
Defenisi transaksi :
Menurut Gray => “ dalam membuat sebuah perjanjian, dua atau beberapa anggota bernegosiasi dan membuat sebuah persetujuan. Persetujuan ini ditandai dengan menandatangani sebuah dokumen atau tindakan lain ( seperti jabat tangan atau anggukan)
Sebaiknya anggota-anggota tidak curiga atau sama lain, untuk lebih amannya mereka menunjuk penengah (notaris) untuk mengkordanisasikan keputusan transksi “ (Gray, 1981).
Transaksi Manajemen di MySQL
Setiap klien MySQL yang melakukan koneksi ke MySQL server menggunakan mode AUTOCOMMIT, yang berarti setiap perintah SQL dengan sendirinya akan mengalami proses COMMIT, COMMIT sendiri berarti “ menyetujui perintah untuk segera dimutakhirkan ke database”.
Untuk mematikan mode AUTOCOMMIT, MySQL menyediakan perintah SET AUTOCOMMIT=0. Pda keadaan seprti ini, suatu perintah perubahan data pada database dapat disetujui untuk segera disimpan secara menetap dengan menggunakan perintah COMMIT atau dibatalkan dengan menggunakan perintah ROLLBACK.
Untuk menandai sebuah transaksi dan tanpa memperhatikan mode AUTOCOMMIT, MySQL menyediakan pernyataan bernama BEGIN atau START TRANSACTION. Transaksi ini akan berakhir setelah pernyataan COMMIT atau ROLLBACK dieksekusi.
Deadlock
Deadlock adalah suatu keadaan yang membuat dua buah transaksi saling menunggu baris-baris yang terkunci, (Ozsu and Valdurez, 1999).
Sebagai gambaran, terdapat dua buah transaksi dalam waktu yang hampir bersamaan seperti berikut ;
Distributor A memesan semen 100000 zak ke Distributor B. Distributor B mengirim semen 50000 zak ke Distributor A. Keadaan deadlock terjadi sebagaimana yang digambarkan pada gambar 3.8 , karena adanya perintah UPDATE dengan sendirinya mengunci baris-baris yang dimutakhirkan.
Transaksi #1
|
Transaksi #2
|
UPDATE distributir SET stok = stok, 100000 Where no_distributor =‘A’;
[akibatnya baris untuk no_distributor ‘A’ terkunci]
UPDATE distributor SET stok = stok, +100000 Where no_distributor =‘B’;
[menunggu karena baris untuk no_distributor ‘B’ terkunci]
|
UPDATE distributir SET stok = stok, 50000 Where no_distributor =‘B’;
[akibatnya baris untuk no_distributor ‘B’ terkunci]
UPDATE distributor SET stok = stok + 50000 Where no_distributor =‘A’;
[menunggu karena baris untuk no_distributor ‘A’ terkunci]
|
InnoDB mampu mengenali deadlock seperti itu. Sebagai solusinya, InnoDB akan membatalkan salah satu transaksi. Dalam hal ini, transaksi yang dibatakan adalah yang ukuranya terkecil. Ukurran yang dimaksud adalah jumlah baris yang dilibatkan dalam DELETE, UPDATE dan INSERT.
Ada beberapa metode yang digunakan untukmenfatasi deadlock yaitu:
1. Deadlock Prevention.
Metode deadlock prevention memberikan jaminan bahwa deadlock tidak terjadi pada tepat pertama. Selanjutnya Transaction manager (TM) memeriksa sebuah transaskis yang pertama kali diiisialisasi dan tidak mengijinkan untuk proses karena akan menyebabkan deadlock. Untuk mengecek hal tersebut maka semua item data yang akan diakses oleh sebuah transaski akan disiapkan. Transaksi manager akan mengijinkan sebuah transaksi diporses jika semua data yang akan diproses tesedia. Kemungkinan lain trasaksi tidak akan diproses. transactionManager menyiapakan semua data yang disipakan untuk sebuah transasksi dan mengijikan untuk di proses.
2. Deadlock Avoidance
Skema deadlock avoidance menggunakan teknik Concurrency control. Teknik ini tidak akan pernahh mengahsilkan deadlock atau mendeteksi kemungkinan terjadinya keadaan deadlock dimasa yang akan datang dan hal itu tidak akan terjadi.
3. Deadlock detection and resplution
Detecksi dilaksanakan dengan mmepelajari formasi siklus menggunakan GWFG.WFG (Wait-for graph) adalah gambar yang digunakan untku menggambarkan secara langsung hubungan diantara transaksi-transaksi yan saling menunggu. Titik gambar dari gambar ini menggambarkan transaksi-transaksi yang bersamaan dalam sistem. Formasi dari WFG akan semakin kompleks dalam keadaan deadlock yang berjalan dalam site yang berbeda. Oleh karena itu maka dibutuhkan sebuah bentuk GWFG (global wait-for deadlock) untuk mengatasi sebuah globa deadlock.
Resolusi dari deadlock biasanya dilakukan dengan menyeleksi satu atau beberapa siklus di dalam
GWFG.