Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Halo kabeh. Vladislav Rodin sesambungan. Saiki aku dadi Pimpinan Kursus kanggo kursus Arsitek Beban Kerja Tinggi ing OTUS lan uga ngajar kursus arsitektur piranti lunak.

Saliyane mulang, kaya sing sampeyan ngerteni, aku nulis materi asli kanggo blog OTUS ing HabrΓ© lan aku pengin pas karo artikel dina iki pas karo peluncuran kursus kasebut. "PostgreSQL", sing saiki mbukak kanggo enrollment.

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Pambuka

Π’ pungkasan wektu kita ngomong bab kasunyatan sing transaksi ing database serves kanggo ngatasi loro masalah: mesthekake toleransi fault lan akses kanggo data ing lingkungan competitive. Kanggo nindakake tugas kasebut kanthi lengkap, transaksi kasebut kudu nduweni sifat ACID. Dina iki kita bakal ngomong kanthi rinci babagan surat kasebut I (isolasi) ing singkatan iki.

Jampel

Isolasi ngrampungake masalah ngakses data ing lingkungan sing kompetitif, kanthi dhasar menehi perlindungan saka kahanan balapan. Saenipun, isolasi tegese serialisasi, yaiku properti sing njamin yen asil nglakokake transaksi kanthi paralel padha kaya yen dieksekusi kanthi urutan. Masalah utama karo properti iki yaiku angel banget kanggo nyedhiyakake teknis lan, minangka asil, nduwe pengaruh sing signifikan ing kinerja sistem. Mulane isolasi asring weakened, nampa risiko anomali tartamtu, kang bakal dibahas ing ngisor iki. Kamungkinan anomali tartamtu sing kedadeyan kanthi tepat nggambarake tingkat isolasi transaksi.

Anomali sing paling misuwur yaiku: maca reged, maca ora bisa diulang, maca phantom, nanging nyatane ana 5 maneh: nulis reged, nganyari kursor ilang, nganyari ilang, maca miring, nulis miring.

Tulisan reged

Inti saka anomali kasebut yaiku transaksi bisa nimpa data sing ora ditindakake.

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Anomali iki mbebayani ora mung amarga data bisa konflik sawise nindakake loro transaksi (kaya ing gambar), nanging uga amarga atomicity dilanggar: amarga kita ngidini data uncommitted bakal ditindih, iku ora cetha carane muter maneh siji transaksi tanpa mengaruhi liyane. .

Anomali bisa diobati kanthi gampang: kita masang kunci menyang rekaman sadurunge miwiti ngrekam, nglarang transaksi liyane ngganti rekaman nganti kunci dibusak.

Reged maca

Maca sing reged tegese maca data sing ora ana gandhengane.

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Masalah muncul nalika tumindak utawa keputusan kudu digawe adhedhasar sampel.

Kanggo mbenerake anomali kasebut, sampeyan bisa masang kunci sing diwaca, nanging iki bakal mengaruhi kinerja. Iku luwih gampang kanggo ngomong yen kanggo transaksi rollback, negara wiwitan data (sadurunge wiwitan ngrekam) kudu disimpen ing sistem. Apa ora maca saka kono? Iku cukup inexpensive sing paling database mbusak reged diwaca minangka standar.

Nganyari ilang

Pembaruan sing ilang tegese nganyari sing ilang, lan terjemahan kasebut kanthi akurat nggambarake inti masalah kasebut:

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Nyatane, asil transaksi T2 dibalik. Kahanan iki bisa didandani kanthi kunci tulis sing eksplisit utawa implisit. Yaiku, kita mung nganyari rekaman, banjur ana kunci implisit, utawa kita nindakake pilih kanggo nganyari, nyebabake kunci maca lan nulis kedadeyan. Wigati dicathet yen operasi kasebut cukup mbebayani: kanthi maca "ora lugu", kita mblokir bacaan liyane. Sawetara database nawakake luwih aman pilih kanggo nuduhake, ngidini data diwaca nanging ora diowahi.

Kursor ilang nganyari

Kanggo kontrol sing luwih apik, basis bisa uga nawakake alat liyane, kayata kursor. Kursor minangka struktur sing ngemot sakumpulan baris lan ngidini sampeyan ngulang. wara-wara cursor_name kanggo select_statement. Isi kursor diterangake dening pilih.

Napa sampeyan butuh kursor? Kasunyatane, sawetara database nawakake kunci ing kabeh cathetan sing dipilih kanthi milih (maca stabilitas), utawa mung ing rekaman sing saiki ana kursor (stabilitas kursor). Kanthi stabilitas kursor, kunci cendhak dileksanakake, sing ngidini kita nyuda jumlah kunci yen kita ngulang sampel data sing akeh. Mulane, anomali nganyari sing ilang diisolasi kanthi kapisah kanggo kursor.

Wacan sing ora bisa diulang

Waca sing ora bisa diulang yaiku nalika nglakokake transaksi kita, 2 maca berturut-turut saka rekaman sing padha bakal nyebabake asil sing beda, amarga transaksi liyane campur tangan ing antarane rong wacan kasebut, ngganti data kita lan setya.

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Kenapa iki malah dadi masalah? Mbayangno yen tujuan transaksi T2 ing gambar yaiku kanggo milih kabeh barang sing regane kurang saka 150 USD. Wong liya nganyari rega dadi $200. Mangkono, saringan sing diinstal ora bisa digunakake.

Anomali iki mandheg nalika interlocks rong fase ditambahake utawa nalika mekanisme MVCC digunakake, sing aku pengin ngrembug kanthi kapisah.

Phantom maca

Phantom minangka maca data sing ditambahake dening transaksi liyane.

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Minangka conto, kita bisa mirsani pilihan sing salah saka produk sing paling murah nalika anomali iki kedadeyan.

Nyingkirake maca phantom wis cukup angel. Pamblokiran reguler ora cukup, amarga kita ora bisa ngalangi barang sing durung ana. Sistem 2PL nggunakake ngunci prediktif, nalika sistem MVCC duwe panjadwal transaksi sing mbalek maneh transaksi sing bisa diganggu dening sisipan. Mekanisme pisanan lan kaloro cukup abot.

Maca miring

Read skew occurs nalika kita bisa karo sawetara tabel, isi kang kudu diganti terus-terusan.

Ayo kita duwe tabel sing makili kiriman lan informasi meta:

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Siji transaksi diwaca saka tabel, sing liyane ngowahi:

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Minangka asil saka transaksi T1, kirim duwe judhul = Good, lan nganyari_by = T2, kang sawetara jenis inconsistency.

Nyatane, iki minangka wacan sing ora bisa diulang, nanging minangka bagean saka sawetara tabel.

Kanggo ndandani iki, T1 bisa ngunci kabeh baris sing bakal diwaca, sing bakal nyegah transaksi T2 saka ngganti informasi kasebut. Ing kasus MVCC, transaksi T2 bakal dibatalake. Perlindhungan marang anomali iki bisa dadi penting yen kita nggunakake kursor.

Tulis miring

Anomali iki uga luwih gampang diterangake kanthi conto: umpamane ing sistem kita paling ora siji dokter kudu tugas, nanging loro dokter mutusake kanggo mbatalake tugas:

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Anomali kasebut tegese ora ana dokter sing bakal nindakake tugas. Yagene iki kedadeyan? Amarga transaksi iki mriksa kondisi sing bisa dilanggar dening transaksi liyane, lan amarga isolasi kita ora weruh owah-owahan iki.

Iki padha non-repeatable diwaca. Utawa, pilih bisa nyelehake kunci ing cathetan kasebut.

Tulis miring lan maca miring minangka kombinasi saka anomali sadurunge. Sampeyan bisa nimbang nulis miring, sing sejatine minangka maca hantu. Coba tabel sing ngemot jeneng karyawan, gaji, lan proyek sing digarap:

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

Apa sing bisa nyebabake nyuda tingkat isolasi transaksi ing basis data?

AkibatΓ©, kita entuk gambar ing ngisor iki: saben manajer ngira yen owah-owahan ora bakal ngluwihi anggaran, mula dheweke nggawe owah-owahan personel sing bebarengan nyebabake overruns biaya.

Panyebab masalah kasebut padha karo maca phantom.

temonan

Ngaso tingkat isolasi transaksi ing database minangka trade-off antarane keamanan lan kinerja; pilihan saka tingkat iki kudu dicedhaki adhedhasar risiko potensial kanggo bisnis yen ana anomali tartamtu.

Sinau luwih lengkap babagan kursus kasebut.

Source: www.habr.com

Add a comment