Halo sadayana. Vladislav Rodin ngahubungan. Abdi ayeuna Pamimpin Kursus pikeun kursus Arsitéktur Beban Kerja Tinggi di OTUS sareng ogé ngajarkeun kursus arsitéktur perangkat lunak.
Salian ngajar, sakumaha anu anjeun perhatikeun, kuring nyerat bahan asli pikeun blog OTUS dina Habré sareng kuring hoyong coincide sareng artikel dinten ieu pikeun coincide sareng peluncuran kursus. , anu dibuka pikeun pendaptaran ayeuna.

perkenalan
В urang ngobrol ngeunaan kanyataan yén transaksi dina basis data ngawula ka ngajawab dua masalah: mastikeun kasabaran sesar sarta aksés ka data dina lingkungan kalapa. Pikeun pinuh ngalaksanakeun tugas ieu, urus kudu boga sipat ACID. Dinten ieu kami bakal ngobrol di jéntré ngeunaan surat I (isolasi) dina singgetan ieu.
penyekatan
Isolasi ngajawab masalah ngakses data dina lingkungan kalapa, dasarna nyadiakeun panyalindungan tina kaayaan lomba. Ideally, isolasi hartina serialization, nu sipat nu ensures yén hasil tina executing transaksi di paralel sarua jeung lamun maranéhanana dieksekusi sequentially. Masalah utama sareng sipat ieu nyaéta hésé pisan nyayogikeun sacara téknis sareng, akibatna, gaduh dampak anu signifikan dina kinerja sistem. Éta pisan sababna naha isolasi mindeng ngaruksak, narima resiko tina anomali tangtu, nu bakal dibahas dihandap. Kamungkinan anomali tangtu lumangsung persis characterizes tingkat isolasi urus.
Anomali anu paling kawéntar nyaéta: maca kotor, maca henteu tiasa diulang, maca hantu, tapi nyatana aya 5 deui: nyerat kotor, kursor leungit update, leungit update, maca miring, nyerat miring.
Tulisan kotor
Intina anomali nyaéta yén transaksi tiasa nimpa data anu teu dikomitkeun.

Anomali Ieu bahaya teu ngan kusabab data bisa konflik sanggeus committing duanana transaksi (sakumaha dina gambar), tapi ogé alatan atomicity dilanggar: saprak urang ngidinan data uncommitted bisa overwritten, teu jelas kumaha gulung deui hiji transaksi tanpa mangaruhan sejen. .
Anomali nu bisa diolah cukup basajan: urang ngagantelkeun konci pikeun rékaman saméméh dimimitian rékaman, prohibiting transaksi séjén ti ngarobah rékaman nepi ka konci dihapus.
Rét dibaca
Kotor maca hartina maca data uncommitted.

Masalah timbul nalika tindakan atanapi kaputusan kedah dilakukeun dumasar kana sampel.
Pikeun ngabenerkeun anomali, anjeun tiasa ngagantelkeun konci baca, tapi ieu bakal mangaruhan pisan kana kinerja. Éta langkung saderhana pikeun nyarios yén pikeun transaksi rollback, kaayaan awal data (sateuacan ngarékam) kedah disimpen dina sistem. Naha henteu maca ti dinya? Éta cukup murah yén kalolobaan pangkalan data ngahapus bacaan anu kotor sacara standar.
update leungit
Lost update hartina leungit apdet, sarta tarjamahan rada akurat ngagambarkeun hakekat masalah:

Kanyataanna, hasil transaksi T2 ieu malikkeun. Kaayaan ieu tiasa dilereskeun ku konci nyerat eksplisit atanapi implisit. Hartina, urang ngan saukur ngamutahirkeun catetan, lajeng hiji konci implisit lumangsung, atawa urang ngalakukeun pilih pikeun apdet, ngabalukarkeun konci baca jeung tulis lumangsung. Punten dicatet yén operasi sapertos kitu bahaya pisan: kalayan bacaan "polos" kami, kami meungpeuk bacaan anu sanés. Sababaraha database nawiskeun langkung aman pilih pikeun dibagikeun, sahingga data bisa dibaca tapi teu dirobah.
Kursor leungit update
Pikeun kadali anu langkung saé, pangkalan tiasa nawiskeun alat sanés, sapertos kursor. Kursor mangrupikeun struktur anu ngandung sakumpulan barisan sareng ngamungkinkeun anjeun pikeun ngulang deui. nyatakeun cursor_name pikeun select_statement. Eusi kursor digambarkeun ku pilih.
Naha anjeun peryogi kursor? Kanyataan yén sababaraha pangkalan data nawiskeun konci dina sadaya rékaman anu dipilih ku pilih (baca stabilitas), atanapi ngan ukur dina catetan dimana kursor ayeuna aya (stabilitas kursor). Kalayan stabilitas kursor, konci pondok dilaksanakeun, anu ngamungkinkeun urang ngirangan jumlah konci upami urang ngulik sampel data anu ageung. Ku alatan éta, anomali update leungit diisolasi misah pikeun kursor.
Bacaan anu henteu tiasa diulang
Non-repeatable dibaca éta salila palaksanaan urus urang, 2 dibaca padeukeut tina catetan sarua bakal ngakibatkeun hasil béda, sabab urus sejen diintervensi antara dua maca ieu, robah data urang jeung ieu komitmen.

Naha ieu malah jadi masalah? Bayangkeun yén tujuan transaksi T2 dina gambar nyaéta pikeun milih sadaya barang anu hargana kirang ti 150 USD. Batur deui ngamutahirkeun hargana ka $200. Ku kituna, saringan anu dipasang henteu jalan.
Anomali ieu eureun lumangsung nalika interlocks dua fase ditambahkeun atawa nalika mékanisme MVCC dipaké, nu Abdi hoyong ngabahas misah.
Phantom maca
Phantom mangrupikeun bacaan data anu ditambihan ku transaksi anu sanés.

Salaku conto, urang tiasa ningali pilihan anu salah tina produk anu paling murah nalika anomali ieu lumangsung.
Nyingkirkeun bacaan phantom parantos sesah. Meungpeuk biasa teu cukup, sabab urang teu bisa meungpeuk hiji hal anu teu acan aya. Sistem 2PL nganggo ngonci prediktif, sedengkeun sistem MVCC gaduh jadwal transaksi anu ngagulung deui transaksi anu tiasa kaganggu ku sisipan. Duanana mékanisme kahiji jeung kadua rada beurat.
Baca miring
Baca skew lumangsung nalika urang digawekeun ku sababaraha tabel, eusi nu kudu ngarobah konsistén.
Anggap urang gaduh tabel anu ngagambarkeun tulisan sareng inpormasi meta na:

Hiji transaksi maca tina tabel, anu sanésna ngarobih:

Salaku hasil tina transaksi T1, pos ngabogaan judul = Alus, sarta updated_by = T2, nu sababaraha jenis inconsistency.
Kanyataanna, ieu téh dibaca non-repeatable, tapi salaku bagian tina sababaraha tabel.
Pikeun ngalereskeun ieu, T1 tiasa nempatkeun konci dina sadaya baris anu bakal dibaca, anu bakal nyegah transaksi T2 ngarobih inpormasi. Dina kasus MVCC, transaksi T2 bakal dibatalkeun. Perlindungan ngalawan anomali ieu tiasa janten penting upami urang nganggo kursor.
Tulis miring
Anomali ieu ogé gampang dijelaskeun ku conto: anggap yén dina sistem kami sahenteuna hiji dokter kedah ditugaskeun, tapi duanana dokter mutuskeun pikeun ngabatalkeun tugasna:


Anomali éta hartosna henteu aya dokter anu bakal ditugaskeun. Naha ieu kajadian? Kusabab urus ieu mariksa kaayaan anu bisa dilanggar ku urus sejen, sarta alatan isolasi kami henteu ningali parobahan ieu.
Ieu mangrupikeun bacaan anu henteu tiasa diulang. Alternatipna, pamilih tiasa nempatkeun konci dina rékaman ieu.
Nulis skew jeung maca skew mangrupakeun kombinasi tina anomali saméméhna. Anjeun tiasa mertimbangkeun nyerat skew, anu dasarna mangrupikeun bacaan phantom. Pertimbangkeun tabel anu ngandung nami karyawan, gaji, sareng proyék anu aranjeunna damel:


Hasilna, urang meunang gambar di handap ieu: unggal manajer ngira yén parobahan maranéhna moal ngakibatkeun balik leuwih anggaran, ngarah nyieun parobahan tanaga nu babarengan ngabalukarkeun overruns ongkos.
Anu ngabalukarkeun masalah persis sarua jeung dina bacaan phantom.
papanggihan
Bersantai tingkat isolasi urus dina database mangrupa trade-off antara kaamanan jeung kinerja pilihan tingkat ieu kudu ditilik dumasar kana resiko keur usaha lamun anomali tangtu lumangsung.
sumber: www.habr.com
