Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Firebird Π Π£ΠšΠžΠ’ΠžΠ”Π‘Π’Π’Πž Π ΠΠ—Π ΠΠ‘ΠžΠ’Π§Π˜ΠšΠ БАЗ ДАННЫΠ₯Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 114

Автор Π₯Π΅Π»Π΅Π½ Π‘ΠΎΡ€Ρ€ΠΈ

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для клиСнтского прилоТСния Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ мноТСство ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹Ρ… запросов Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Firebird являСтся ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ прСимущСством для Π·Π°Π΄Π°Ρ‡, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ выполнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΈ прСдставляСт Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ для Π·Π°Π΄Π°Ρ‡, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π° ΠΏΠΎΠ΄ ΠΊΠΎΠ½Π΅Ρ† Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π° ΠΊΠ°ΠΊ Сдиная Ρ€Π°Π±ΠΎΡ‚Π°, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π°, Ссли Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.


Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ MGA

MGA (Multi-Generational Architecture, многовСрсионная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°) являСтся Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ основной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ управлСния состояниСм Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Firebird.

Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ MGA каТдая строка, сохраняСмая Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, содСрТит ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая Π΅Π΅ сохранила. Если другая транзакция посылаСт ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ строки, сСрвСр записываСт Π½Π° диск Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ этой строки с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π· старой вСрсии Π² ссылку (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π΄Π΅Π»ΡŒΡ‚ΠΎΠΉ) Π½Π° эту Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр содСрТит Π΄Π²Π° "поколСния" ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ строки.

ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»ΠΊΠ° Π² сравнСнии с COMMIT

Π’Π΅Ρ€ΠΌΠΈΠ½ "пСрСсылка" (post), вСроятно, Π±Ρ‹Π» заимствован Ρƒ старых Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… бухгалтСрских ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² качСствС Π°Π½Π°Π»ΠΎΠ³Π° пСрСсылаСмых ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Π² бухгалтСрских систСмах. Вакая аналогия ΠΏΠΎΠ»Π΅Π·Π½Π° для различСния Π΄Π²ΡƒΡ… Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΡ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°) ΠΈ подтвСрТдСния всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ измСнСния Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΡ… контСкста Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ измСнСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ постоянными ΠΈ становятся Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π² запускаСмых впослСдствии транзакциях.

Если появляСтся ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ пСрСсылкС, сСрвСр Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ сообщСниС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ отмСняСтся. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ этот ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π² соотвСтствии с Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠΎΠΌ. Для ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° измСнСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ часто Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, слСдствиСм Ρ‡Π΅Π³ΠΎ являСтся ΠΎΡ‚ΠΌΠ΅Π½Π° всСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°ΠΊ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. ΠŸΡ€ΠΈ отсутствии ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Π΅Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ.


! ! !

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. Π’Ρ‹Π·ΠΎΠ²Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ COMMIT ΠΈΠ»ΠΈ ROLLBACK ΡΠ²Π»ΡΡŽΡ‚ΡΡ СдинствСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ способами Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ошибки ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ сСрвСр Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΎΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

. ! .


ΠžΡ‚ΠΊΠ°Ρ‚

ΠžΡ‚ΠΊΠ°Ρ‚ (rollback) Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой. Он ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ всС измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Ρ‹ Π² процСссС выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, - измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ Π²Ρ‹Π·Π²Π°Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

НСкоторыС ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² строк Π½Π° дискС. НапримСр, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° сСрвСрС просто исчСзновСниС Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°ΠΌΠΈ, ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹ строк, созданныС ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π² процСссС ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ вмСстС с автоматичСски ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поддСрТиваСтся для добавлСния. Если ΠΎΠ΄Π½Π° транзакция добавляСт большоС количСство записСй, автоматичСски ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ вмСстС с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚ΠΌΠ΅Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π° дискС. Π”Ρ€ΡƒΠ³ΠΈΠ΅ условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Ρ‹ добавляСмых записСй ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° дискС, - это ΠΊΡ€Π°Ρ… сСрвСра Π² процСссС выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ использованиС установок Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ "Π½Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ автоматичСски"[89].

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° строки

Π’ MGA Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½ΠΎΠ²Ρ‹Ρ… вСрсий строки ΠΈΠΌΠ΅Π΅Ρ‚ слСдствиСм Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ строки. ΠŸΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ условий Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠΉ вСрсии Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ запрос Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ этой строки - это ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ запроса Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ сСрвСр провСряСт состояниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая "Π²Π»Π°Π΄Π΅Π΅Ρ‚" Π½ΠΎΠ²Ρ‹ΠΌΠΈ вСрсиями строки. Если самая новая ΠΈΠ· этих Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ являСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π±Ρ‹Π»Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π°, сСрвСр ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² соотвСтствии с Π΅Π΅ контСкстом (ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ).

Если транзакция самой Π½ΠΎΠ²ΠΎΠΉ вСрсии являСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π°Ρ транзакция ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π΅Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ (подтвСрТдСния ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Π°), Π° Π·Π°Ρ‚Π΅ΠΌ сСрвСр ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅ΠΉ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Ссли Π±Ρ‹Π»ΠΎ Π·Π°Π΄Π°Π½ΠΎ NOWAIT, сСрвСр Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Если транзакция самой Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π° ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π°Ρ транзакция ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции SNAPSHOT (Ρ‚. Π΅. ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ), сСрвСр ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ запрос ΠΈ сообщаСт ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Если транзакция ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции READ COMMITTED с установлСнным ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ RECORD_VERSION, сСрвСр выполняСт запрос ΠΈ записываСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ записи с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ этой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.


! ! !

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ условия, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π°Ρ транзакция ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции READ COMMITTED. На Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ любого запроса Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ условия Π² контСкстС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΌΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ измСнСниями. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… см. Π² Π³Π»Π°Π²Π΅ 26, Π³Π΄Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

. ! .


Firebird Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… контСкстов Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ строки (такая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° называСтся оптимистичСской) - каТдая строка доступна всСм транзакциям чтСния/записи, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ созданиС Π½ΠΎΠ²ΠΎΠΉ вСрсии этой строки.

Π’ΠΎ врСмя ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ подтвСрТдСния старая вСрсия записи становится ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ записью.

* Если Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация измСнСния, Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· становится самой послСднСй ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΠΎΠΉ вСрсиСй. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· этой записи с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ послСднСй ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ становится доступным для сборки мусора.

* Если Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация удалСния, Ρ‚ΠΎ "остаток записи" замСняСт ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΡƒΡŽ запись. Чистка ΠΈΠ»ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ этот остаток ΠΈ освобоТдаСт физичСскоС мСсто Π½Π° дискС, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ записью.

БвСдСния ΠΎ чисткС ΠΈ сборкС мусора см. Π² Ρ€Π°Π·Π΄. "Π“ΠΈΠ³ΠΈΠ΅Π½Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…" Π³Π»Π°Π²Ρ‹ 15. Руководство ΠΏΠΎ чисткС находится Π² Π³Π»Π°Π²Π΅ 39.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… условиях:

* любая транзакция ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ строку, которая Π±Ρ‹Π»Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π° Π΄ΠΎ старта этой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ;

* любая транзакция чтСния/записи ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ строки;

* пСрСсылка (post) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ, Ссли никакая другая транзакция чтСния/записи Π½Π΅ пСрСсылала ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π»Π° измСнСния для Π½ΠΎΠ²ΠΎΠΉ вСрсии этой записи. Вранзакциям READ COMMITTED Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°Ρ‚ΡŒ измСнСния, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ вСрсии Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ;

* Ссли пСрСсылка ΡƒΡΠΏΠ΅ΡˆΠ½Π°, транзакция устанавливаСт "Π·Π°ΠΌΠΎΠΊ" Π½Π° эту запись. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ послСднюю ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° пСрСсылка измСнСния ΠΈΠ»ΠΈ удалСния этой строки Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Вранзакция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сконфигурирована для блокирования всСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. БущСствуСт Π΄Π²Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹Ρ… способа ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² DSQL: установив ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² SNAPSHOT TABLE STABILITY (извСстный Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ согласованный Ρ€Π΅ΠΆΠΈΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ повторяСмым Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ, repeatable read) ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСзСрвирования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ настройки Π½ΡƒΠΆΠ½Ρ‹ Π² случаС, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅ условия. Они Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ΡΡ для Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ использования Π² Firebird.

НСприСмлСмый способ установлСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Firebird 1.5 ΠΈ Π²Ρ‹ΡˆΠ΅) - ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, которая дСйствуСт Π½Π° всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π΄Π΅Π»Π°Π΅Ρ‚ это:

SELECT * FROM ATABLE

FOR UPDATE WITH LOCK;

Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, это Π½Π΅ являСтся вопросом конфигурирования Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, которая Π²Π»Π°Π΄Π΅Π΅Ρ‚ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ с этой явной пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ. Вопросы пСссимистичСской Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 27.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅

НС сущСствуСт "Π΄Π΅Π»ΡŒΡ‚" ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для добавлСния. Если другая транзакция ΠΏΠ΅Ρ€Π΅Π΄ этим Π½Π΅ выполняла добавлСния Π² условиях Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ, Ссли ΠΎΠ½ΠΎ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ достовСрности.

"Π‘Ρ‚Π°Ρ€Π΅Π½ΠΈΠ΅" ΠΈ статистика Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

Когда клиСнтский процСсс ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ дСскриптор Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ для Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ сохраняСт Π΅Π³ΠΎ Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½ΠΎΠΉ страницС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Transaction Inventory Page, TIP).

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ возраст Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ являСтся 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌ Ρ†Π΅Π»Ρ‹ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ гСнСрируСтся с Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ. Новая ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ восстановлСнная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π‘Π΅Ρ€ΠΈΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Возраст Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ опрСдСляСтся Π΅Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ: самая старая ΠΈΠΌΠ΅Π΅Ρ‚ наимСньший ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.