1.1 Pambuka
Lan saiki kesenengan diwiwiti - teori babagan cara transaksi. Kepiye carane supaya sistem bisa digunakake nalika sampeyan ngganti data sing padha ing benang sing beda? Utawa sampeyan pengin nglakokake siji transaksi ing liyane? Kita bakal miwiti goleki jawaban kanggo pitakonan kasebut kanthi nyinaoni pamisahan transaksi ...
Tingkat isolasi transaksi minangka nilai kondisional sing nemtokake manawa, minangka asil saka eksekusi transaksi paralel kanthi logis ing DBMS, data sing ora konsisten diidini. Skala tingkat isolasi transaksi ngemot sawetara nilai, peringkat saka paling ngisor nganti paling dhuwur; tingkat isolasi sing luwih cocog karo konsistensi data sing luwih apik, nanging panggunaan bisa nyuda jumlah transaksi podo fisik.
Kosok baline, tingkat isolasi sing luwih murah ngidini transaksi luwih paralel, nanging nyuda akurasi data. Mangkono, milih tingkat isolasi transaksi sing digunakake, pangembang sistem informasi, nganti sawetara, nyedhiyakake pilihan antarane kacepetan kerja lan njamin konsistensi dijamin data sing ditampa saka sistem.
Masalah akses bebarengan nggunakake transaksi
Nalika transaksi dieksekusi kanthi paralel, masalah ing ngisor iki bisa uga:
- nganyari ilang - yen siji pamblokiran data diganti bebarengan dening transaksi beda, kabeh owah-owahan ilang, kajaba sing pungkasan;
- "Reget" maca (eng. Dirty diwaca) - maca data ditambahake utawa diganti dening transaksi, kang salajengipun ora bakal dikonfirmasi (mbalek maneh);
- non-repeatable read (eng. non-repeatable read) - nalika maca maneh ing transaksi sing padha, data sing sadurunge diwaca diganti;
- phantom maca - siji transaksi sak eksekusi kaping pirang-pirang milih akeh larik miturut kritéria padha. Transaksi liyane ing antarane njupuk iki nambahake larik utawa ngowahi kolom sawetara larik sing digunakake ing kritéria njupuk transaksi pisanan lan rampung kanthi sukses. Akibaté, bakal dadi pilihan sing padha ing transaksi pisanan menehi set larik beda.
Coba kahanan ing ngendi masalah kasebut bisa kedadeyan.
1.2 Nganyari ilang
Kahanan nalika, nalika siji pamblokiran data diganti bebarengan dening transaksi beda, siji saka owah-owahan ilang.
Upamane ana rong transaksi sing mlaku bebarengan:
Transaksi 1 | Transaksi 2 |
---|---|
UPDATE tbl1 SET f2=f2+20 WHERE f1=1; | UPDATE tbl1 SET f2=f2+25 WHERE f1=1; |
Ing transaksi loro kasebut, nilai lapangan f2 diganti, yen wis rampung, nilai lapangan kudu ditambah 45. Ing kasunyatan, urutan tumindak ing ngisor iki bisa kedadeyan:
- Loro transaksi bebarengan maca kahanan saiki lapangan. Konkurensi fisik sing tepat ora dibutuhake ing kene, cukup yen operasi maca kapindho supaya rampung sadurunge transaksi liyane nulis asile.
- Loro-lorone transaksi ngetung nilai lapangan anyar kanthi nambahake 20 lan 25, mungguh, menyang nilai sing wis diwaca sadurunge.
- Transaksi nyoba nulis asil petungan bali menyang lapangan f2. Amarga ora bisa nindakake rong nulis ing wektu sing padha, nyatane salah sawijining operasi nulis bakal ditindakake sadurunge, sing liyane mengko. Operasi nulis kapindho bakal nimpa asil sing pisanan.
Akibaté, nilai lapangan f2, sawise rampung loro transaksi, bisa nambah ora 45, nanging 20 utawa 25, yaiku, salah sawijining transaksi sing ngganti data bakal "ilang".
1.3 "Reget" maca
Data maca sing ditambahake utawa diowahi dening transaksi sing mengko bakal gagal (rollback).
Upaminipun kita duwe rong transaksi sing dibukak dening aplikasi beda sing nglakokaké statement SQL ing ngisor iki:
Transaksi 1 | Transaksi 2 |
---|---|
UPDATE tbl1 SET f2=f2+1 WHERE f1=1; | |
PILIH f2 saka tbl1 WHERE f1=1; | |
KARYA ROLLBACK; |
Ing transaksi 1, nilai kolom f2 diganti, banjur ing transaksi 2, nilai kolom iki dipilih. Sawise kuwi, transaksi 1 digulung maneh. Akibate, nilai sing ditampa dening transaksi kapindho bakal beda karo nilai sing disimpen ing database.
1.4 Wacan sing ora bisa diulang
Kahanan nalika, nalika maca maneh ing transaksi sing padha, data sing wis diwaca sadurunge dadi diganti.
Upaminipun kita duwe rong transaksi sing dibukak dening aplikasi beda sing nglakokaké statement SQL ing ngisor iki:
Transaksi 1 | Transaksi 2 |
---|---|
PILIH f2 saka tbl1 WHERE f1=1; | |
UPDATE tbl1 SET f2=f2+3 WHERE f1=1; | |
KOMIT; | |
PILIH f2 saka tbl1 WHERE f1=1; |
Ing transaksi 2, nilai kolom f2 dipilih, banjur ing transaksi 1, nilai kolom f2 diganti. Yen sampeyan nyoba maneh milih nilai saka kolom f2 ing transaksi 2, asil sing beda bakal dipikolehi. Kahanan iki utamané ora bisa ditampa nalika data diwaca supaya bisa ngowahi sebagian lan nulis maneh menyang database.
1.5 Maca "phantoms"
Kahanan nalika, nalika maca bola-bali ing transaksi sing padha, pilihan sing padha menehi set baris sing beda.
Upaminipun ana rong transaksi sing dibukak dening aplikasi beda sing nglakokaké statement SQL ing ngisor iki:
Transaksi 1 | Transaksi 2 |
---|---|
PILIH SUM(f2) saka tbl1; | |
INSERT INTO tbl1 (f1,f2) VALUE(15,20); | |
KOMIT; | |
PILIH SUM(f2) saka tbl1; |
Transaksi 2 nglakokake statement SQL sing nggunakake kabeh nilai lapangan f2. Banjur baris anyar dilebokake ing transaksi 1, nyebabake eksekusi maneh statement SQL ing transaksi 2 ngasilake asil sing beda. Kahanan iki diarani maca hantu (phantom reading). Beda karo maca sing ora bisa diulang amarga asil akses data sing bola-bali diganti ora amarga owah-owahan / pambusakan data kasebut dhewe, nanging amarga muncule data anyar (phantom).