10 Sistem Basis Data Manajemen Transaksi 2
MANAJEMEN TRANSAKSI 2
Alif Finandhita, S.Kom Pada eksekusi konkurensi, banyak transaksi Pada eksekusi konkurensi, banyak transaksi
dimungkinkan untuk diproses secara bersama – sama dimungkinkan untuk diproses secara bersama – sama
dalam suatu sistem. dalam suatu sistem.Memperbolehkan banyak transaksi untuk Memperbolehkan banyak transaksi untuk mengupdate data secara konkuren akan mengupdate data secara konkuren akan menyebabkan beberapa komplikasi dengan menyebabkan beberapa komplikasi dengan konsistensi data. konsistensi data.
Untuk memastikan bahwa konsistensi tetap terjaga Untuk memastikan bahwa konsistensi tetap terjaga dengan baik pada eksekusi konkuren, membutuhkan dengan baik pada eksekusi konkuren, membutuhkan usaha yang lebih kuat. Akan lebih mudah jika usaha yang lebih kuat. Akan lebih mudah jika transaksi berjalan secara serial. transaksi berjalan secara serial.
Keuntungan konkurensi : Keuntungan konkurensi :
Meningkatkan utilitas disk dan prosesor Meningkatkan utilitas disk dan prosesor
Mengurangi rata – rata waktu respon transaksi Mengurangi rata – rata waktu respon transaksi
Dalam konkurensi dikenal dengan konsep Dalam konkurensi dikenal dengan konsep penjadwalan (schedule) yang akan membantu penjadwalan (schedule) yang akan membantu mengidentifikasi eksekusi agar konsistensi datanya mengidentifikasi eksekusi agar konsistensi datanya tetap terjaga. tetap terjaga.
Sistem Basis Data harus mengontrol interaksi Sistem Basis Data harus mengontrol interaksi diantara transaksi konkuren supaya transaksi – diantara transaksi konkuren supaya transaksi – transaksi tersebut tidak menghancurkan konsistensi transaksi tersebut tidak menghancurkan konsistensi basis datanya (data menjadi tidak konsisten). basis datanya (data menjadi tidak konsisten).
Penjadwalan / Schedule merupakan urutan yang Penjadwalan / Schedule merupakan urutan yang
mengindikasikan urutan kronologis instruksi mengindikasikan urutan kronologis instruksi yang mana dari transaksi konkuren yang akan yang mana dari transaksi konkuren yang akan dieksekusi. dieksekusi.Sebuah jadwal merupakan bagian dari suatu Sebuah jadwal merupakan bagian dari suatu
transaksi yang harus terdiri dari semua instruksi transaksi yang harus terdiri dari semua instruksi
yang ada di dalamnya. yang ada di dalamnya.Sebuah jadwal harus menjaga urutan instruksi Sebuah jadwal harus menjaga urutan instruksi yang muncul di setiap transaksi. yang muncul di setiap transaksi.
Misal T adalah transaksi transfer $50 dari A ke B, dan T adalah transfer
1
2
10% dari jumlah rekening A ke B. Penjadwalan berikut adalah pada transaksi serial, dimana T dulu yang diselesaikan baru diikuti oleh T
1
2 Penjadwalan 1 di text book Contoh penjadwalan selanjutnya, dengan transaksi yang sama, tetapi
dalam bentuk transaksi konkurensi, tapi ekivalen dengan penjadwalan sebelumnya.
Penjadwalan 3 pada Text book Pada contoh penjadwalan yang pertama dan yang kedua, jumlah
rekening A + B sebelum dan sesudah transaksi sama, tapi tidak dengan contoh penjawalan konkurensi berikut :
Penjadwalan 4 pada text book Sistem basis data harus dapat mengontrol eksekusi konkurensi dari Sistem basis data harus dapat mengontrol eksekusi konkurensi dari
suatu transaksi untuk memastikan database tetap terjaga suatu transaksi untuk memastikan database tetap terjaga konsistensinya. konsistensinya.
Asumsi dasar, bahwa setiap transaksi harus tetap menjaga konsistensi Asumsi dasar, bahwa setiap transaksi harus tetap menjaga konsistensi
database. database.
Eksekusi secara serial pada suatu transaksi dapat menjaga database Eksekusi secara serial pada suatu transaksi dapat menjaga database
tetap konsisten. tetap konsisten.
Sebuah jadwal (yang mungkin konkuren), serializable jika setara dengan Sebuah jadwal (yang mungkin konkuren), serializable jika setara dengan
penjadwalan secara serial. Pada bagian ini ada dua bentuk ekivalensi penjadwalan secara serial. Pada bagian ini ada dua bentuk ekivalensi penjadwalan (Schedule Equivalence) : Conflict dan View Serializability. penjadwalan (Schedule Equivalence) : Conflict dan View Serializability.
Pada serializability kita abaikan operasi selain dari instruksi read dan Pada serializability kita abaikan operasi selain dari instruksi read dan
write, serta diasumsikan bahwa transaksi dapat melakukan perhitungan write, serta diasumsikan bahwa transaksi dapat melakukan perhitungan
terhadap data di dalam buffer lokal diantara instruksi read dan write. terhadap data di dalam buffer lokal diantara instruksi read dan write.Instruksi I Instruksi I dan I dan I masing – masing dari transaksi T masing – masing dari transaksi T dan T dan T , konflik jika dan , konflik jika dan
i i j j i i j j
hanya jika ada beberapa item data yang sama (Q) diakses secara hanya jika ada beberapa item data yang sama (Q) diakses secara bersama – sama baik oleh I bersama – sama baik oleh I dan I dan I , serta setidaknya salah satu dari , serta setidaknya salah satu dari
i i j j instruksi melakukan operasi write (Q). instruksi melakukan operasi write (Q).
1.
1. Jika I Jika I = read(Q) dan I = read(Q) dan I = read(Q), maka I = read(Q), maka I dan I dan I tidak konflik tidak konflik i i j j i i j j 2.
2. Jika I Jika I = read(Q) dan I = read(Q) dan I = write(Q), maka I = write(Q), maka I dan I dan I konflik konflik i i j j i i j j 3.
3. Jika I Jika I = write(Q) dan I = write(Q) dan I = read(Q), maka I = read(Q), maka I dan I dan I konflik konflik i i j j i i j j 4.
4. Jika I Jika I = write(Q) dan I = write(Q) dan I = write(Q), maka I = write(Q), maka I dan I dan I konflik konflik i i j j i i j j
Secara intuitif, konflik diantara I Secara intuitif, konflik diantara I dan I dan I memaksakan perintah logika memaksakan perintah logika
i i j j temporal diantara keduanya. temporal diantara keduanya.
Jika I Jika I dan I dan I merupakan instruksi dari transaksi berbeda dan tidak konflik, merupakan instruksi dari transaksi berbeda dan tidak konflik,
i i j j
maka urutan instruksi I maka urutan instruksi I dan I dan I dapat ditukar sehingga menghasilkan dapat ditukar sehingga menghasilkan
i i j j jadwal baru dengan hasil yang tetap sama. jadwal baru dengan hasil yang tetap sama. Jika jadwal S dapat ditransformasikan menjadi jadwalan S’oleh Jika jadwal S dapat ditransformasikan menjadi jadwalan S’oleh serangkaian pertukaran instruksi yang non-konflik, maka bisa serangkaian pertukaran instruksi yang non-konflik, maka bisa dikatakan S dan S’ adalah conflict equivalent. dikatakan S dan S’ adalah conflict equivalent.
Bisa dikatakan bahwa jadwal S adalah conflict serializable jika Bisa dikatakan bahwa jadwal S adalah conflict serializable jika conflict equivalent terhadap penjadwalan serial. conflict equivalent terhadap penjadwalan serial.
Contoh penjadwalan yang tidak conflict serializable Contoh penjadwalan yang tidak conflict serializable
T T T T
3
3
4 read(Q) read(Q) write(Q) write(Q) write(Q) write(Q)
4 Penjadwalan 3 di bawah bisa ditransformasikan ke penjadwalan 1,
penjadwalan serial dimana T diikuti T , dengan serangkaian penukaran
2
1
instruksi yang tidak konflik. Oleh karena itu penjadwalan di bawah ini
conflict serializability
Misalkan S dan S’ adalah dua jadwal dengan serangkaian transaksi yang Misalkan S dan S’ adalah dua jadwal dengan serangkaian transaksi yang
sama. S dan S’ adalah view equivalent. sama. S dan S’ adalah view equivalent.
S dan S’ adalah view equivalent jika memenuhi kondisi sebagai berikut : S dan S’ adalah view equivalent jika memenuhi kondisi sebagai berikut : 1.
1. Untuk masing – masing data item Q , jika transaksi T Untuk masing – masing data item Q , jika transaksi T membaca membaca i i
inisialisasi nilai pada Q di dalam jadwal S, maka transaksi T inisialisasi nilai pada Q di dalam jadwal S, maka transaksi T yang yang
i i ada di jadwal S’ juga harus membaca inisialisasi nilai pada Q. ada di jadwal S’ juga harus membaca inisialisasi nilai pada Q.
2.
2. Untuk masing – masing data item Q, jika transaksi T Untuk masing – masing data item Q, jika transaksi T i i
mengeksekusi read(Q) di dalam jadwal S, dan jika nilai yang mengeksekusi read(Q) di dalam jadwal S, dan jika nilai yang dihasilkan oleh operasi write(Q) dieksekusi oleh transaksi T dihasilkan oleh operasi write(Q) dieksekusi oleh transaksi T , maka , maka
j j
operasi read(Q) pada transaksi T operasi read(Q) pada transaksi T yang harus ada di jadwal S‘ juga yang harus ada di jadwal S‘ juga
i i
membaca nilai Q yang dihasilkan oleh operasi write(Q) yang sama membaca nilai Q yang dihasilkan oleh operasi write(Q) yang sama pada transaksi T pada transaksi T
j j 3.
3. Untuk masing – masing data item Q, transaksi yang sampai ke Untuk masing – masing data item Q, transaksi yang sampai ke
tahap akhir operasi write(Q) di dalam jadwal S tahap akhir operasi write(Q) di dalam jadwal S Seperti yang terlihat, view serializability juga dilihat berdasarkan pada Seperti yang terlihat, view serializability juga dilihat berdasarkan pada
operasi read dan write saja operasi read dan write saja Sebuah jadwal S adalah view seralizable , setara dengan Sebuah jadwal S adalah view seralizable , setara dengan penjadwalan serial. penjadwalan serial.
Setiap penjadwalan conflict serializable juga view serializable Setiap penjadwalan conflict serializable juga view serializable
Penjadwalan di bawah ini (penjadwalan 9 di text book) adalah Penjadwalan di bawah ini (penjadwalan 9 di text book) adalah penjadwalan yang view serializable tapi tidak conflict serializable penjadwalan yang view serializable tapi tidak conflict serializable
Penjadwalan di bawah (penjadwalan 9 di text book) menghasilkan outcome yang sama sebagai jadwal serial (T , T )
1
2
Recoverable Schedule – Jika transaksi T Recoverable Schedule – Jika transaksi T membaca sebuah item data membaca sebuah item data j j
yang sebelumnya ditulis oleh transaksi T yang sebelumnya ditulis oleh transaksi T , maka operasi commit T , maka operasi commit T
i i i i muncul sebelum operasi commit T muncul sebelum operasi commit T . . j j
Jadwal berikut (jadwal 11 di text book) tidak recoverable jika T Jadwal berikut (jadwal 11 di text book) tidak recoverable jika T commit commit
9
9
segera setelah read segera setelah read Jika T Jika T dibatalkan, maka T dibatalkan, maka T bisa jadi akan membaca state database bisa jadi akan membaca state database
8
8
9
9
inkonsisten. Maka dengan demikian database harus memastikan bahwa inkonsisten. Maka dengan demikian database harus memastikan bahwa jadwal dapat dipulihkan jika terjadi sesuatu hal. jadwal dapat dipulihkan jika terjadi sesuatu hal.
Cascading Rollback – kesalahan pada satu transaksi yang yang dapat Cascading Rollback – kesalahan pada satu transaksi yang yang dapat
berpengaruh pada serangkaian transaksi lainnya sehingga keseluruhan berpengaruh pada serangkaian transaksi lainnya sehingga keseluruhan transaksi akan di-rollback. transaksi akan di-rollback.
Misalkan pada penjadwalan berikut dimana belum ada transaksi yang di- Misalkan pada penjadwalan berikut dimana belum ada transaksi yang di-
commit, sehingga jika terjadi masalah bisa dipulihkan commit, sehingga jika terjadi masalah bisa dipulihkan Jika T Jika T transaksinya fail, maka T transaksinya fail, maka T dan T dan T juga harus di rollback. Jika juga harus di rollback. Jika
10
10
11
11
12
12
tidak demikian, maka akan menyebabkan banyaknya pekerjaan yang tidak demikian, maka akan menyebabkan banyaknya pekerjaan yang tidak akan terselesaikan. tidak akan terselesaikan.
Cascadeless Schedule – cascading rollback Cascadeless Schedule – cascading rollback tidak dapat terjadi, untuk setiap pasang tidak dapat terjadi, untuk setiap pasang
transaksi T transaksi T dan T dan T dimana T dimana T membaca sebuah membaca sebuah
i i j j j j item data yang sebelumnya ditulis oleh T item data yang sebelumnya ditulis oleh T i i dan operasi commit pada T dan operasi commit pada T muncul sebelum muncul sebelum i i operasi read pada T operasi read pada T . . j j Setiap cascadeless schedule juga dapat Setiap cascadeless schedule juga dapat dipulihkan (recoverable); dipulihkan (recoverable);
Jadwal harus conflict atau view serializable, dan Jadwal harus conflict atau view serializable, dan recoverable, demi terjaganya konsistensi database recoverable, demi terjaganya konsistensi database dan juga sebaiknya cascadeless. dan juga sebaiknya cascadeless.
Sebuah kebijakan dimana hanya satu transaksi yang Sebuah kebijakan dimana hanya satu transaksi yang dapat dieksekusi dalam satu waktu yang dapat dieksekusi dalam satu waktu yang menghasilkan penjadwalan serial, tapi minim menghasilkan penjadwalan serial, tapi minim konkurensi. konkurensi.
Beberapa skema hanya mengijinkan jadwal conflict- Beberapa skema hanya mengijinkan jadwal conflict- serializable untuk di-generate, dimana yang skema serializable untuk di-generate, dimana yang skema lainnya ada yang memungkinkan jadwal view- lainnya ada yang memungkinkan jadwal view- serializable yang tidak conflict-serializable. serializable yang tidak conflict-serializable.
DML (Data Manipulation Language) harus DML (Data Manipulation Language) harus menyertakan sebuah konstruksi untuk menyertakan sebuah konstruksi untuk menspesifikasikan serangkaian aksi yang meliputi menspesifikasikan serangkaian aksi yang meliputi suatu transaksi. suatu transaksi.
Di dalam SQL, transaksi dimulai secara implisit. Di dalam SQL, transaksi dimulai secara implisit.
Transaksi di SQL diakhiri oleh salah satu dari Transaksi di SQL diakhiri oleh salah satu dari statement sebagai berikut : statement sebagai berikut : commit work - commit transaksi yang sedang commit work - commit transaksi yang sedang
berlangsung dan memulai transaksi yang baru berlangsung dan memulai transaksi yang baru
rollback work – pembatalan terhadap transaksi rollback work – pembatalan terhadap transaksi
yang sedang berlangsung yang sedang berlangsung
Serializable – default Serializable – default Repeatable read – hanya record yang dicommit yang Repeatable read – hanya record yang dicommit yang dibaca, pembacaan secara berulang untuk record yang dibaca, pembacaan secara berulang untuk record yang sama harus dapat menghasilkan nilai yang sama. sama harus dapat menghasilkan nilai yang sama.
Bagaimanapun, transaksi mungkin tidak serializable - bisa Bagaimanapun, transaksi mungkin tidak serializable - bisa
menemukan beberapa record yang ditambahkan oleh menemukan beberapa record yang ditambahkan oleh suatu transaksi tapi tidak menemukan record lainnya. suatu transaksi tapi tidak menemukan record lainnya.
Read commited – hanya record yang dicommit yang akan Read commited – hanya record yang dicommit yang akan
dibaca , tetap commit untuk pembacaan record secara dibaca , tetap commit untuk pembacaan record secara berulang yang menghasilkan nilai yang berbeda. berulang yang menghasilkan nilai yang berbeda.Read uncommited – record yang tidak dicommit dibaca Read uncommited – record yang tidak dicommit dibaca
Pada saat mendesain skema kontrol konkurensi, Pada saat mendesain skema kontrol konkurensi,
kita harus tunjukan bahwa jadwal yang dibuat kita harus tunjukan bahwa jadwal yang dibuat oleh skema tersebut adalah serializable. oleh skema tersebut adalah serializable.Terdapat metode simpel dan efisien untuk Terdapat metode simpel dan efisien untuk menentukan conflict serializability dari suatu menentukan conflict serializability dari suatu jadwal. jadwal.
Misalkan sebuah jadwal S. Kita dapat membuat Misalkan sebuah jadwal S. Kita dapat membuat suatu grafik langsung yang diberi nama grafik suatu grafik langsung yang diberi nama grafik preseden (presedence graph). preseden (presedence graph).
Grafik preseden terdiri dari sepasang G = (V,E), dimana V Grafik preseden terdiri dari sepasang G = (V,E), dimana V adalah serangkaian simpul dan E adalah serangkaian adalah serangkaian simpul dan E adalah serangkaian tepian / busur. tepian / busur. Serangkaian simpul terdiri dari semua transaksi yang Serangkaian simpul terdiri dari semua transaksi yang
berperan serta di dalam penjadwalan. Serangkaian tepian berperan serta di dalam penjadwalan. Serangkaian tepian
/ busur terdiri dari semua bentuk T / busur terdiri dari semua bentuk T -> T -> T untuk masing – untuk masing – i i j j masing dari ketiga kondisi berikut : masing dari ketiga kondisi berikut : 1.1. T T eksekusi write(Q) sebelum T eksekusi write(Q) sebelum T eksekusi read(Q) eksekusi read(Q) i i j j 2.
2. T T eksekusi read(Q) sebelum T eksekusi read(Q) sebelum T eksekusi write(Q) eksekusi write(Q) i i j j 3.
3. T T eksekusi write(Q) sebelum T eksekusi write(Q) sebelum T eksekusi write(Q) eksekusi write(Q) i i j j
Jika bentuk T Jika bentuk T -> T -> T ada di dalam grafik preseden, maka di ada di dalam grafik preseden, maka di i i j j setiap jadwal S’ serial yang ekivalen ke jadwal S, T setiap jadwal S’ serial yang ekivalen ke jadwal S, T harus harus i i muncul sebelum T muncul sebelum T j j
T T T T 1 2 2 1 (a)
(b) Sebagai contoh, grafik preseden untuk Sebagai contoh, grafik preseden untuk
penjadwalan 1 digambarkan di (a), terdiri dari penjadwalan 1 digambarkan di (a), terdiri dari
bentuk dasar T bentuk dasar T -> T -> T , dimana semua , dimana semua1
1
2 instruksi T instruksi T dieksekusi sebelum instruksi dieksekusi sebelum instruksi
2
1 pertama pada T pertama pada T dieksekusi. Begitu juga dieksekusi. Begitu juga
1
2 sebaliknya untuk contoh yang digambarkan sebaliknya untuk contoh yang digambarkan di (b). di (b).
2
T T 1 2 (c)
Grafik preseden untuk jadwal 4, terdiri dari bentuk T Grafik preseden untuk jadwal 4, terdiri dari bentuk T - -
1 > T > T , karena T , karena T mengeksekusi read(A) sebelum T mengeksekusi read(A) sebelum T
1
2
2
1
1
2
mengeksekusi write(A). Grafik ini jg terdiri dari bentuk mengeksekusi write(A). Grafik ini jg terdiri dari bentuk
T T -> T -> T , karena T , karena T mengeksekusi read(B) sebelum T mengeksekusi read(B) sebelum T2
2
2
1
1
2
2
1
1 eksekusi write(B). eksekusi write(B).
Jika grafik preseden untuk S membentuk suatu Jika grafik preseden untuk S membentuk suatu lingkaran, maka jadwal S tidak conflict serializable. lingkaran, maka jadwal S tidak conflict serializable.
Jika sebaliknya, maka jadwal S conflict serializable Jika sebaliknya, maka jadwal S conflict serializable