Urusan Pajak, dan Konsultan Akunting

Silahkan Kunjungi Situs Kami di www.bristoltaxservice.com

Rabu, 27 Februari 2008

Perlu di Baca

Semua DBMS untuk data skala besar memfasilitasi konkurensi, yakni akses konkuren (serempak) terhadap DBMS atau instance.

Dalam sebuah program aplikasi, sekumpulan operasi pada suatu basis data seringkali tampak sebagai satu operasi di mata pemakainya. Sebagai contoh, proses transfer uang antar rekening bank dari satu sisi pemakai tampak sebagai satu proses, namun sesungguhnya proses itu terdiri atas beberapa operasi pada basis data.

Dalam kasus semacam ini harus di pastikan bahwa seluruh operasi dijalankan dengan benar atau jika terdapat kesalahan maka tak satupun operasi dijalankan. Dengan demikian tidak boleh terjadi bahwa rekening pengirim sudah didebet namum rekening penerima tidak dikredit.

Kumpulan operasi yang membentuk satu unit kerja logis seperti itu disebut transaksi. Tanggungjawab sistem basis data dalam transaksi adalah:

  1. memastikan eksekusi transaksi berjalan benar atau tidak berjalan sama sekali
  2. mengelola eksekusi transaksi yang serempak agar tidak terjadi inkonsistensi data

1. Pengertian Transaksi

Sebuah transaksi adalah suatu unit eksekusi program, yang mengakses serta mungkin mengubah (update) data. Biasanya transaksi diinisiasi (diawali) oleh program pemakai yang ditulis dengan DBMS atau bahasa pemrograman tertentu (misal SQL, C. C++, dll), yang ditandai dengan perintah begin transaction dan end transaction. Transaksi terdiri atas seluruh operasi yang terdapat di antara perintah begin transaction dan end transaction tersebut.

Untuk menjamin integritas data, suatu sistem basis data harus menjaga agar sifat ACID (Atomicity, Consistency, Isolation, Durability) dipenuhi oleh transaksi. Sifat ACID meliputi:

§ Atomicity: Dalam setiap transaksi, hanya ada 2 pilihan:

1. seluruh operasi dikerjakan dengan benar atau

2. tidak dikerjakan sama sekali

§ Consistency: Eksekusi transaksi dalam isolasi menjamin konsistensi basis data. Isolasi artinya tidak ada transaksi lain yang dieksekusi bersamaan

§ Isolation: Meskipun beberapa transaksi dapat dieksekusi bersamaan (serempak) namun sistem harus menjamin agar untuk setiap pasang transaksi Ti dan Tj, jika dilihat dari sisi Ti ada dua kemungkinan yang harus dipilih salah satu:

1. Tj harus selesai dieksekusi dulu sebelum Ti dieksekusi atau

2. Tj dieksekusi setelah Ti selesai dieksekusi

§ Durability: Setelah transaksi berhasil dieksekusi dengan lengkap, perubahan yang dikenakan terhadap basis data bersifat tetap, meskipun misalnya ada kegagalan sistem.

Contoh sifat ACID:

§ Terdapat sebuah sistem perbankan yang memiliki sejumlah rekening dan sejumlah transaksi yang mengakses dan mengupdate rekening tersebut. Transaksi mengakses data melalui dua operasi:

o read(X), yang mentransfer data X dari basis data ke buffer lokal yang mengeksekusi perintah read.

o write(X), yang mentransfer data X dari buffer lokal yang mengeksekusi perintah read ke basis data.

Sebagai catatan, untuk mempermudah pengertian diasumsikan bahwa operasi write akan langsung mengupdate basis data. Dalam kenyataan sebenarnya tidak demikian.

Misal Ti adalah transaksi untuk mentransfer uang Rp 50.000,00 dari rekening A ke rekening B. Transaksi ini dapat didefinisikan sebagai berikut:

Ti: read(A);

A := A – 50000;

write(A);

read(B);

B := B + 50000;

write(B);

Berikut akan ditinjau sifat ACID dari transaksi tersebut:

Consistency :

§ Yang dimaksud dengan konsistensi di sini adalah bahwa jumlah A dan B tidak berubah akibat eksekusi transaksi. Tanpa sifat konsistensi, uang dapat dibuat atau dihilangkan lewat transaksi.

§ Menjamin konsistensi untuk setiap transaksi adalah tanggungjawab dari programmer yang membuat program transaksi. Tugas programmer dapat terbantu dengan adanya fasilitas integrity constraint.

Atomicity :

§ Misal, sebelum transaksi saldo rekening A adalah Rp 100.000,00 sedangkan saldo rekening B adalah Rp 200.000,00. Andaikan selama eksekusi transaksi Ti, terjadi kegagalan yang menyebabkan eksekusi Ti tidak dapat diselesaikan secara sempurna. Kegagalan dapat disebabkab oleh listrik, hardware, atau software. Misal kegagalan terjadi setelah operasi write(A) sebelum operasi write(B). Akibatnya saldo rekening A menjadi Rp 95.000,00 dan B menjadi Rp 200.000,00. Jadi jumlah A + B mengalami perubahan.

§ Dalam kasus ini, akibat kegagalan sistem, status (keadaan) sistem tidak lagi mencerminkan keadaan yang sesungguhnya dalam dunia nyata yang harus direkam oleh sistem. Keadaan ini disebut keadaan inkonsisten (status inkonsisten).

§ Sekalipun tidak ada kegagalan, selama proses transaksi sedang berlangsung, pasti sistem akan pernah mengalami keadaan pada status inkonsisten. Pada transaksi yang sukses, status inkonsisten akan berubah menjadi konsisten pada akhir transaksi di mana rekening A menjadi Rp 95.000,00 dan rekening B menjadi Rp 250.000,00

§ Yang menjadi persoalan, sistem harus bisa menjamin agar jika transaksi mengalami kegagalan, maka status inkonsisten tidak boleh dipertahankan tetapi harus dikembalikan pada status konsisten di awal transaksi. Jadi bila transaksi gagal maka rekening A harus tetap Rp 100.000,00 dan rekening B tetap Rp 200.000,00. Dengan kata lain, sifat atomicity terpenuhi jika semua proses dalam transaksi dijalankan dengan berhasil atau tidak satupun proses dijalankan.

§ Untuk mengimplementasikan sifat atomicity ini maka sistem basis data harus menjaga jejak (track) nilai-nilai lama pada suatu transaksi yang menjalankan operasi write. Jika transaksi tidak dapat menyelesaikan eksekusinya dengan lengkap, maka sistem basis data harus mengembalikan nilai lama tersebut agar diperoleh kesan bahwa transaksi belum terjadi.

§ Tanggungjawab untuk menjamin atomicity adalah tanggungjawab DBMS yang biasanya memiliki komponen yang disebut komponen manajemen transaksi (transaction-management component).

Durability :

§ Jika eksekusi transaksi sudah berjalan sukses dan pemakai sudah diberi tahu bahwa transaksi berhasil dijalankan, sistem harus menjamin bahwa jika terdapat kegagalan sistem maka tidak akan ada data yang hilang.

§ Untuk menjamin durability maka dapat dilakukan salah satu dari hal berikut:

1. Update yang dilakukan oleh transaksi dituliskan di media penyimpan sekunder (disk) sebelum transaksi selesai lengkap

2. Informasi tentang update yang dilakukan oleh transaksi dan dituliskan di disk memungkinkan basis data untuk merekonstruksi kembali proses update jika sistem basis data di-restart akibat kegagalan sistem.

§ Menjamin durability adalah tanggungjawab komponen DBMS yang disebut komponen manajemen pemulihan (recovery-management system). Komponen ini terkait erat dengan komponen manajemen-transaksi.

Isolation :

  • Meskipun sifat consistency dan atomicity sudah dipenuhi, namun jika ada beberapa transaksi dieksekusi bersama (serempak) maka hasilnya mungkin akan mengakibatkan kesalahan.
  • Pada kasus di atas (bagian atomicity), jika pada titik di mana status transaksi sedang inkonsisten (jumlah A + B tidak sama dengan jumlah awal) ada transaksi lain yang mengupdate saldo A dan B maka proses update akan mendasarkan pada nilai A dan B yang keliru.
  • Untuk mengatasi masalah itu, cara paling aman adalah dengan mengeksekusi transaksi secara serial (berurutan). Namun seringkali ada kasus di mana konkurensi transaksi (transaksi serempak) dibutuhkan untuk mempercepat proses.
  • Sifat isolasi menjamin bahwa eksekusi serempak harus menghasilkan status sistem yang ekuivalen dengan status sistem jika transaksi dieksekusi satu per satu. Tanggungjawab untuk menjamin sifat isolasi ini dipegang oleh komponen manajemen konkurensi (concurrent-management component).

2. Status Transaksi

Suatu transaksi yang tidak dapat dieksekusi secara lengkap disebut aborted. Berdasarkan sifat atomicity, transaksi aborted tidak akan memiliki akibat apapun pada basis data (basis data tidak berubah). Jadi perubahan apapun yang telah dilakukan transaksi tersebut pada basis data harus dibatalkan. Jika transaksi aborted pernah melakukan perubahan dan kemudian perubahan itu dibatalkan, transaksi itu dikatakan telah rolled back.

Sebaliknya transaksi yang telah dieksekusi secara lengkap dan sukses disebut committed. Perubahan pada basis data akibat transaksi yang telah committed akan bersifat tetap pada basis data tersebut. Artinya, jika ada kegagalan sistem, maka perubahan tidak boleh terhapus.

Jika transaksi telah committed maka tidak bisa dibatalkan. Yang bisa dilakukan hanya mengeksekusi compensating transaction (transaksi pengganti). Misal jika suatu transaksi mengakibatkan penambahan nilai sebanyak 50, maka transaksi penggantinya harus mengakibatkan pengurangan nilai sebanyak 50. Tidak semua aplikasi memanfaatkan transaksi pengganti. Oleh karena itu pemakaian transaksi pengganti ini biasanya diserahkan kepada programmer jika menginginkannya.

Mengingat bahwa suatu transaksi dapat berada pada berbagai keadaan sepanjang sistem berjalan, maka dikenal istilah status transaksi (transaction state) yang digambarkan dalam diagram status (state diagram) berikut:

Gambar 1. Diagram status dari suatu transaksi

Sumber Silberschatz (2002, hal 570)

Status

Keterangan

Active

Keadaan awal; transaksi berada dalam keadaan ini selama eksekusi berjalan

Partially committed

Setelah statement terakhir dieksekusi

Failed

Setelah ditemukan bahwa eksekusi normal tidak bisa dilanjutkan

Aborted

Setelah transaksi rolled back dan basis data telah dikembalikan ke keadaan sebelum transaksi

Committed

Setelah eksekusi lengkap berhasil

Transaksi dikatakan committed jika sudah masuk committed state. Transaksi dikatakan aborted jika sudah masuk aborted state. Jika tidak committed atau aborted maka dikatakan terminated.

Jika transaksi memasuki failed state, maka transaksi harus rolled back. Maka transaksi akan masuk pada aborted state. Jika masuk aborted state, terdapat dua pilihan:

§ Transaksi dapat di–restart sebagai transaksi baru

§ Transaksi dapat di-kill

3. Implementasi Atomicity dan Durability

Ada banyak cara (skema) yang dapat dipergunakan oleh komponen manajemen pemulihan (recovery-management component) dari suatu sistem basis data untuk mengimplementasikan sifat atomicity dan durability. Salah satu cara yang paling sederhana adalah dengan menggunakan teknik/skema shadow-copy. Dalam teknik ini diasumsikan bahwa basis data adalah sebuah file data pada media penyimpan (disk). Sebuah pointer yang disebut db-pointer dibuat untuk menunjuk ke copy basis data yang saat ini sedang berlaku.

Dalam teknik ini, suatu transaksi yang akan meng-update basis data terlebih dahulu harus membuat copy lengkap atas basis data tersebut. Seluruh update kemudian diterapkan pada copy tersebut, sedangkan file data aslinya yang disebut shadow copy, dibiarkan tetap seperti semula (tidak diubah). Jika suatu saat transaksi dibatalkan (aborted), sistem dengan mudah langsung menghapus copy baru dan file data asli dipertahankan.

Sementara jika transaksi berjalan lengkap dan committed, langkah yang dilakukan adalah sebagai berikut:

1. Sistem operasi mengecek apakah seluruh copy basis data yang baru telah disimpan dalam media penyimpan sekunder (disk)

2. Sistem basis data meng-update pointer db-pointer agar menunjuk ke copy basis data yang baru menjadi copy basis data yang saat ini berlaku.

3. Copy basis data yang lama dihapus.

Gambar 2. berikut menggambarkan langkah-langkah tersebut. Transaksi dkatakan committed jika db-pointer yang baru telah ditulis dalam disk.

Gambar 2. Teknik shadow-copy dalam implementasi atomicity dan durability

Sumber Silberschatz (2002, hal. 571)

4. Eksekusi Serempak

Sebagaimana sudah disinggung dalam sub pengertian transaksi di atas, eksekusi serempak beberapa transaksi sekaligus dapat menimbulkan banyak masalah. Oleh karenanya, disarankan sedapat mungkin eksekusi transaksi dilakukan secara serial (berurutan satu per satu). Akan tetapi, dalam beberapa kasus, eksekusi serempak ini dipilih karena pertimbangan berikut:

1. Meningkatkan throughput dan penggunaan sumber daya:

* Suatu transaksi terdiri atas beberapa proses. Beberapa proses mungkin melibatkan aktivitas Input/Output (I/O), sementara beberapa proses lain mungkin melibatkan aktivitas CPU. CPU dan disk pada komputer dapat beroperasi paralel (serempak). Oleh karena itu, sifat CPU dan disk yang dapat dioperasikan paralel ini dapat dimanfaatkan untuk menjalankan beberapa transaksi sekaligus. Ketika operasi read/write pada disk sedang dijalankan, CPU dapat melakukan hal lainnya. Dengan demikian throughput dari sistem akan meningkat. Throughput adalah jumlah transaksi yang dapat dieksekusi pada suatu waktu tertentu. Selain itu, penggunaan disk dan CPU dapat ditingkatkan sehingga tidak menganggur (idle).

2. Mengurangi waktu tunggu:

* Dalam suatu sistem mungkin sekali terdapat banyak transaksi, panjang maupun pendek. Jika transaksi dijalankan secara serial, kadang suatu transaksi yang pendek harus menunggu selesainya suatu transaksi panjang diselesaikan dulu. Akibatnya waktu tunggu suatu transaksi menjadi lama. Hal ini dapat ditingkatkan dengan menjalankan secara serempak transaksi-transaksi yang beroperasi pada basis data yang berbeda. Dengan demikian waktu tunggu transaksi dapat diperpendek dan rata-rata waktu tanggap juga dikurangi. Rata-rata waktu tanggap adalah rata-rata waktu suatu transaksi diselesaikan.

Sistem basis data perlu mengendalikan interaksi antar transaksi-transaksi yang serempak untuk mencegah terjadinya inkonsistensi basis data. Hal ini dilakukan melalui berbagai macam mekanisme atau cara yang disebut skema kendali-konkurensi (control-concurency scheme).

Daftar Pustaka:

Silberschatz, Abraham, et. al. Database System Concept, New York : Mc. Graw Hill 2002. p. 565-576

JJJJJ

Tidak ada komentar: