Dokumentasi tentang Praktik Row dan Table Locking pada Dua DBMS, yaitu MySQL dan Oracle11g dengan mengomparasi kondisi dari kedua DBMS tersebut saat melakukan Locking.
Demo Komparasi Row dan Table Locking pada MySQL dengan Oracleg11
1. LAPORAN SISTEM MANAJEMAN BASISDATA
KOMPARASI ROW DAN TABLE LOCKING ANTARA
ORACLE DENGAN MYSQL
DISUSUN OLEH :
Galih Nalendro (14523047)
Hilda Indriani Gea (14523231)
Desty Metik Mentarie (14523272)
Philo Mushofi El Haries (14523310)
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS ISLAM INDONESIA
2017
2. PENGERTIAN LOCKING
Lock pada database berarti suatu kunci atau penguncian. Lock digunakan pada saat terjadi
pengaksesan database oleh user secara bersamaan. Hal ini ditujukan untuk menjaga data agar
tidak corrupt/hilang atau data yang tidak valid pada saat banyak user mengakses database
secara bersamaan/konkuren.
Dalam laporan ini, penulis membandingkan konsep locking pada 2 DBMS yaitu
a. MySQL
b. ORACLE.
3. MySQL
Persiapan
Kami menggunakan perangkat lunak MySQL Workbench. Perangkat lunak ini
merupakan salah satu perangkat lunak yang memungkinkan pengguna untuk menjalankan 2
session yang mengakses basisdata yang sama. Ditambah lagi perangkat lunak ini memiliki GUI
yang sangat membantu untuk berbagai aktivitas manajemen basisdata, contohnya membuat
basisdata, table, skema dan sebaginya. Perangkat lunak ini dapat di unduh di
https://dev.mysql.com/downloads/workbench/
Setelah mengunduh MySQL Workbench, kemudian install dan buka perangkat lunak
tersebut. Pertama-tama pastikan anda telah meng-install XAMPP terlebih dahulu dan
menjalankan modul MySQL.
Kemudian kembali ke aplikasi Workbench, buatlah koneksi dengan cara klik lambing ‘+’ pada
MySQL Connection (terletak pada kiri atas layar)
4. Setelah itu akan muncul dialog-box setup untuk koneksi yang akan kita buat.
Isi bebas dialog-box tersebut pada connection name, karena nama koneksi wajib diisi
pada aplikasi ini. Kami membuat koneksi dengan nama “simbada_try1”. Text field yang lain
cukup dibiarkan saja sesuai default. Klik ‘Test Connection’ pada bawah kanan untuk mengecek
koneksi apakah berjalan atau tidak. Jika sudah muncul dialog-box baru seperti dibawah ini, maka
koneksi berjalan lancar.
5. Kemudian buka koneksi tersebut. Kemudian buat basisdata baru, dengan cara klik create
new scheme.
Maka akan muncul dialog-box untuk setup scheme seperti dibawah ini
6. Isi nama scheme dan klik Apply. Pada percobaan ini kami memberi nama “db_baru”.
Setelah selesai tambahkan table pada scheme yang baru saja dibuat. Caranya dengan klik panah
kekanan pada nama schema yang tertera pada kolom paling kiri kemudian klik kanan pada
“tables” kemudian pilih Create Table.
Setelah membuat table, kemudian membuat user baru untuk percobaan dengan 2 session.
Caranya klik users dan privileges pada kolom paling kiri. Kemudian akan muncul dialog-box
berikut.
7. Buat akun baru dengan klik Add Account, kemudian isi formnya. Kami menggunakan
login name “naruto” dengan password yang sama dengan login name. Setelah itu kembali ke
halaman home untuk membuat koneksi baru. Caranya sama dengan membuat koneksi pertama
kali dengan user ‘root’, namun sekarang ganti usernya dengan user yang baru kita buat dan isi
passwordnya. Kami menggunakan nama koneksi “koneksiNaruto”. Kini telah ada 2 koneksi
maka persiapan telah selesai.
8. 1. Table Level Locking
Pada session dengan user root, masukkan beberapa data pada table yang telah kita buat.
Lakukan perintah SELECT untuk melakuka cek isi keseluruhan table.
Setelah berhasil mengisi table dengan beberapa data, buat hak akses kepada user baru
agar dapat mengakses basisdata yang sama dengan memasukkan perintah:
Font yang diberi warna merah adalah nama database dan font biru adalah user yang baru.
Sekarang buka koneksi pada user baru dan masukkan perintah untuk menggunakan basisdata
yang sama dengan session root:
Sekarang kedua session telah dapat menggunakan basisdata yang sama. Sekarang
masukkan perintah untuk melakukan lock table. Pada MySQL terdapat dua jenis locking table
yaitu READ dan WRITE. Perbedaannya adalah jika kita menggunakan READ, maka session
yang lain hanya bisa melakukan perintah SELECT. Sedangkan perintah WRITE, mengunci
sebuah table sehingga table tersebut tidak dapat di modifikasi dan bahkan di-SELECT.
grant all on db_baru.* TO 'naruto'@'localhost';
use db_baru;
9. a. READ
Masukkan perintah:
Font yang berwarna pink adalah nama table. Dengan memasukkan perintah tersebut kita
telah mengunci table mahasiswa dengan perintah READ. Jika melakukan insert data pada
session yang lain, hasilnya adalah sebagai berikut:
Dari screenshot tersebut terlihat proses terus menyatakan “running…” Karena menunggu
session yang melakukan lock untuk unlock. Namun jika kita jalankan perintah SELECT maka
berjalan dengan lancar.
lock table mahasiswa read;
10. Untuk melakukan unlock masukkan perintah:
Setelah melakukan unlock, maka pending selesai dan data baru akhirnya masuk.
unlock tables;
11. b. WRITE
Pada perintah write ini, session lain tidak bisa melakukan apapun pada table yang sama,
bahkan melakukan SELECT juga tidak bisa.
Perintah SELECT mengalami pending. Begitu pula perintah insert.
Setelah table di-unlock, data pada table baru bisa dimodifikasi.
12. 2. Row Level Locking
Dalam My SQL, row level locking memiliki 2 jenis yaitu exclusive lock dan shared lock.
Kedua jenis lock ini sangat mirip. Session lain dapat melakukan SELECT pada record data yang
di-lock namun tidak dapat memodifikasi(UPDATE,DELETE) hingga session yang melakukan
lock COMMIT. Perbedaan utama yang kami temukan dari kedua jenis row lock ini adalah jika
suatu session menjalankan suatu shared lock, maka session lain dapat melakukan shared lock
pada record data yang sama. Sedangkan pada exclusive lock mengunci suatu row agar tidak di-
lock oleh session lain.
Buat table baru dengan menggunakan engine InnoDB dengan memasukkan perintah yang
sama dengan membuat table biasa namun tambahkan “ENGINE=InnoDB” pada akhir code.
Contoh:
Mengapa meggnukana InnoDB, karena ada beberapa perintah yang hanya dimiliki InnoDB.
Setelah itu isi table tersebut dengan beberapa data.
a. Shared lock
Setiap lock, baik shared maupun exclusive, selalu awali dengan memulai transaksi dengan
memasukkan perintah:
Kemudian untuk memulai lock pada session root, masukkan perintah:
Jadi, pada baris kode diatas, kami memilih suatu baris pada table t1 dengan a=1. Sehingga
session lain tidak dapat memodifikasi baris tersebut, namun dapat melakukan SELECT.
Saat session lain melakukan modifikasi
13. Sekarang kita akan mencoba untuk melakukan shared lock pada baris data yang sama dengan 2
session berbeda. Maka hasilnya adalah
Saat session lain melakukan SELECT
14. Kedua session menunjukkan lock mode berhasil. Untuk mengakhiri lock, lakukan COMMIT.
b. Exclusive lock
Pada exclusive lock, masalah baris data yang dimodifikasi sama dengan share lock(bisa di-
SELECT, namun tidak bisa UPDATE, DELETE). Jika suatu baris dilakukan exclusive lock pada
suatu session, session lain harus menunggu untuk dapat melakukan lock pada baris yang sama
baik exclusive atau shared.
Pertama, lakukan start transaksi kemudian masukkan perintah:
15. Dengan memasukkan perintah tersebut, kita telah melakukan lock exclusive pada baris dengan
a=1. Sekarang lakukan lock share pada session lain:
Pada screenshot diatas dapat dilihat bahwa proses selalu running karena masih menunggu session
lain untuk COMMIT. Sekarang kita lakukan exclusive lock pada session dengan user selain root
maka hasilnya akan running atau menunggu session yang melakukan lock untuk COMMIT:
16. ORACLE
Persiapan
Persiapan awal yang dilakukan untuk mendemokan konsep locking pada ORACLE
adalah sebagai berikut :
a. Mendaftarkan user pertama pada system
b. Mendaftarkan user kedua pada system
c. Memberikan hak akses untuk login ke database, membuat tabel dan mendapat semua hak
akses yang ada.
User gea :
User metik :
d. Memberikan hak akses objek.
User gea memberikan hak akses objek kepada user metik :
User metik memberikan hak akses objek kepada user gea :
17. 1. Table level lock
Setiap tabel dapat dikunci dan proses pada tabel itu hanya dapat dilakukan oleh proses
yang mengunci table tersebut. Proses yang dapat mengakses table ini hanya proses yang
sifatnya membaca data dalam tabel.
Isolation level serializable yaitu menggunakan range lock untuk mencegah transaksi dari
insert, update dan delete beberapa baris dalam suatu rentang yang sedang dibaca oleh
transaksi lain. Level ini memproteksi dari ketiga masalah concurensy (dirty reads, non-
repeatable reads dan phantom reads).
Isolation level read commited (default SQL server) pada model ini database tidak
membolehkan transaksi untuk membaca data yang ditulis ke table oleh uncommitted
transaction. Model ini melindungi dari dirty reads, tapi tidak untuk melindungi non-
repeatable dan phantom reads.
Table lock :
S-Lock, untuk SELECT/INSERT/UPDATE/DELETE row terhadap suatu
tabel.
X-Lock, untuk DROP/ALTER suatu tabel.
18. a. SELECT TABLE (Table S-Lock)
Waktu User Gea User Metik
W1
SET TRANSACTION ISOLATION
LEVEL SERIALIZABLE;
W2 SELECT * FROM rekening;
W3 DROP TABLE gea.rekening;
W4
GAGAL, karena ORACLE user gea
masih melock
W5 COMMIT;
W6
DROP TABLE gea.rekening;
BERHASIL, table berhasil dihapus.
Screenshoot user gea di W1
Screenshoot user gea di W2 dan W5
20. b. UPDATE TABLE (Table S-Lock)
Waktu User Gea User Metik
W1
UPDATE rekening SET saldo =
1500000 WHERE nama = ‘Wawan’ ;
W2 DROP TABLE gea.rekening;
W3
GAGAL, karena ORACLE user gea
masih melock
W4 COMMIT;
W5
DROP TABLE gea.rekening;
BERHASIL, table berhasil dihapus.
W6 COMMIT;
Screenshoot user gea di W1dan W4
Screenshoot user metik di W2, W3, W5 dan W6
21. c. DELETE TABLE (Table S-Lock)
Waktu User Gea User Metik
W1 SET TRANSACTION ISOLATION
LEVEL READ COMMITED;
SET TRANSACTION ISOLATION
LEVEL SERIALIZABLE;
W2 DELETE FROM rekening WHERE
id = 1;
W3 ALTER TABLE gea.rekening ADD
umur char (2);
W4 GAGAL, karena ORACLE user gea
masih melock
W5 COMMIT;
W6 ALTER TABLE gea.rekening ADD
umur char (2);
BERHASIL
W7 COMMIT;
Screenshoot user gea di W1
22. Screenshoot user gea di W2 dan W5
Screenshoot user metik di W1, W3, W4, W6 dan W7
23. d. DROP dan UPDATE TABLE (Table X-Lock)
Waktu User Gea User Metik
W1 LOCK TABLE gea.mahasiswa in
EXCLUSIVE MODE;
W2 Locked.
W3 DROP TABLE mahasiswa;
W4 GAGAL, karena ORACLE user
metik masih melock
W5 UPDATE mahasiswa SET
nama=’hihi’ WHERE id=2;
W6 GAGAL, proses menunggu
W7 COMMIT;
W8 UPDATE berhasil
Screenshoot user metik di W1 dan W2
Screenshoot user gea di W3 dan W4
Screenshoot user gea di W5 dan W6
Screenshoot user metik di W7
24. e. ALTER dan INSERT TABLE (Table X-Lock)
Waktu User Gea User Metik
W1 LOCK TABLE gea.mahasiswa in
EXCLUSIVE MODE;
W2 Locked.
W3 ALTER TABLE gea.mahasiswa
ADD umur number (2);
W4 GAGAL, karena ORACLE user
metik masih melock
W5 INSERT INTO gea.mahasiswa
VALUES (03, ‘hoho’,003);
W6 GAGAL, proses menunggu
W7 COMMIT;
W8 INSERT berhasil.
Screenshoot user metik di W8
Screenshoot user gea di W1 dan W2
Screenshoot user metik di W3 dan W4
26. 2. Row level lock
Setiap baris data dapat di dikunci (lock) secara individual tanpa mempengaruhi baris data
yang lainnya. Hal ini untuk menjamin adanya data yang konsisten (consistent read).
Row lock hanya ada X-Lock, untuk UPDATE/DELETE
a. UPDATE ROW
Waktu User Gea User Metik
W1
UPDATE rekening SET
saldo=100000 WHERE
nama=’Raja’;
W2 UPDATE 1 [memegang X-Lock]
UPDATE gea.rekening SET
saldo=570000 WHERE nama=’Raja’;
W3
Akan menunggu sampai X-Lock
dilepas
W4
COMMIT;
[Melepas X-Lock]
W5 Update berhasil
Screenshoot user gea di W1, W2 dan W4
Screenshoot user metik di W2, W3 dan W5
27. b. DELETE ROW
Waktu User Gea User Metik
W1
DELETE FROM rekening WHERE
nama=’Raja’;
W2 DELETE 1 [memegang X-Lock]
UPDATE gea.rekening SET
saldo=500000 WHERE nama=’Raja’;
W3
Akan menunggu sampai X-Lock
dilepas
W4
COMMIT ;
[Melepas X-Lock]
W5
0 Rows updated. Nama Raja sudah
terhapus.
Screenshoot user gea di W1, W2 dan W4
Screenshoot user metik di W2, W3 dan W5
28. c. DELETE ROW
Waktu User Gea User Metik
W1
DELETE FROM rekening WHERE
nama=’Raja’;
W2 DELETE 1 [memegang X-Lock]
DELETE FROM gea.rekening
WHERE nama=’Raja’;
W3
Akan menunggu sampai X-Lock
dilepas
W4
COMMIT ;
[Melepas X-Lock]
W5
0 Rows deleted. Nama Raja sudah
terhapus.
Screenshoot user gea di W1, W2 dan W4
Screenshoot user metik di W2, W3 dan W5
29. KESIMPULAN
Table Locking
Terdapat persamaan antara mode read pada MySQL dengan mode exclusive pada
ORACLE, yaitu kedua mode tidak memperbolehkan adanya transaksi apapun dari
session lain kecuali SELECT.
Mode write MySQL adalah tidak memperbolehkan transaksi apapun dari session lain.
Mode shared pada ORACLE memperbolehkan adanya transaksi SELECT, INSERT,
UPDATE dan DELETE row pada suatu tabel.
Row Locking
Row pada ORACLE hanya bisa menerapkan mode exclusive.
Row pada MySQL terdapat mode shared dan exclusive.