- Transaksi adalah sebuah unit eksekusi dari program yang mengakses dan memungkinkan update berbagai macam tipe data.
- Biasanya suatu transaksi diinisialisasikan oleh program user yang ditulis dalam bahasa pemrograman atau manipulasi data tingkat tinggi (sebagai contoh, SQL, C/C++), yang dibatasi oleh statement (pemanggilan fungsi) dalam bentuk begin transaction dan end transaction.
- Transaksi terdiri dari semua operasi yang dieksekusi diantara begin transaction dan end transaction.
- Pada saat eksekusi transaksi, database bisa saja menjadi tidak konsisten. Namun pada saat transaksi sampai pada level commited, maka databasenya harus konsisten.
- Dua hal utama yang mungkin akan dihadapi pada saat melakukan transaksi :
- Terjadinya berbagai macam kegagalan, yang bisa disebabkan karena kegagalan hardware, system crash, dll
- Eksekusi konkuren (secara bersama) yang melibatkan banyak transaksi
- Untuk memastikan integritas data tetap terjaga dan transaksi dapat berjalan dengan baik, maka sistem database harus menjaga properti – properti yang terdapat di dalam transaksi.
- Properti – properti di dalam transaksi ini dikenal dengan istilah Properti ACID (Atomicity, Consistency, Isolation, Durability).
- Properti ACID memastikan perilaku yang dapat diprediksi dan menguatkan peran transaksi sebagai konsep all or nothing yang didesain untuk mengurangi manajemen load ketika ada banyak variabel.
- Atomicity. Transaksi dilakukan sekali dan sifatnya atomik, artinya merupakan satu kesatuan tunggal yang tidak dapat dipisah – laksanakan pekerjaannya sampai selesai atau tidak sama sekali
- Consistency. Jika basis data awalnya dalam keadaan konsisten maka pelaksanaan transaksi sendirinya juga harus meninggalkan basis data tetap dalam status konsisten
- Isolation. Isolasi memastikan bahwa secara bersamaan eksekusi transaksi terisolasi dari yang lain
- Durability. Begitu transaksi telah dilaksanakan (di-commit) maka perubahan yang dilakukan tidak akan hilang dan tetap terjaga (durable), sekalipun ada kegagalan sistem.
- read(X), mentransfer data item X dari database ke local buffer yang dimiliki oleh transaksi yang mengeksekusi operasi pembacaan (read).
- write(X), mentransfer data item X dari local buffer dari aksi transaksi yang mengeksekusi perintah penulisan kembali ke database (write)
- Contoh implementasi transaksi, misalkan transaksi transfer uang sebesar $50 dari rekening A ke rekening B, maka transaksi tersebut dapat didefinisikan sebagai berikut:
1. read(A)
2. A := A – 50
3. write(A)
4. read(B)
5. B := B + 50
6. write(B)
Berdasarkan contoh, ditinjau dari kebutuhan properti ACID-nya, maka :
Kebutuhan Konsistensi (Consistency
Requierements) :
Total jumlah rekening A + B
harus tetap, tidak berubah setelah proses eksekusi transaksi.
Kebutuhan Atomik (Atomicity
Requeirements) :
Jika transaksi gagal diantara tahap
ke-3 dan tahap ke-6, maka sistem harus memastikan bahwa perubahan yang terjadi
tidak disimpan ke database, atau akan terjadi inkonsistensi data. Dengan kata
lain, selesaikan transaksi atau tidak sama sekali.
Kebutuhan Durabilitas (Durability)
:
Pada saat eksekusi transaksi
selesai dilaksanakan, dan user yang melakukan transaksi sudah diberitahu bahwa
transfer yang dilakukannya sukses, maka harus dipastikan bahwa tidak ada
kesalahan sistem yang akan terjadi yang menyebabkan hilangnya data yang
berkaitan dengan proses transfer tersebut .
Kebutuhan Isolasi (Isolation) :
Jika diantara tahap ke-3 dan
tahap ke-6 ada transaksi lain yang disisipkan, maka akan dapat menyebabkan
inkonsistensi terhadap database (jumlah rekening A+B bisa jadi berkurang dari
yang seharusnya). Untuk menghindari hal itu, maka transaksi bisa dieksekusi
secara serial.
Tapi walaubagaimanapun, eksekusi
banyak transaksi secara bersama – sama (konkuren) memiliki banyak keuntungan.
State Transaksi
·
Supaya
transaksi benar – benar sukses dipenuhi (successfully completion), maka
sebuah transaksi harus berada di dalam salah satu state sebagai berikut :
§
Active
§
Partially committed
§
Failed
§
Aborted
§
Commited
·
State
tersebut dapat direpresentasikan dalam model transaksi abstrak yang sederhana
·
Active
merupakan initial
state, transaksi tetap berada pada state ini pada saat proses eksekusi
- Partially Committed
Setelah
statement final telah dieksekusi
·
Failed
Setelah ditelusuri bahwa eksekusi
normal tidak dapat diproses kembali
·
Aborted
Setelah transaksi di-rolled back dan
database direstore ke kondisi awal sebelum transaksi dimulai
·
Committed
Setelah
transaksi sukses dipenuhi
·
Diagram
state yang menggambarkan proses transaksi :
·
Transaksi
dimulai dalam keadaan state active. Pada saat menyelesaikan statement
terakhirnya, transaksi masuk ke kondisi state partially commited.
·
Dalam
keadaan state tersebut, transaksi telah selesai dieksekusi, tapi masih mungkin
untuk dibatalkan (aborted) hanya jika transaksi memasuki state aborted,
karena output yang sesungguhnya masih berada di tempat penyimpanan
sementara/main memory, dan karenanya kesalahan pada hardware dapat mempengaruhi
kesuksesan dari penyelesaian transaksi
·
Sistem
Basis Data kemudian menuliskan informasi yang dibutuhkan (write) ke
dalam disk, bahwa perubahan yang dilakukan oleh transaksi dapat dibuat kembali
pada saat sistem restart jika terjadi kegagalan pada sistem.
·
Pada
saat informasi terakhir dituliskan, maka transaksi masuk ke kondisi state commited.
·
Sebuah
transaksi akan memasuki kondisi state failed jika setelah sistem
melakukan pemeriksaan, transaksi tidak dapat lagi diproses dengan eksekusi
normal (misal karena kerusakan hardware atau kesalahan logika).
·
Jika
berada di dalam kondisi tersebut, maka transaksi harus di rolled back, dan
kemudian selanjutnya memasuki kondisi state aborted (pembatalan
transaksi).
·
Pada
titik ini, sistem memiliki dua opsi, ulangi transaksi (restart the
transaction) dan hapus transaksi (kill the transaction)
·
Opsi
pada state aborted :
o
Sistem
dapat mengulang transaksi (restart the transaction), tapi hanya jika
transaksi dibatalkan yang bisa terjadi karena adanya kerusakan software atau
hardware yang tidak diciptakan melalui logika internal dari transaksinya.
o
Sistem
dapat menghapus transaksi (kill the transaction). Biasanya terjadi
karena adanya kesalah logika internal yang dapat diperbaiki hanya dengan
menulis kembali program aplikasinya, atau karena inputan yang tidak baik, atau
karena data yang diinginkan tidak ada di database.
Implementasi Atomik (Atomicity)
dan Durabilitas (Durability)
·
Komponen
manajemen recovery dari sistem basis data dapat mendukung atomisitas dan
durabilitas dengan berbagai macam skema.
·
Salah
satu skema yang dikenal adalah shadow copy,
·
Shadow copy adalah
salah satu skema yang digunakan untuk mendukung atomisitas dan durabilitas pada
transaksi dengan membuat salinan / copy dari database yang ada.
Skema shadow-database :
·
Mengasumsikan
bahwa hanya satu transaksi yang aktif dalam waktu bersamaan (simpel tapi tidak
efisien).
·
Mengasumsikan
bahwa database secara sederhana merupakan sebuah file di dalam disk.
·
Sebuah
pointer yang bernama db-pointer digunakan di dalam disk yang selalu
mengarah ke salinan konsisten database tersebut
·
Sebelum
transaksi mengupdate database, salinan untuk database tersebut dibuat terlebih
dahulu sepenuhnya
·
Skema shadow-database :
·
Asumsi
transaksi tidak gagal
·
Berguna
untuk teks editor, tapi tidak efisien untuk database berukuran besar
Eksekusi Konkurensi
·
Pada
eksekusi konkurensi, banyak transaksi dimungkinkan untuk diproses secara
bersama – sama dalam suatu sistem.
·
Memperbolehkan
banyak transaksi untuk mengupdate data secara konkuren akan menyebabkan
beberapa komplikasi dengan konsistensi data.
·
Untuk
memastikan bahwa konsistensi tetap terjaga dengan baik pada eksekusi konkuren,
membutuhkan usaha yang lebih kuat. Akan lebih mudah jika transaksi berjalan
secara serial.
·
Keuntungan
konkurensi :
o Meningkatkan utilitas disk dan prosesor
o Mengurangi rata – rata waktu respon transaksi
·
Dalam
konkurensi dikenal dengan konsep penjadwalan (schedule) yang akan
membantu mengidentifikasi eksekusi agar konsistensi datanya tetap terjaga.
·
Sistem
Basis Data harus mengontrol interaksi diantara transaksi konkuren supaya
transaksi – transaksi tersebut tidak menghancurkan konsistensi basis datanya
(data menjadi tidak konsisten).
Eksekusi Konkurensi – Schedule
· Penjadwalan / Schedule merupakan urutan yang mengindikasikan urutan
kronologis instruksi yang mana dari transaksi konkuren yang akan
dieksekusi.
· Sebuah jadwal merupakan bagian dari suatu transaksi yang harus
terdiri dari semua instruksi yang ada di dalamnya.
· Sebuah jadwal harus menjaga urutan instruksi yang muncul di setiap
transaksi.
· Misal T1 adalah transaksi transfer $50 dari A ke B, dan
T2 adalah transfer 10% dari jumlah rekening A ke B. Penjadwalan
berikut adalah pada transaksi serial, dimana T1 dulu yang
diselesaikan baru diikuti oleh T2
· Contoh penjadwalan selanjutnya, dengan transaksi yang sama, tetapi
dalam bentuk transaksi konkurensi, tapi ekivalen dengan penjadwalan
sebelumnya.
· Pada contoh penjadwalan yang pertama dan yang kedua, jumlah
rekening A + B sebelum dan sesudah transaksi sama, tapi tidak dengan
contoh penjawalan konkurensi berikut :
Serializability
· Sistem
basis data harus dapat mengontrol eksekusi konkurensi dari suatu transaksi
untuk memastikan database tetap terjaga konsistensinya.
· Asumsi
dasar, bahwa setiap transaksi harus tetap menjaga konsistensi database.
· Eksekusi
secara serial pada suatu transaksi dapat menjaga database tetap konsisten.
· Sebuah
jadwal (yang mungkin konkuren), serializable jika setara dengan penjadwalan
secara serial. Pada bagian ini ada dua bentuk ekivalensi penjadwalan (Schedule
Equivalence) : Conflict dan View Serializability.
· Pada
serializability kita abaikan operasi selain dari instruksi read dan write,
serta diasumsikan bahwa transaksi dapat melakukan perhitungan terhadap data di
dalam buffer lokal diantara instruksi read dan write.
Conflict Serializability
·
Instruksi
Ii dan Ij masing – masing dari transaksi Ti
dan Tj , konflik jika dan hanya jika ada beberapa item
data yang sama (Q) diakses secara bersama – sama baik oleh Ii dan
Ij , serta setidaknya salah satu dari instruksi melakukan
operasi write (Q).
1.
Jika
Ii = read(Q)
dan Ij = read(Q), maka Ii dan Ij
tidak konflik
2.
Jika
Ii = read(Q)
dan Ij = write(Q), maka Ii dan Ij
konflik
3.
Jika
Ii = write(Q)
dan Ij = read(Q), maka Ii dan Ij
konflik
4.
Jika
Ii = write(Q)
dan Ij = write(Q), maka Ii dan Ij
konflik
·
Secara
intuitif, konflik diantara Ii dan Ij memaksakan
perintah logika temporal diantara keduanya.
·
Jika
Ii dan Ij merupakan instruksi dari transaksi berbeda
dan tidak konflik, maka urutan instruksi Ii dan Ij dapat ditukar sehingga
menghasilkan jadwal baru dengan hasil yang tetap sama.
·
Jika
jadwal S dapat ditransformasikan menjadi jadwalan S’oleh serangkaian pertukaran
instruksi yang non-konflik, maka bisa dikatakan S dan S’ adalah conflict
equivalent.
·
Bisa
dikatakan bahwa jadwal S adalah conflict serializable jika conflict equivalent terhadap penjadwalan
serial.
·
Contoh
penjadwalan yang tidak conflict serializable
·
Penjadwalan
3 di bawah bisa ditransformasikan ke penjadwalan 1, penjadwalan serial dimana T2
diikuti T1 , dengan
serangkaian penukaran instruksi yang tidak konflik. Oleh karena itu
penjadwalan di bawah ini conflict serializability
View Serializability
·
Misalkan
S dan S’ adalah dua jadwal dengan serangkaian transaksi yang
sama. S dan S’ adalah view equivalent.
·
S dan S’ adalah
view equivalent jika memenuhi kondisi sebagai berikut :
1.
Untuk
masing – masing data item Q , jika transaksi Ti membaca
inisialisasi nilai pada Q di dalam jadwal S, maka transaksi Ti
yang ada di jadwal S’ juga harus membaca inisialisasi nilai pada Q.
2.
Untuk
masing – masing data item Q, jika transaksi Ti mengeksekusi read(Q) di dalam
jadwal S, dan jika nilai yang dihasilkan oleh operasi write(Q) dieksekusi
oleh transaksi Tj , maka operasi read(Q) pada
transaksi Ti yang harus ada di jadwal S‘ juga membaca
nilai Q yang dihasilkan oleh operasi write(Q) yang sama pada transaksi Tj
3.
Untuk
masing – masing data item Q, transaksi yang sampai ke tahap akhir
operasi write(Q) di dalam jadwal S
·
Seperti
yang terlihat, view serializability juga dilihat berdasarkan pada operasi read
dan write saja
·
Sebuah
jadwal S adalah view seralizable , setara dengan penjadwalan serial.
·
Setiap
penjadwalan conflict serializable juga view serializable
·
Penjadwalan
di bawah ini (penjadwalan 9 di text book) adalah penjadwalan yang view
serializable tapi tidak conflict serializable
·
Penjadwalan
di bawah (penjadwalan 9 di text book) menghasilkan outcome yang sama sebagai
jadwal serial (T1, T2)
Recoverability
·
Recoverable Schedule – Jika transaksi Tj membaca sebuah item data yang sebelumnya
ditulis oleh transaksi Ti , maka operasi commit Ti muncul sebelum operasi commit Tj
.
·
Jadwal
berikut (jadwal 11 di text book) tidak recoverable jika T9 commit
segera setelah read
·
Jika
T8 dibatalkan, maka T9 bisa jadi akan membaca state
database inkonsisten. Maka dengan demikian database harus memastikan bahwa
jadwal dapat dipulihkan jika terjadi sesuatu hal.
·
Cascading Rollback – kesalahan pada satu transaksi yang yang dapat berpengaruh pada
serangkaian transaksi lainnya sehingga keseluruhan transaksi akan di-rollback.
·
Misalkan
pada penjadwalan berikut dimana belum ada transaksi yang di-commit, sehingga
jika terjadi masalah bisa dipulihkan
·
Jika
T10 transaksinya fail, maka T11 dan T12 juga
harus di rollback. Jika tidak demikian, maka akan menyebabkan banyaknya
pekerjaan yang tidak akan terselesaikan.
·
Cascadeless Schedule – cascading rollback tidak dapat terjadi, untuk setiap pasang transaksi
Ti dan Tj dimana Tj membaca sebuah item data
yang sebelumnya ditulis oleh Ti
dan operasi commit pada Ti muncul sebelum operasi read pada Tj.
·
Setiap
cascadeless schedule juga dapat dipulihkan (recoverable);
Implementasi Isolasi
·
Jadwal
harus conflict atau view serializable, dan recoverable, demi terjaganya
konsistensi database dan juga sebaiknya cascadeless.
·
Sebuah
kebijakan dimana hanya satu transaksi yang dapat dieksekusi dalam satu waktu
yang menghasilkan penjadwalan serial, tapi minim konkurensi.
·
Beberapa
skema hanya mengijinkan jadwal conflict-serializable untuk di-generate, dimana
yang skema lainnya ada yang memungkinkan jadwal view-serializable yang tidak
conflict-serializable.
Definisi Transaksi di SQL
·
DML
(Data Manipulation Language) harus menyertakan sebuah konstruksi untuk
menspesifikasikan serangkaian aksi yang meliputi suatu transaksi.
·
Di
dalam SQL, transaksi dimulai secara implisit.
·
Transaksi
di SQL diakhiri oleh salah satu dari statement sebagai berikut :
·
commit work - commit
transaksi yang sedang berlangsung dan memulai transaksi yang baru
·
rollback work – pembatalan terhadap transaksi yang sedang berlangsung
Level Konsistensi di SQL 92
· Serializable
– default
· Repeatable
read – hanya
record yang dicommit yang dibaca, pembacaan secara berulang untuk record
yang sama harus dapat menghasilkan nilai yang sama.Bagaimanapun, transaksi mungkin tidak serializable
- bisa menemukan beberapa record yang ditambahkan oleh suatu transaksi tapi
tidak menemukan record lainnya.
· Read
commited – hanya
record yang dicommit yang akan dibaca , tetap commit untuk pembacaan
record secara berulang yang menghasilkan nilai yang berbeda.
· Read uncommited – record yang tidak dicommit dibaca
Testing Serializability
·
Pada
saat mendesain skema kontrol konkurensi, kita harus tunjukan bahwa jadwal yang
dibuat oleh skema tersebut adalah serializable.
·
Terdapat
metode simpel dan efisien untuk menentukan conflict serializability dari suatu
jadwal.
·
Misalkan
sebuah jadwal S. Kita dapat membuat suatu grafik langsung yang diberi nama
grafik preseden (presedence graph).
·
Grafik
preseden terdiri dari sepasang G = (V,E), dimana V adalah serangkaian simpul
dan E adalah serangkaian tepian / busur.
·
Serangkaian
simpul terdiri dari semua transaksi yang berperan serta di dalam penjadwalan.
Serangkaian tepian / busur terdiri dari semua bentuk Ti -> Tj
untuk masing – masing dari ketiga kondisi berikut :
1.
Ti
eksekusi write(Q) sebelum Tj eksekusi read(Q)
2.
Ti
eksekusi read(Q) sebelum Tj eksekusi write(Q)
3.
Ti
eksekusi write(Q) sebelum Tj eksekusi write(Q)
·
Jika
bentuk Ti -> Tj ada di dalam grafik preseden, maka di
setiap jadwal S’ serial yang ekivalen ke jadwal S, Ti harus muncul
sebelum Tj
·
Sebagai
contoh, grafik preseden untuk penjadwalan 1 digambarkan di (a), terdiri dari
bentuk dasar T1 -> T2 , dimana semua instruksi T1
dieksekusi sebelum instruksi pertama pada T2 dieksekusi. Begitu juga
sebaliknya untuk contoh yang digambarkan di (b).
·
Grafik
preseden untuk jadwal 4, terdiri dari bentuk T1 -> T2
, karena T1 mengeksekusi read(A) sebelum T2 mengeksekusi
write(A). Grafik ini jg terdiri dari bentuk T2 -> T1 ,
karena T2 mengeksekusi read(B) sebelum T1 eksekusi
write(B).
·
Jika
grafik preseden untuk S membentuk suatu lingkaran, maka jadwal S tidak conflict
serializable. Jika sebaliknya, maka jadwal S conflict serializable
0 komentar:
Post a Comment