Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQL
1. KOMPARASI LOCKING MECHANISM DAN DEADLOCK
PADA MYSQL DAN ORACLE
Kelompok 10
Anggota Kelompok :
Bambang Hermanto (13523106)
Husen Abdurahman (13523162)
Nurcholis Ainul RT (13523175)
Narendra Pinandhita (13523263)
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS ISLAM INDONESIA
2017
2. Penjelasan Singkat
1. Locking Mechanism
Locking Mechanism (Mekanisme Penguncian) di disain untuk menyediakan derajat
konkurensi yang tinggi yang terjadi pada database. Suatu transaksi yang memodifikasi data
memperoleh row-level locks daripada table-level locks. Proses query pada suatu data tidak
membutuhkan mekanisme lock terhadap data yang di query, sebuah query tetap berhasil
dieksekusi pada suatu data atu tabel walaupun ada user yang member lock pada stuatu data
atau tabel.
Pada saat multiple transaksi membutuhkan suatu lock pada resource yang sama, transaksi
yang pertama meminta lock pada suatu resource tersebut. Transaksi yang lainnya berada
pada fase menunggu di antrian sampai transaksi yang pertama telah selesai mengeksekusi
resource. Mekanisme antrian ini bersifat otomatis dan tidak membutuhkan interaksi dari
suatu administrator atau user yang lain
Semua lock di lepas pada saat transaksi berakhir. Transaksi dikatakan selesai / complete
apabila perintah commit atau rollback dilaksanakan. Pada kasus transaksi yang failed,
baground proses secara otomatis melakukan rollback kegagalan yang terjadi dengan
merubah transaksi yang gagal tersebut menjadi ke posisi save point atau sebelum proses
transaksi gagal.
2. Deadlock
Deadlock adalah situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama
lain menunggu Lock dilepas sebelum di mulai (Yudi Wibisono).
Dalam lingkungan multi programming, beberapa proses mungkin akan bersaing untuk objek
dengan jumlah yang terbatas. Sebuah proses meminta Lock untuk menggunakan objek; jika
objek tersebut tidak dapat digunakan, proses memasuki wait state. Proses waiting dapat terus
berlangsung selamanya, karena objek yang diminta proses tersebut di pegang oleh proses
lain yang juga dalam keadaan menunggu. situasi inilah yang dinamakan Dead Lock.
Pembuatan Tabel
1. koneksi sistem
Pada gambar di atas ini kami menjelaskan tentang mengoneksikan user, apabila kita ingin
menggunakan user kita harus memasukan kata sandi terlelbih dahulu.
2. Membuat table dengan query CREATE
3. Ketika user sudah hidup atau sudah berjalan maka langkah selanjutnya kita akan membuat
tabel.
3. Menambahkan isi table
Setelah membuat tabel sekarang kita mencoba memasukan data agar tersusun rapih didalam
tabel.
4. Tampilkan tabel dengan query SELECT
4. Setelah memasukan data kedalam tabel inilah hasil dari data tersebut, didalam tabel terdapat
beberapa jenis atribut yaitu seperti nama, nim dan jurusan.
Implementasi Locking Mechanism pada Oracle
Pada Oracle, Locking Mechanism terbagi menjadi 2 yaitu Row Level Lock dan Table Level Lock.
Pada Modul ini akan dilakukan percobaan Penguncian level tabel.
State User 1 User 2
S1 SET TRANSACTION ISOLATION
LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION
LEVEL SERIALIZABLE;
S2 DELETE FROM mahasiswa WHERE
nim = 13523263;
S3 ALTER TABLE mahasiswa ADD alamat
varchar2(10);
S4 COMMIT;
S5 ALTER TABLE mahasiswa ADD alamat
varchar2(10);
S6 COMMIT;
S1. Pada user 1 gunakan query tersebut untuk membuat transaksi read commited yang berarti
transaksi hanya dapat melihat perubahan data setelah transaksi lain melakukan commit.
Pada User 2 gunakan query tersebut untuk membuat transaksi serializable yang berarti
mengemulasikan eksekusi transaksi secara serial, transaksi menjadikan transaksi di eksekusi satu
setelah yang lainnya selesai di eksekusi.
S2. Pada user 1 lakukan query untuk menghapus data dari tabel mahasiswa dengan nim 13523263.
Lalu kita cek perubahan yang terjadi
5. S3. Pada user 2 lakukan query untuk menambah atribut baru berupa alamat pada tabel mahasiswa.
Query tidak akan berhasil dijalankan karena pada user 1 belum melakukan COMMIT.
S4. Pada user 1 lakukan query COMMIT.
S5. Pada user 2 query akan otomatis berhasil karena user 1 sudah melakukan COMMIT.
S6. Pada user 2 lakukan query COMMIT untuk menyimpan perubahan yang terjadi.
Percobaan locking mechanism pada oracle tersebut membuktikan bahwa ketika ada user yang akan
melakukan perubahan pada tabel namun user lain belum menyimpan perubahan sebelumnya maka
transaksi tidak akan berhasil. User diharuskan menyimpan perubahan terlebih dahulu agar transaksi
yang dilakukan oleh user lain setelahnya dapat berhasil.
Implementasi Locking Mechanism pada MySQL
Pada tutorial impelentasi Locking Mechanisme pada MySQL, kami menggunakan tabel praktikan.
Dengan atribut: id, nama, nim, jurusan.
State User 1 User 2
S1 SET TRANSACTION ISOLATION
LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION
LEVEL SERIALIZABLE;
S2 DELETE FROM praktikan WHERE nim
= 13523175;
S3 ALTER TABLE praktikan ADD alamat
varchar(10);
S4 COMMIT;
S5 ALTER TABLE praktikan ADD alamat
varchar(10);
S6 COMMIT;
S1. Pada user 1 gunakan query tersebut untuk membuat transaksi read commited yang berarti
transaksi hanya dapat melihat perubahan data setelah transaksi lain melakukan commit.
6. Pada User 2 gunakan query tersebut untuk membuat transaksi serializable yang berarti
mengemulasikan eksekusi transaksi secara serial, transaksi menjadikan transaksi di eksekusi satu
setelah yang lainnya selesai di eksekusi.
S2. Pada user 1 lakukan query untuk menghapus data dari tabel mahasiswa dengan nim 13523175.
S3. Pada user 2 lakukan query untuk menambah atribut baru berupa alamat pada tabel mahasiswa.
Query pada MySQL berhasil
S4. User 1 melakukan COMMIT.
S5. Pada user 2 lakukan kembali query untuk menambah atribut baru berupa alamat pada tabel
mahasiswa. Query gagal karena pada S3, query penambahan atribut alamat telah berhasil.
S6. Pada user 2 lakukan query COMMIT untuk menyimpan perubahan yang terjadi.
Hasil komparasi implementasi Lock Mechanism pada Oracle dan MySQL
Pada Oracle, transaksi akan Lock ketika user belum melakukan COMMIT. Speerti pada kasus
ALTER TABLE di atas. ALTER TABLE yang pertama tidak berhasil karena user 1 belum
melakukan COMMIT transaksi DELETE. Sedangkan pada MySQL, transaksi ALTER TABLE tetap
berhasil meski belum dilakukan COMMIT pada user 1.
Implementasi Deadlock pada Oracle
System Oracle akan menangani Dead Lock ini dengan cara membatalkan salah satu transaksi, dan
karena Dead Lock telah di hilangkan, transaksi yang lainnya dapat berjalan.
State User 1 User 2
S1 UPDATE deret SET nim = 1 WHERE
7. nim = 13523162;
S2 UPDATE deret SET nim = 2 WHERE nim =
13523175;
S3 UPDATE deret SET nim = 22 WHERE
nim = 13523175;
S4 UPDATE deret SET nim = 11 WHERE nim
= 13523162;
S1. User 1 melakukan query UPDATE untuk merubah nim mahasiswa yang memiliki nim
13523162 pada tabel mahasiswa.
S2. User 2 melakukan query UPDATE untuk merubah nim mahasiswa yang memiliki nim
13523175 pada tabel mahasiswa. Ketika user 1 menampilkan isi data maka tidak akan terjadi
perubahan yang dilakukan oleh user 2 karena user 2 menunggu user 1 untuk melakukan commit.
Lalu kita coba lihat perubahan yang terjadi
S3. User 1 melakukan query UPDATE untuk merubah nim mahasiswa yang memiliki nim
13523175 pada tabel mahasiswa.
8. S4. User 2 melakukan query UPDATE untuk merubah nim mahasiswa yang memiliki nim
13523162 pada tabel mahasiswa. Pada User 2 query tidak akan berjalan karena menunggu user 1
melakukan commit. Sedangkan pada user 1 terdeteksi deadlock karena 2 transaksi sebelumnya pada
user 1 dan user belum di commit.
Dari percobaan Deadlock pada oracle tersebut didapatkan bahwa ketika user 1 melakukan transaksi
dan belum melakukan commit dan pada waktu yang sama user 2 juga melakukan transaksi dan
belum melakukan commit maka akan terjadi deadlock.
Implementasi Deadlock pada MySQL
Pada tutorial implementasi Deadlock pada MySQL ini kami menggunakan tabel peserta yang di
dalamnya terdapat atribut: id, nama, nim, jurusan.
State User 1 User 2
S1 UPDATE peserta SET nim = 1
WHERE nim = 13523162;
S2 UPDATE peserta SET nim = 2 WHERE nim
= 13523175;
S3 UPDATE peserta SET nim = 22
WHERE nim = 13523175;
S4 UPDATE peserta SET nim = 11 WHERE nim
= 13523162;
S1. User 1 akan melakukan query UPDATE tabel peserta pada row dengan nim = 13523162
menjadi nim = 1
S2. User 2 akan melakukan query UPDATE tabel peserta pada row dengan nim 13523175 menjadi
nim = 2
S3. User 1 akan melakukan query UPDATE tabel peserta pada row dengan nim = 13523175
menjadi nim = 22
9. S4. User 2 akan melakukan query UPDATE tabel pserta pada row dengan nim = 13523162 menjadi
nim = 11
Hasil komparasi implementasi Deadlock pada Oracle dan MySQL
Setelah dicoba mengimplementasikan Deadlock pada Oracle dan MySQL, didapatkan kesimpulan
bahwa ketika user 1 melakukan transaksi dan belum melakukan commit dan pada waktu yang sama
user 2 juga melakukan transaksi dan belum melakukan commit maka akan terjadi deadlock.
Sedangkan implementasi pada MySQL, tanpa melakukan COMMIT, setelah melakukan query
UPDATE, transaksi berikutnya juga tidak dapat terjadi. Namun, pada MySQL tidak ada informasi
deadlock yang ditamplikan oleh sistem.