Всичко, което знаем за транзакциите (част 1 - нива на изолация)
Автор: ASCRUS Изпратено от: ASCRUS
Всичко, което знаем за транзакциите в ASA 9 (част 1 - нива на изолация)
Внедряване на транзакционния механизъм в ASA 9 Тази версия на RDBMS е чисто шкафче. Съответно, както би трябвало да бъде за чист блокер, писателите винаги блокират читатели, а читателите винаги блокират писатели, в зависимост от нивото на изолация, зададено за тях. За да се осигури надеждно изпълнение на транзакциите, за всяка база данни се използва специален лог файл. Всички текущи DDL и DML операции се записват в него. Използва се оптимистичен модел за изпълнение на транзакция, т.е. предполага се, че в повечето случаи транзакциите ще бъдат завършени успешно (чрез COMMIT). Съответно, самият оператор COMMIT отнема минимално време, докато връщането назад на транзакцията ROLLBACK отнема доста дълго време. В тази връзка е препоръчително да не се правят ненужно дълги транзакции, в които са включени голямо количество данни.
Поддържани нива на изолация на транзакциите
READ UNCOMMITED (опция ISOLATION_LEVEL=0)Дефиниция:Ниво на мръсно четене.Описание:На това ниво на изолация сесията за четене вижда всички данни, дори данни, които в момента се модифицират от други сесии за писане и все още не са ангажирани. По време на изпълнението на самия SELECT не се придобиват заключвания от текущата сесия. По този начин, от една страна, това ниво на изолация е най-бързото, не зависи от сесиите за писане, не блокира сесиите за писане и не е ресурсоемко, поради факта, че докато четете данни, не е нужно да чакате заключванията на сесиите за писане да бъдат освободени и да изразходвате ресурси за настройка на собствени заключвания. От друга страна, този метод е най-лошият по отношение на получаването на актуални данни - нямагарантира, че след като данните бъдат върнати, данните са в същата форма в базата данни, всяка сесия за писане може да добавя, променя или изтрива записи.Обхват:Това ниво на изолация е идеално за четене на данни, за които е 100% гарантирано, че няма да бъдат променени от никого. Като пример можем да цитираме счетоводни задачи, където има концепция за приключване на периода на фактуриране (счетоводство, заплати, сметки за комунални услуги, работен ден и т.н.) или архивни данни. Също така е удобно да се използва това ниво на изолация, за да се получи текущото състояние на данните с некритична концепция за релевантност на данните. Тук като пример може да се посочи самият Sybase Central, който, използвайки това ниво на изолация, ви позволява да преглеждате данни по таблици, независимо дали те в момента се променят в писмени транзакции.
READ COMMITED (ISOLATION_LEVEL=1 опция)Дефиниция:Предадени данни само за четене.Описание:На това ниво на изолация сесията за четене вижда само ангажирани данни. Ако по време на изпълнение на заявката има данни, които според условията на заявката отговарят на нейните параметри, но в момента те са в непотвърдена транзакция, тогава изпълнението на заявката ще бъде спряно и сесията ще изчака освобождаването на заключването от тези данни, за да се реши окончателно дали тези данни ще бъдат включени в резултата от заявката. Самата сесия на четене, докато чете записи, ще затвори заключването само на текущия запис, който се обработва. При преминаване към следващия съвпадащ запис в таблицата, заключването на предишния ще бъде освободено и зададено върху новия обработен запис. По този начин това ниво на изолация от една страназависи от заключванията на сесии за запис, като частично блокира сесиите за запис и не изисква много ресурси, поради факта, че по време на обработката на записите се налага само едно заключване на текущия запис, който се обработва. Това ниво на изолация обаче също не гарантира получаването на актуални данни, тъй като по време на изпълнение на заявката е напълно възможно сесиите за писане да променят и изтриват данни, които вече са били обработени по време на заявката, и да добавят нови, които отговарят на параметрите на текущата заявка, главно за информативно представяне (срез) на данните в текущия момент. Препоръчително е това ниво на изолация да бъде зададено по подразбиране за всички свързани сесии.