Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички. Аз съм Владислав Π ΠΎΠ΄ΠΈΠ½. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° съм Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π» Π½Π° курса β€žΠΡ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° високи Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½ΠΈΡβ€œ Π² OTUS ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° участвам Π² курсовСтС ΠΏΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° софтуСра.

ОсвСн ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ…Ρ‚Π΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅, пиша авторски ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ Π·Π° Π±Π»ΠΎΠ³Π° Π½Π° OTUS Π² Π₯Π°Π±Ρ€ ΠΈ Π΄Π½Π΅ΡˆΠ½Π°Ρ‚Π° статия искам Π΄Π° посвятя Π½Π° старта Π½Π° курса Β«PostgreSQLΒ», Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° рСгистрация.

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ миналия ΠΏΡŠΡ‚ НиС Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π΄Π²Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ: осигуряванС Π½Π° отказоустойчивост ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Π° срСда. Π—Π° ΠΏΡŠΠ»Π½ΠΎΡ‚ΠΎ изпълнСниС Π½Π° Ρ‚Π΅Π·ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ транзакцията трябва Π΄Π° ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π° свойствата Π½Π° ACID. ДнСс Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° Π±ΡƒΠΊΠ²Π°Ρ‚Π° I (изолация) Π² Ρ‚Π°Π·ΠΈ Π°Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°.

Π˜Π·ΠΎΠ»Π°Ρ†ΠΈΡ

Π˜Π·ΠΎΠ»Π°Ρ†ΠΈΡΡ‚Π° Ρ€Π΅ΡˆΠ°Π²Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Π° срСда, фактичСски прСдоставяйки Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ race condition. Π’ идСалния случай изолацията ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° сСриализация, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ свойство, осигуряващо, Ρ‡Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ Π΅ ΡΡŠΡ‰ΠΈΡΡ‚, ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ Π±ΠΈ Π±ΠΈΠ», Π°ΠΊΠΎ Ρ‚Π΅ бяха изпълнявани послСдоватСлно. ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ‚ΠΎΠ²Π° свойство Π΅, Ρ‡Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° бъдС осигурСно тСхничСски ΠΈ слСдоватСлно ΠΎΠΊΠ°Π·Π²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ влияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността Π½Π° систСмата. ИмСнно Π·Π°Ρ‚ΠΎΠ²Π° изолацията чСсто сС отслабва, ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΉΠΊΠΈ рисковСтС ΠΎΡ‚ появата Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ става Π΄ΡƒΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° възникванС Π½Π° Ρ‚Π΅Π·ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ° Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΈΡ€Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅.

Най-извСстнитС Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ са: dirty read, non-repeatable read, phantom read, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΈΠΌΠ° ΠΎΡ‰Π΅ 5: dirty write, cursor lost update, lost update, read skew, write skew.

Dirty write

Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° аномалията Π΅, Ρ‡Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° прСзаписват Π½Π΅Π·Π°ΠΊΠΎΠΌΠΈΡ‡Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ.

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π’Π°Π·ΠΈ аномалия Π΅ опасна Π½Π΅ само с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ²Π°Ρ‚ слСд ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π²Π΅Ρ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ), Π½ΠΎ ΠΈ с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° атомарността: Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ прСзаписванСто Π½Π° Π½Π΅Π·Π°ΠΊΠΎΠΌΠΈΡ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, става нСясно ΠΊΠ°ΠΊ Π΄Π° сС откатят Π΅Π΄Π½Π° транзакция, Π±Π΅Π· Π΄Π° сС засяга Π΄Ρ€ΡƒΠ³Π°.

Аномалията сС Π»Π΅ΠΊΡƒΠ²Π° доста лСсно: поставямС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° записа ΠΏΡ€Π΅Π΄ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° записа, ΠΊΠΎΠ΅Ρ‚ΠΎ забранява Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄Π° промСнят записа, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π΅ бъдС свалСна.

Dirty read

Dirty read ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° Π½Π΅Π·Π°ΠΊΠΎΠΌΠΈΡ‡Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ.

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΈΠ·Π²Π°Π΄ΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ дСйствия ΠΈΠ»ΠΈ Π΄Π° сС Π²Π·Π΅ΠΌΠ°Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π—Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° аномалията ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° сС слоТи Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π½ΠΎ Ρ‚ΠΎΠ²Π° сСриозно Ρ‰Π΅ ΡƒΠ΄Π°Ρ€ΠΈ производитСлността. Много ΠΏΠΎ-лСсно Π΅ Π΄Π° сС ΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ Π·Π° rollback Π½Π° транзакцията ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ (ΠΏΡ€Π΅Π΄ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° записа) ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ трябва Π΄Π° бъдС Π·Π°ΠΏΠ°Π·Π΅Π½ΠΎ Π² систСмата. Π—Π°Ρ‰ΠΎ Π΄Π° Π½Π΅ Ρ‡Π΅Ρ‚Π΅ΠΌ ΠΎΡ‚ Ρ‚Π°ΠΌ? Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΅Π²Ρ‚ΠΈΠ½ΠΎ, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Ρ‚ dirty read.

Lost update

Lost update ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π·Π°Π³ΡƒΠ±Π΅Π½ΠΈ обновлСния, ΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄ΡŠΡ‚ доста Ρ‚ΠΎΡ‡Π½ΠΎ отразява ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ транзакцията Π’2 бСшС ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½. Π’Π°Π·ΠΈ ситуация сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° с явни ΠΈΠ»ΠΈ нСявни Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° записа. ВоСст, ΠΈΠ»ΠΈ просто Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ записа, ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° възниква нСявна Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΈΠ»ΠΈ изпълнявамС select for update, ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΉΠΊΠΈ появата Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Ρ‚Π°ΠΊΠ°Π²Π° опСрация Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ опасна: с Π½Π°ΡˆΠ΅Ρ‚ΠΎ "Π½Π΅Π²ΠΈΠ½Π½ΠΎ" Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈ чСтСния. Някои Π±Π°Π·ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ ΠΏΠΎ-бСзопасно select for share, позволяващо Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ Π½Π΅ допускащо тяхната промяна.

Cursor lost update

Π—Π° ΠΏΠΎ-Ρ„ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π±Π°Π·ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ курсор. ΠšΡƒΡ€ΡΠΎΡ€ΡŠΡ‚ Π΅ структура, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΈ позволяваща итСрация ΠΏΠΎ тях. declare cursor_name for select_statement. Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° курсора Π΅ описано с select.

Π—Π°Ρ‰ΠΎ Π΅ Π½ΡƒΠΆΠ΅Π½ курсор? Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Ρ‚Π°ΠΌ, Ρ‡Π΅ някои Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° всички записи, ΠΈΠ·Π±Ρ€Π°Π½ΠΈ с select (read stability), ΠΈΠ»ΠΈ само Π½Π° записа, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ ΠΊΡƒΡ€ΡΠΎΡ€ΡŠΡ‚ (cursor stability). ΠŸΡ€ΠΈ cursor stability сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΊΡ€Π°Ρ‚ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΊΠΎΠ΅Ρ‚ΠΎ намалява броя Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΡ‚Π΅, Π² случай Ρ‡Π΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ голяма ΠΈΠ·Π²Π°Π΄ΠΊΠ° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ. Π—Π°Ρ‚ΠΎΠ²Π° аномалията lost update сС откроява Π·Π° курсора ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ.

Non-repeatable read

Non-repeatable read сС ΡΡŠΡΡ‚ΠΎΠΈ Π² Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° транзакция 2 послСдоватСлни чСтСния Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° запис водят Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π΄Ρ€ΡƒΠ³Π° транзакция сС намСсила ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ чСтСния, ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»Π° Π΅ Π½Π°ΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΈ Π΅ Π±ΠΈΠ»Π° ΠΊΠΎΠΌΠΈΡ‚Π½Π°Ρ‚Π°.

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π—Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ? ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ Ρ†Π΅Π»Ρ‚Π° Π½Π° транзакцията T2 Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ всички стоки, чиято Ρ†Π΅Π½Π° Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΎΡ‚ 150 Ρƒ.Π΅. Някой Π΄Ρ€ΡƒΠ³ Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π» Ρ†Π΅Π½Π°Ρ‚Π° Π΄ΠΎ 200 Ρƒ.Π΅. Π’Π°ΠΊΠ° зададСният Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ Π½Π΅ Π΅ сработил.

Π’Π΅Π·ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ спират Π΄Π° сС появяват ΠΏΡ€ΠΈ добавянС Π½Π° Π΄Π²ΡƒΡ„Π°Π·Π½ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° MVCC, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Π±ΠΈΡ…ΠΌΠ΅ искали Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ.

Π€Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅

Π€Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎ сС Π½Π°Ρ€ΠΈΡ‡Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° транзакция.

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

НапримСр, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° наблюдавамС Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° сСлСкция Π½Π° Π½Π°ΠΉ-Свтиния ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΏΡ€ΠΈ възникванС Π½Π° Ρ‚Π°Π·ΠΈ аномалия.

Π”Π° сС ΠΈΠ·Π±Π°Π²ΠΈΠΌ ΠΎΡ‚ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΈΡ‚Π΅ чСтСния Π²Π΅Ρ‡Π΅ Π΅ доста слоТно. ΠžΠ±ΠΈΡ‡Π°ΠΉΠ½Π°Ρ‚Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΡ‰Π΅ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°. 2PL-систСмитС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ MVCC-систСмитС отмСнят Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈ ΠΎΡ‚ вставка. И Π΄Π²Π°Ρ‚Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° са доста Ρ‚Π΅ΠΆΠΊΠΈ.

Π§Π΅Ρ‚Π΅Π½Π΅ с Π½Π°ΠΊΠ»ΠΎΠ½

Π§Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ с Π½Π°ΠΊΠ»ΠΎΠ½ възниква, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с няколко Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС промСня ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, прСдставляващи ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ тяхната мСтаинформация:

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π•Π΄Π½Π° транзакция Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° Π³ΠΈ промСня:

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° транзакция T1, ΠΏΡ€ΠΈ публикацията title = Good, Π° updated_by = T2, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ някакво Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Ρ‚ΠΎΠ²Π° Π΅ non-repeatable read, Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° няколко Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.

Π—Π° Π΄Π° сС ΠΏΠΎΠΏΡ€Π°Π²ΠΈ, T1 ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°Π»ΠΎΠΆΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° всички Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Ρ‡Π΅Ρ‚Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° транзакция T2 Π΄Π° промСня информацията. Π’ случай Π½Π° MVCC транзакция T2 Ρ‰Π΅ бъдС ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π°. Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ аномалия ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π²Π°ΠΆΠ½Π°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ курсори.

ПисанС с наклон

Π’Π°Π·ΠΈ аномалия ΡΡŠΡ‰ΠΎ Π΅ ΠΏΠΎ-лСсно Π΄Π° сС обясни с ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Π² Π½Π°ΡˆΠ°Ρ‚Π° систСма ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΊΡ‚ΠΎΡ€ трябва Π΄Π° бъдС Π½Π° дСТурство, Π½ΠΎ ΠΈ Π΄Π²Π°ΠΌΠ°Ρ‚Π° Π΄ΠΎΠΊΡ‚ΠΎΡ€ΠΈ са Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΄Π° отмСнят дСТурството си:

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Аномалията Π΄ΠΎΠ²Π΅Π»Π° Π΄ΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄ΠΎΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ няма Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ Π½Π° дСТурство. Π—Π°Ρ‰ΠΎ сС случи Ρ‚Π°ΠΊΠ°? Π—Π°Ρ‰ΠΎΡ‚ΠΎ транзакцията ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΡˆΠ΅ условиС, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° транзакция, Π° ΠΏΠΎΡ€Π°Π΄ΠΈ изолацията Π½Π΅ видяхмС Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

Π’ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ non-repeatable read. ΠšΠ°Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, select-ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π½Π°Π»ΠΎΠΆΠ°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° Ρ‚Π΅Π·ΠΈ записи.

Записи Π½Π° записванС ΠΈ записванС с Π½Π°ΠΊΠ»ΠΎΠ½ са ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ. МоТСм Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ записванСто с Π½Π°ΠΊΠ»ΠΎΠ½, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Π΅ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅. НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² която ΠΈΠΌΠ° ΠΈΠΌΠ΅Π½Π° Π½Π° слуТитСли, Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ работят:

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Какви послСдствия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° отслабванСто Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°: всСки ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ си Π΅ мислСл, Ρ‡Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ, няма Π΄Π° ΠΈΠ·Π²Π΅Π΄Π΅ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° извън Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅, Π·Π°Ρ‚ΠΎΠ²Π° Ρ‚Π΅ са Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΊΠ°Π΄Ρ€ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π΄ΠΎΠ²Π΅Π΄ΠΎΡ…Π° Π΄ΠΎ ΠΏΡ€Π΅Π²ΠΈΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° възникванС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΡŠΡ‰Π°Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΡ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅.

Изводи

Π‘Π½ΠΈΠΆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΅ компромис ΠΌΠ΅ΠΆΠ΄Ρƒ бСзопасността ΠΈ производитСлността, ΠΏΡ€ΠΈ ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° Ρ‚ΠΎΠ²Π° Π½ΠΈΠ²ΠΎ слСдва Π΄Π° сС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ Π² зависимост ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈΡ‚Π΅ рисковС Π·Π° бизнСса ΠΏΡ€ΠΈ възникванС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ.

НаучСтС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° курса.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster