ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. ΠΠ° ΡΠ²ΡΠ·ΠΈ ΠΠ»Π°Π΄ΠΈΡΠ»Π°Π² Π ΠΎΠ΄ΠΈΠ½. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΡΠ²Π»ΡΡΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΡΡΡΠ° Β«ΠΡΡ
ΠΈΡΠ΅ΠΊΡΠΎΡ Π²ΡΡΠΎΠΊΠΈΡ
Π½Π°Π³ΡΡΠ·ΠΎΠΊΒ» Π² OTUS, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Ρ Π½Π° ΠΊΡΡΡΠ°Ρ
, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΠ.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π°Π²ΡΠΎΡΡΠΊΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π΄Π»Ρ Π±Π»ΠΎΠ³Π° OTUS Π½Π° Ρ
Π°Π±ΡΠ΅ ΠΈ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΡΡ ΡΡΠ°ΡΡΡ Ρ
ΠΎΡΡ ΠΏΡΠΈΡΡΠΎΡΠΈΡΡ ΠΊ Π·Π°ΠΏΡΡΠΊΡ ΠΊΡΡΡΠ°
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π
ΠΠ·ΠΎΠ»ΡΡΠΈΡ
ΠΠ·ΠΎΠ»ΡΡΠΈΡ ΡΠ΅ΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ Π² ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ Π·Π°ΡΠΈΡΡ ΠΎΡ 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