OVERVIEW • Transaksi merupakan bagian dari pengeksekusian sebuah program yang melakukan pengaksesan basis data dan bahkan juga melakukan serangkaian pengubahan data. Sebuah transaksi pada umumnya terdir dari atas beberapa operasi yang membentuk sebuah satuan kerja logik. • DBMS yang kita gunakan harus dapat menjamin bahwa setiap satuan transaksi harus dapat menjamin bahwa setiap transaksi harus dikerjakan secara utuh atau tidak sama sekali. Tidak boleh ada transaksi yang hanya dikerjakan sebagian karena hal itu akan dapat menyebabkan adanya inkonsistensi basis data.
Karakteristik Transaksi Pelaksanaan sebuah transaksi akan berpeluang untuk mengganggu integritas basis data yang membuat kondisi data atau hubungan antar data menjadi salah atau tidak seperti yang seharusnya. Untuk menjamin agar integritas itu dapat tetap terjaga, maka setiap transaksi harus memiliki sifat-sifat: • Atomik (Atomicity), yaitu dimana operasi-operasi didalam suatu transaksi harus dapat dikerjakan semua atau tidak dikerjakan sama sekali. • Konsisten (Consistentcy), dimana eksekusi transaksi secara tunggal harus dapat menjamin data tetap konsisten setelah sebuah transaksi berakhir. • Terisolasi (Isolated), jika pada sebuah sistem basis data terdapat sejumlah transaksi yang dilaksanakan secara bersamaan maka semua transaksi yang dilaksanakan pada saat yang bersamaan tersebut harus bisa dimulai dan harus bisa berakhir. • Bertahan (Durability), di mana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya system mati/ down.
Status Transaksi • Terhenti atau tidak sempurnanya pelaksanaan sebuah transaksi tidak selalu diakibatkan oleh kegagalan insidental baik dari perangkat keras (crash) maupun kemacetan sistem operasi (hang). Keadaan seperti itu justru lebih sering terjadi karena sengaja baik itu oleh aksi user yang memang sengaja menghentikan proses eksekusi transaksi atau karena keputusan penghentian transaksi oleh DBMS akibat adanya kondisi yang tidak diinginkan, seperti deadlock atau terlewatinya batas waktu (timeout) pelaksanaan transaksi yang telah ditetapkan. Active Patially Committ ed Failed Committ ed Aborted
• Aktif (Active), yang merupakan status awal (initial state) sebuah transaksi yang menunjukkan transaksi tersebut masih dieksekusi. • Berhasil Sebagian (Partially Committed), yaitu keadaan yang dicapai oleh suatu transaksi tepat pada saat operasi/ instruksi terakhir dalam transaksi selesai dikerjakan. • Gagal (Failed), yang merupakan keadaan dimana sebuah transaksi terhenti pengeksekusiannya sebelum tuntas sama sekali. • Batal (Aborted), yaitu keadaan dimana sebuah transaksi dianggap tidak/belum dikerjakan yang tentu dengan terlebih dahulu diawali dengan mengembalikan semua data yang diubah oleh transaksi tersebut ke nilai- nilai semula (menjadi tanggung jawab DBMS). • Berhasil Sempurna (Committed), keadaan di mana transaksi telah dinyatakan berhasil dikerjakan seluruhnya dan basis data telah merefleksikan perubahan-perubahan yang memang diinginkan oleh sebuah transaksi.
Persaingan Eksekusi Transaksi • Umumnya sistem pemrosesan transaksi memungkinkan banyak transaksi untuk dijalankan secara bersamaan (concurent) demi meningkatkan performansi sistem secara keseluruhan. Akan tetapi, seperti yang telah dijelaskan sebelumnya, hal ini berpeluang untuk dapat mengganggu bahkan merusak konsistensi/ integritas data.
• Ada dua alasan kenapa eksekusi banyak transaksi secara bersamaan semacam ini lebih dipilih ketimbang melaksakan transaksi secara serial: – Sebuah transaksi terdiri atas sejumlah operasi, sebagian brebentuk aktivitas I/O seperti pengaksesan disk, penulisan output ke layar, dll dan sebagian lagi merupakan aktivitas CPU seperti operasi perhitungan, operasi pembandingan, dll, dimana aktivitas-aktivitas ini menjadi tidak optimal jika transaksi dilakukan secara serial. – Transaksi yang harus dilayani dan terlibat di dalam sebuah sistem biasanya sangat beragam, ada yang singkat dan ringan ada pula yang berat dan karenanya membutuhkan waktu proses yang lebih lama.
• Contoh Kasus adalah sebuah sistem konkuren yang melibatkan dua buah transaksi pentransferan dana antara dua buah rekening. Transaksi pertama, kita sebut dengan T 1 yang berfungsi untuk mentransfer dana sebesar Rp ,- dari rekening A ke rekening B dan T 2 berfungsi mentransfer dana sebesar 10 % dari saldo rekening A ke rekening B.
T1T1 T2T2 read(A) A A write(A) read(B) B B write(B) read(A) temp 0.1 * A A A - temp write(A) read(B) B B + temp write(B)
T1T1 T2T2 read(A) A A write(A) read(B) B B write(B) read(A) temp 0.1 * A A A - temp write(A) read(B) B B + temp write(B)
T1T1 T2T2 read(A) A A write(A) read(B) B B write(B) read(A) temp 0.1 * A A A - temp write(A) read(B) B B + temp write(B)
Serializability • Masalah utama pengeksekusian transaksi secara bersamaan adalah integritas dan validitas data. Untuk kedua hal tersebut perlu adanya sebuah mekanisme tertentu. • Serializability adalah suatu aturan untuk menjadwalkan proses-proses transaksi yang dijalankan hampir bersamaan dengan tetap menjaga konsistensi data seolah-olah proses dari transaksi-transaksi tersebut dijalankan secara serial.
BAGAIMANA MENJAGA SERIALIZABILITY????? ??
Lock Based Protocol • Merupakan suatu cara/metoda yang digunakan untuk tetap menjaga serializability pada data yang diakses oleh lebih dari satu transaksi. Yaitu, apabila salah satu transaksi mengakses sebuah item data maka tidak akan ada transaksi yang dapat memodifikasi data tersebut. Metoda yang umum digunakan adalah mengijinkan transaksi terhadap suatu data X apabila transaksi tersebut memegang “kunci” atau “Lock” untuk dapat memodifikasi data X.
• Lock-Based Protocol • Two-Phase Lock Protocol
Lock-Based Protocol Ada dua jenis mode penguncian dasar yang digunakan dalam mekanisme ini yaitu: – Bersama (Shared). Jika sebuah transaksi T i dapat melakukan penguncian dengan mode ini (dilambangkan dengan S) terhadap item data Q, maka T i dapat membaca, tapi tidak dapat mengubah nilai Q tersebut. – Tunggal (Exclusive). Jika sebuah transaksi T i dapat melakukan penguncian dengan mode ini (dilambangkan dengan X) terhadap item data Q, maka T i dapat membaca maupun mengubah nilai tersebut.
SX SCompatibleIncompatible X
Hal yang harus diperhatikan: • Setiap transaksi harus meminta lock apabila akan melakukan operasi/mengakses terhadap suatu data. Misalkan data Q, mode-lock yang diterapkan terhadap data Q harus sesuai dengan operasi yang akan dilakukan. • Transaksi meminta lock terhadap suatu data, kepada concurrency control manager. • Operasi terhadap Q dapat dilakukan transaksi T apabila concurrency control manager memberikan grant (hak istimewa) lock yang diminta.
• Beberapa shared mode-lock dari transaksi yang berbeda dapat diterapkan terhadap data yang sama secara bersamaan(shared mode-lock compatible dengan shared mode-lock yang lain), tapi ini tidak berlaku pada exclusive mode-lock (exclusive mode-lock adalah incompatible dengan exclusive mode-lock lain). • Shared mode –lock dan exclusive mode-lock dari transaksi yang berbeda tidak dapat diterapkan terhadap data yang sama secara bersamaan (Shared mode-lock adalah incompatible dengan exclusive mode-lock, begitupun sebaliknya).
• Untuk melepaskan lock pada data Q dari transaksi T dapat dilakukan dengan menggunakan instruksi unlock secara eksplisit. • Semua lock terhadap data akan terlepas pada saat transaksi berakhir. Transaksi berakhir pada saat COMMIT atau ROLLBACK dilakukan. Jika terjadi kegagalan pada transaksi, background process akan secara otomatis melakukan ROLLBACK semua perubahan data dari transaksi yang gagal dan melepaskan lock nya dari data.
Two-Phase Lock Protocol Protocol ini menginginkan bahwa setiap transaksi yang akan menjalankan penguncian dan melepaskan penguncian harus melalui dua fase atau tahapan, yaitu: • Fase Pertumbuhan (Growing Phase). Sebuah transaksi dapat melakukan sejumlah penguncian tetapi belum satupun melepaskan pengunciannya. • Fase Pelepasan (Shrinking Phase). Sebuah transaksi dapat melepaskan sejumlah penguncian, tetapi belum melakukan penguncian yang baru. Pada awalnya, sebuah transaksi akan berada dalam fase pertumbuhan. Transaksi tersebut akan melakukan penguncian sebanyak yang dibutuhkan. Ketika transaksi mulai melepaskan sebuah penguncian, ia akan mulai memasuki fase pelepasan, tanpa ada permintaan penguncian berikutnya