К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. На связи Владислав Π ΠΎΠ΄ΠΈΠ½. Π’ настоящСС врСмя я являюсь Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ курса «АрхитСктор высоких Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊΒ» Π² OTUS, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°ΡŽ Π½Π° курсах, посвящСнных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ПО.

Помимо прСподавания, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, я занимаюсь написаниСм авторского ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° для Π±Π»ΠΎΠ³Π° OTUS Π½Π° Ρ…Π°Π±Ρ€Π΅ ΠΈ сСгодняшнюю ΡΡ‚Π°Ρ‚ΡŒΡŽ Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΈΡƒΡ€ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΊ запуску курса Β«PostgreSQLΒ», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прямо сСйчас ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π½Π°Π±ΠΎΡ€.

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π· ΠΌΡ‹ с Π²Π°ΠΌΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… слуТат для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π²ΡƒΡ… Π·Π°Π΄Π°Ρ‡: обСспСчСния отказоустойчивости ΠΈ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠΉ срСдС. Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ выполнСния этих Π·Π°Π΄Π°Ρ‡ транзакция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ свойствами ACID. БСгодня ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ Π±ΡƒΠΊΠ²Ρƒ I (isolation) Π² Π΄Π°Π½Π½ΠΎΠΉ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅.

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

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠΉ срСдС, фактичСски прСдоставляя Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ 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 осущСствляСтся short lock, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ количСство Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΌΡ‹ итСрируСмся ΠΏΠΎ большой Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ аномалию lost update Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ для курсора ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Non-repeatable read

Non-repeatable read Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя выполнСния нашСй Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 2 ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чтСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ записи ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ другая транзакция вмСшалась ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя чтСниями, помСняла наши Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π±Ρ‹Π»Π° Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π°.

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π’2 Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС Ρ‚ΠΎΠ²Π°Ρ€Ρ‹, Ρ†Π΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… мСньшС, Ρ‡Π΅ΠΌ 150 Ρƒ.Π΅. ΠšΡ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» Ρ†Π΅Π½Ρƒ Π΄ΠΎ 200 Ρƒ.Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, установлСнный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π΅ сработал.

Π”Π°Π½Π½Ρ‹Π΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ использовании ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° MVCC, ΠΎ Ρ‡Π΅ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Phantom read

Π€Π°Π½Ρ‚ΠΎΠΌΠ½Ρ‹ΠΌ называСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ.

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ самого дСшСвого Ρ‚ΠΎΠ²Π°Ρ€Π° ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ.

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

Read skew

Read skew Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с нСсколькими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, содСрТаниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ согласованно.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ посты ΠΈ ΠΈΡ… ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Одна транзакция Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†, другая ΠΈΡ… измСняСт:

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π’1, Ρƒ поста title = Good, Π° updated_by = T2, Ρ‡Ρ‚ΠΎ являСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ нСсоотвСтствиСм.

ЀактичСски, это non-repeatable read, Π½ΠΎ Π² составС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†.

Для исправлСния, Π’1 ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅ΡˆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° всС строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ даст Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π’2 ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’ случаС MVCC транзакция Π’2 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π°. Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π΄Π°Π½Π½ΠΎΠΉ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π²Π°ΠΆΠ½ΠΎΠΉ, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ курсоры.

Write skew

Π­Ρ‚Ρƒ аномалию Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² нашСй систСмС хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π° дСТурствС, Π½ΠΎ ΠΎΠ±Π° Π΄ΠΎΠΊΡ‚ΠΎΡ€Π° Ρ€Π΅ΡˆΠΈΠ»ΠΈ своС дСТурство ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ:

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Аномалия ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΠΎΠΊΡ‚ΠΎΡ€ΠΎΠ² Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π½Π° дСТурство. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ транзакция провСряла условиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Π° ΠΈΠ·-Π·Π° изоляции ΠΌΡ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ non-repeatable read. Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, select’Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π΅ΡˆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° эти записи.

Write skew ΠΈ read skew ΡΠ²Π»ΡΡŽΡ‚ΡΡ комбинациями ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ. МоТно Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ write skew, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎ сути phantom read’ΠΎΠΌ. Рассмотрим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° сотрудников, ΠΈΡ… Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚:

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

К Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ослаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ Π·Π° Π±ΡŽΠ΄ΠΆΠ΅Ρ‚, поэтому ΠΎΠ½ΠΈ внСсли ΠΊΠ°Π΄Ρ€ΠΎΠ²Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² суммС ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ пСрСрасходу.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ОслаблСниС уровня изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… являСтся компромиссом ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΊ Π²Ρ‹Π±ΠΎΡ€Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ уровня слСдуСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ исходя ΠΈΠ· ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… рисков для бизнСса ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ.

Π£Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ курсС.

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