Scheduler aims to set the SQL operation schedule

  Part #2

   Scheduler adalah proses DBMS khusus yang membuat

urutan eksekusi operasi dalam transaksi konkuren. Scheduler

meng-interleave eksekusi dari operasi database untuk memastikan serializability & isolation dari transaksi. Untuk menentukan urutan yang benar, scheduler melakukan aksinya berdasarkan algoritma kontrol konkurensi, seperti metode locking atau timestamping.

  Scheduler aims to set the SQL operation schedule Hasil Operasi Read No conflict Write Conflict

   Lock menjamin penggunaan item data secara eksklusif

untuk transaksi yang sedang berjalan. Transaksi mengunci

data yang diakses; lock akan dilepas ketika transaksi selesai sehingga transaksi lain dapat mengunci item data untuk digunakan. Semua informasi lock ditangani oleh lock manager, yang bertanggung jawab untuk memberikan & mengatur lock yang digunakan oleh transaksi.

  

Lock granularity menandakan tingkat dari penggunaan lock

  • Database

  atabase dikunci, sehingga mencegah penggunaan tabel dalam database oleh

  D

  transaksi T2, sementara transaksi T1 dieksekusi. Sesuai untuk proses batch, tetapi tidak sesuai untuk DBMS multiuser.

  • * Tabel

  Tabel dikunci, mencegah akses ke baris oleh transaksi T2 sementara transaksi T1 sedang menggunakan tabel. Akan tetapi, 2 transaksi dapat mengakses database yang sama selama mereka mengakses tabel yang berbeda. Tidak sesuai untuk DBMS multiuser.

  • * Halaman (page)

  DBMS mengunci seluruh diskpage. Diskpage atau page atau diskblock, yang dapat dideskripsikan sebagai bagian yang dapat dialamatkan langsung dari disk. Paling banyak digunakan untuk DBMS multiuser.

  • * Baris

  DBMS mengizinkan transaksi konkuren untuk mengakses baris yang berbeda dari tabel yang sama walaupun baris tersebut berada di halaman yang sama. Membutuhkan overhead yang tinggi karena kunci diberikan untuk tiap baris.

  • * Field

  Transaksi konkuren dapat mengakses baris yang sama selama mereka menggunakan field (atribut) yang berbeda dalam baris tersebut. Paling fleksibel untuk akses data multiuser tetapi jarang diimplementasikan dalam DBMS karena membutuhkan overhead yang sangat tinggi.

  Lock Tingkat Tabel

  Lock Tingkat Halaman (Page)

  Lock Tingkat Baris

  Konkurensi pesimistik Sinkronisasi eksekusi transaksi dilakukan mulai dari awal siklus eksekusi transaksi.

  Baris-baris data dikunci sebelum dimodifikasi, sehingga tidak ada transaksi lain yang bisa mengaksesnya, kecuali setelah kunci dibebaskan. Terdapat tiga jenis mekanisme pesimistik yang bisa digunakan, yaitu locking, timestamp (row-version), dan gabungan keduanya (hybrid). Metode pesimistik ini menjamin perubahan data bisa dilaksanakan dengan aman. Kekurangan metode ini terletak pada munculnya

  delay jika transaksi berjalan lambat atau data hasil modifikasi transaksinya tidak

  segera disimpan ke hardisk (commit) Fase pengendalian metode pesimistik :

Konkurensi optimistik

  Sinkronisasi transaksi ditunda hingga transaksi selesai dieksekusi. Proses validasi data hanya dilakukan ketika transaksi hendak menyimpan data secara permanen ke hardisk. Terdapat dua jenis mekanisme optmistik: locking dan timestamp (row-

  version). Dengan metode optimistik, sejumlah transaksi tetap bisa dieksekusi

  bersamaan tanpa harus saling menunggu. Kekurangannya terletak pada kemungkinan terjadinya tumpang tindih data, karena tidak ada jaminan bahwa data yang dimodifikasi adalah data asli, belum diubah oleh transaksi lainnya

  Fase pengendalian metode optimistik :

  $res = mysql_query("SELECT value FROM counter WHERE

Contoh

  name='counter1'"); list ($value) = mysql_fetch_row($res); $value++; // do something else first... $res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");

Apa Masalahnya ? Solusi 1 // tidak perlu ambil nilai counter dulu..

  // do something else first... $res = mysql_query("UPDATE counter SET value=$value+1 WHERE name='counter1'");

Solusi 2

  Melakukan locking terhadap tabel

  mysql_query("LOCK TABLES counter"); $res = mysql_query("SELECT value FROM counter WHERE name='counter1'"); list ($value) = mysql_fetch_row($res); // do something else first... increase value or something... $res = mysql_query("UPDATE counter SET value=$value+1 WHERE name='counter1'"); mysql_query("UNLOCK TABLES");

Solusi 3

  Melakukan locking terhadap record

  mysql_query("SELECT GET_LOCK('lock1')"); $res = mysql_query("SELECT value FROM counters WHERE name='counter1'"); list ($value) = mysql_fetch_row($res); // do something else first... increase value or something... $res = mysql_query("UPDATE counter SET value=$value +1WHERE name='counter1'"); mysql_query("SELECT RELEASE_LOCK('lock1')");

Kontrol Konkurensi dengan Metode Locking Selain tingkat locking, DBMS dapat menggunakan beberapa jenis lock:

  memiliki 2 kondisi yaitu locked atau unlocked. Setiap

  • Binary

  transaksi akan mengunci objek yang digunakan & melepas objek tersebut setelah transaksi berakhir.

  • - Shared / Exclusive lock

  Exclusive lock : jika suatu table sedang berada dalam kondisi ini maka hanya proses yang melakukan penguncian yang dapat mengakses table tersebut.

  

Shared lock : jika suatu table sedang berada dalam kondisi ini maka table tersebut

  dapat melaksanakan perintah SELECT dari proses lain tetapi datanya tidak dapat dirubah dengan menggunakan perintah UPDATE, INSERT, ataupun DELETE baik dari proses yang menguncinya apalagi dari proses lainnya.

  WRITE : locking akan bersifat exclusive , jika user ingin mengupdate (baca+tulis) tabel) READ : locking bersifat shared, jika user hanya ingin membaca tabel User harus melepas semua lock ketika semua transaksi telah selesai

  Kontrol Konkurensi dengan Metode Locking

  Kontrol Konkurensi dengan Metode Locking locking terhadap tabel Contoh 1

Kontrol Konkurensi dengan Metode Locking locking terhadap tabel Contoh 2

  Catatan Locking pada PHP :

  1. PHP tidak memiliki fungsi khusus untuk menangani locking

  2. Locking dilakukan melalui perintah SQL yang dikirim ke server MySQL melalui perintah mysql_query

  3. Perintah LOCK dan UNLOCK harus berada dalam satu skrip

  4. PHP akan melakukan UNLOCK secara otomatis pada saat skrip selesai dijalankan walaupun tidak secara eskplisit dituliskan perintah UNLOCK

Kontrol Konkurensi dengan Metode Locking

  locking terhadap tabel Table ‘temp’

Field Type Description Contoh 2

  idtemp int(10) Primary Key Auto Increment Name varchar (30)

  ‘A’ Session ‘B’ Session

  mysql>lock tables temp write mysql>insert into temp values(1,"a"); mysql>insert into temp(name) values("xy"); mysql>insert into temp values(2,“b"); .... mysql>insert into temp values(30 ,“z"); mysql>lock tables; the process will be pending until ‘A’ session is completed

Kontrol Konkurensi dengan Metode Locking Lock dapat menyebabkan 2 masalah berikut :

   Walaupun penggunaan shared lock memberikan akses data yang lebih efisien, tapi shared/ exclusive lock meningkatkan overhead lock manager untuk alasan berikut: - Jenis lock harus diketahui sebelum lock diberikan.

  • Terdapat 3 operasi lock: READ_LOCK untuk memeriksa jenis lock, WRITE_LOCK untuk mengunci, & UNLOCK untuk melepas kunci.
  • Adanya izin untuk mengupgrade lock dari shared ke exclusive & mendowngrade dari exclusive ke shared.

   Lock dapat menyebabkan 2 masalah berikut:

  • Jadwal transaksi mungkin tidak serializable  dapat diatasi dengan two- phase locking.
  • Terjadi deadlock yang muncul ketika 2 transaksi menunggu satu sama lain untuk melepas kunci data  dapat diatasi dengan teknik deteksi & pencegahan deadlock.

Two Phase Locking

   Mendefinisikan bagaimana transaksi memperoleh & melepaskan kunci.  Menjamin serializability tetapi tidak mencegah deadlock.  Terdiri dari 2 tahap yaitu:

  • Growing phase  transaksi memperoleh semua kunci yang diperlukan tanpa melepas kunci data apapun. Setelah semua kunci diperoleh, transaksi berada dalam posisi terkunci.
  • Shrinking phase  transaksi melepaskan semua kunci & tidak dapat memperoleh kunci baru.

  Dikendalikan oleh aturan berikut: * Dua transaksi tidak dapat memiliki kunci yang saling bertentangan.

  • Tidak ada operasi unlock yang dapat mendahului operasi lock dalam transaksi yang sama.
  • Tidak ada data yang diproses sampai semua kunci diperoleh
    • – yaitu sampai transaksi berada dalam posisi terkunci.

  Protokol Two Phase Locking (2PL) Two Phase Locking (2PL) dapat membantu mencegah masalah :

   Lost Update  Uncommitted Data  unconsistent Retriveals

Teknik Pengendalian Deadlock

  Deadlock prevention  transaksi yang meminta kunci baru dibatalkan

  ketika terdapat kemungkinan terjadinya deadlock. Jika transaksi dibatalkan, semua perubahan yang dilakukannya akan dikembalikan & semua kunci akan dilepas. Transaksi ini kemudian dijadwalkan ulang untuk eksekusi. Direkomendasikan jika kemungkinan terjadinya deadlock tinggi.

  Deadlock detection DBMS menguji database secara berkala untuk

  deadlock. Jika deadlock ditemukan, maka transaksi korban dibatalkan & transaksi lain dilanjutkan. Direkomendasikan jika kemungkinan terjadinya

  deadlock rendah.

Deadlock avoidance transaksi harus mendapatkan semua kunci yang

  dibutuhkan sebelum dieksekusi. Teknik ini menghindari pembatalan dari transaksi yang bertentangan dengan mendapatkan lock agar berhasil. Direkomendasikan jika waktu respon rendah pada daftar prioritas sistem.

  Proses Terjadinya Deadlock

  Pemodelan deadlock

Kontrol Konkurensi dengan Metode Timestamping

  o Pendekatan timestamping memberikan timestamp unik untuk tiap transaksi. o

  Nilai timestamp menghasilkan urutan dimana transaksi diberikan ke DBMS. o

  Timestamp harus memiliki 2 properti: - Keunikan memastikan tidak ada nilai timestamp yang sama.

  • Monotonicity memastikan nilai timestamp selalu meningkat. o

  Semua operasi database (baca & tulis) dalam transaksi yang sama harus memiliki timestamp yang sama. DBMS mengeksekusi operasi yang bertentangan dalam urutan timestamp, sehingga memastikan serializability dari transaksi. Jika 2 transaksi bertentangan, satu dihentikan, dikembalikan, dijadwal ulang, & diberikan nilai timestamp baru. o

  Kekurangannya adalah tiap nilai yang disimpan dalam database membutuhkan 2 field timestamp tambahan: 1 untuk terakhir kali field dibaca & 1 untuk update terakhir. Timestamp juga meningkatkan

Skema Wait/ Die & Wound/ Wait Dalam skema wait/ die:

  • Jika transaksi yang meminta kunci adalah yang tertua dari 2 transaksi, maka ia akan menunggu (wait) sampai transaksi lain selesai & kunci dilepas.
  • Jika transaksi yang meminta kunci adalah yang termuda dari 2 transaksi, maka ia akan dibatalkan (die) & dijadwalkan ulang menggunakan timestamp yang sama.

  Singkatnya, transaksi yang lebih tua menunggu yang lebih muda untuk selesai & melepas kuncinya.

  Dalam skema wound/ wait:

  • Jika transaksi yang meminta kunci adalah yang tertua dari 2 transaksi, maka ia akan mendahului (wound) transaksi yang lebih muda dengan membatalkannya.
  • Jika transaksi yang meminta kunci adalah yang termuda dari 2 transaksi, maka ia akan menunggu sampai transaksi lain selesai & kunci dilepas.

  Singkatnya, transaksi yang lebih tua membatalkan & menjadwalkan ulang transaksi yang lebih muda.

  Skema Wait/ Die & Wound/ Wait

Kontrol Konkurensi dengan Metode Optimistik

   Metode optimistik berdasarkan pada asumsi bahwa kebanyakan operasi database tidak bertentangan.  Pendekatan ini tidak membutuhkan teknik locking atau timestamp. Akan tetapi, transaksi dieksekusi tanpa larangan sampai dicommit.  Pendekatan ini melalui 2 atau 3 tahap:

  1) Selama tahap read, transaksi membaca database, mengeksekusi komputasi yang dibutuhkan, & membuat update salinan pribadi dari nilai database. Semua operasi update dari transaksi dicatat dalam sebuah file update sementara, yang tidak diakses oleh transaksi yang tersisa. 2) Selama tahap validation, transaksi divalidasi untuk memastikan bahwa perubahan yang dibuat tidak mempengaruhi integritas & konsistensi dari database. Jika uji validasi positif, transaksi lanjut ke tahap write. Jika uji validasi negatif, transaksi diulang & perubahan dibuang.

Tugas Akhir Semester

  Buatlah aplikasi untuk mengelola data instructor dengan menggunakan bahasa Pemrograman tertentu (misalnya PHP), petunjuk teknis sebagai berikut :

  1. Buat tabel instructor : create table instructor (ID varchar (5), name varchar (20) not null, dept_name varchar (20), salary numeric (8,2), primary key (ID));

  2. Contoh layout aplikasi : Insert Edit Delete Display Exit

  3. Aturan : aplikasi ini diakses multi user. Jika salah satu user menggunakan operasi Instrcutur, Edit Record display, maka user lain masih bisa menjalankan operasi yang sama (display). 15151

  Instrcutor ID Mozart Sedangkan, jika salah satu user

  Name Comp. Sci. Department menggunakan operasi insert, edit atau

  40000 Salary delete, maka user lain tidak dapat Save Reset cancel mengakses (tampilkan pesan : “Record is edited by another user“).

  Record is edited by another user"

  4. Upayakan tersedianya cara untuk mengatasi atau mencegah terjadinya deadlock.

  

5. Tugas ini dikerjakan secara berkelompok (seperti kelompok sebelumnya). Tugas ini juga digunakan sebagai

soal ujian akhir semester matakuliah Sistem Basis Data.

  6. Aplikasi yang dihasilkan dipresentasikan : Jadwal I : 27 Desember 2017 (14.00-16.00), Jadwal II : tanggal 2-