ПредишенСледващото

4.9.Tranzaktsii, заключване и много потребители достъп до данните.

Всяка база е подходяща за използване на данните, само ако то отговаря на състоянието на предметната област. Такива състояния се наричат ​​съвместими. Очевидно е, че когато данните DB трябва да премине от едно състояние в друго неразделна. Въпреки това, процесът на надстройване може да бъде ситуации на данни, когато целостта на държавата е счупен. Например:
  • В банковата система прави прехвърлянето на средства от една сметка в друга. На езика на SQL, тази операция е описан от последователност от две UPDATE команди. Както можете да видите, след като първия отбор, а вторият отбор да завърши базата данни не е в последователно състояние (необходимата сума се приспада от първата сметка, но не кредитират втория). Ако в този момент системата не успее (като изключване на захранването), а след това на целостта на държавата, на базата данни ще бъдат безвъзвратно загубени.
  • целостта на базата данни могат да бъдат нарушени по време на един обработка SQL команда. Нека операция за увеличаване на заплатите на всички служители на компанията с 20%: В този случай, последователно на базата данни обработва всички данни да бъдат актуализирани, т.е. има период от време, когато част от записа съдържа новите стойности, а някои - стар.

За да се избегнат подобни ситуации в базата данни въвежда концепцията за сделка - атомни операции на база данни, която го превръща от една последователна състояние в друго последователна държавна. С други думи, сделката - е поредица от операции, които трябва да се извърши, или всички, или тя не е изпълнена (всичко или нищо).

Начин на мониторинг на сделката е да влезете. който записва всички промени, правят сделки в базата данни. Ако по време на обработката на сделката не се осъществи, сделката се навива обратно - от държавния базата данни на списание vosstanavlivaetsya по време започна на сделката.

Различните доставчици СУБД започват сделка може да се зададе изрично (например, командва ЗАПОЧНЕТЕ транзакция), или предполага по подразбиране (както е определено в стандарта SQL), т.е. друга сделка отваря автоматично веднага след успешен или неуспешен завършване на предишната. За завършване на сделката обикновено се използват SQL команди:
  • COMMIT - успешно завършване на сделката
  • ROLLBACK - намаление на цените на сделката, т.е. върне базата данни в състоянието, в което е бил в в началото на сделката.
Стандартът уточнява, че SQL сделка започва с първата SQL-декларация, инициирана от даден потребител или съдържащи се в приложна програма. Всички следващи SQL операторите съставляват тялото на сделката. Сделката приключи един от възможните начини:
  1. COMMIT изявление означава успешното приключване на сделката, всички промени в vnesnennye на базата данни, в безсрочни
  2. ROLLBACK изявление прекратява сделката и премахва всички тя се променя
  3. как да завърши успешно програма, която започна на сделката е успешното завършване на сделка (например използването на комит)
  4. погрешно завършване на програмата може да се прекрати сделката (като ROLLBACK)
Пример изрична сделка: Пример имплицитно сделка: За съжаление, описан механизмът гарантира неразделна състоянието на базата данни сделка само когато всички операции се изпълняват последователно, т.е. във всяка единица време, само една сделка е активен. Ако работите с данните са няколко потребители, те не биха могли да се организира по начин, за да задава въпроси към организацията, тъй като че ще увеличи времето за реакция на системата. В същото време, ако в същото време се извършва на две сделки могат да се сблъскат на следните условия за грешки:
  • Мръсни четене (Dirty Read) - сделка T1 е модифицирана елемент на данните. След това друг T2 сделка е прочел съдържанието на този показател за данни, за да завършите Т1 сделка. Ако T1 zavreshaetsya ROLLBACK работа. Оказва се, че сделка T2 не чете съществуващите данни.
  • Неповторимо (замъглено) четене (Non-повторяеми или замъглени Read) - четете Т1 сделка съдържанието на елементите на данните. След това друг T2 сделка или заличаване на елемента. Ако T1 чете съдържанието на тази позиция отново, той ще получи различна стойност или открива, че елемента от данни, вече не съществува.
  • Phantom (фалшиви елементи) (Phantom) - сделка T1 четат съдържанието на елементи на множество данни, които отговарят нито състояние. След T2 създаден данни отговарят на това условие и се захваща. Ако T1 повтаря четене със същото състояние, той ще получи и друг набор от данни.
Както вече бе споменато, нито един от тези случаи не може да се случи по време на следващите сделки. Следователно възниква понятието сериализация (способността да регулира) конкурентност. Т.е. променливо (паралелен) изпълнение на предварително определено множество операции ще бъде вярно, ако неговото изпълнение се получава същия резултат, както в последователното изпълнение на същата операция.

Всички по-горе ситуация възниква само защото променлив извършване на сделки Т1 и Т2 не е осъден, т.е. Това не беше равностойна на първата T1 сделка, тогава T2, или, обратно, първо Т2 на сделката, а след това T1.

Принудително рационализиране сделки, предоставени от механизма за заключване. Същността на механизма е, както следва: ако изпълнението на сделка и изисква определено обект на базата данни (кортеж набор от кортежи, отношението, набор от отношения.) Не се променя непредвидимо и без знанието на тази сделка, обектът е заключена. Основните видове брави, са:
  • заключване с взаимен достъп. също наречен S-блокиране (от споделени брави) и блокиране на четене.
  • изключително заключване (без взаимен достъп), известен още като X-блокировка (без брави) или пишете заключване. Този режим се използва за промяна на дейността на добавяне и изтриване на обекти.
В този случай:
  • ако сделката налага на X-ключалката на обекта, всяко искане сделка друг заключване на обекта ще бъде отхвърлена.
  • ако сделката налага на обект S-ключалката,
    • искане от друга сделка с X-заключване на обекта ще бъде отхвърлена
    • искане от друга сделка с S-заключване на обекта ще бъде приет
Сделката, за да поискате достъп до елементите на вече заснети с друга сделка, несъвместима режим спира, докато улавяне на обекта няма да бъдат премахнати.

Доказано е, че Serializable сделка (или, в противен случай, тяхната изолация) е снабдена с помощта на заключващ протокол двуфазна (2LP - двуфазна брави), съгласно която всички ключалки, направени от транзакция се отстраняват само когато е пълна. Те отговарят на следната операция се разделя на две фази: (1) - натрупване на брави (2) - освобождаване на ключалката в резултат на извършване или намаление на цените.

За съжаление, използването на заключващия механизъм, водещ до намаляване на скоростта на обработка на транзакции, тъй като системата трябва да изчакате, докато свободните данни, заснети едновременно сделка. Може ли да реши този проблем чрез намаляване на парчета на данни, заснети от сделката. В зависимост от заловените предмети са няколко нива за заключване.
  • Той заключва цялата база данни - очевидно, този вариант е неприемлив, тъй като намалява мултиплейър режим за единичен
  • блокират отделни таблици
  • блокиран страница (страница - Таблица фрагмент обикновено 2-4 KB, единица за разпределение на паметта на системата за обработка на данни)
  • блокиран рекорд
  • Отделните полета са блокирани
Съвременните СУБД обикновено могат да извършват заключване на ниво ред или страница.

SQL език също така осигурява метод за контролиране на скоростта на индиректния да отговаря на следните сделката чрез определяне нивото на изолация сделка. Под нивото на изолация транзакция се отнася до възможността за едно от условията за грешки, описани по-горе. 4 ниво на изолация е определено в SQL:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!