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

намаление на цените сегменти, Oracle

Дмитрий Bezrukov,
ЗАО "ФОРС-ХОЛДИНГ"

намаление на цените сегменти (намаление на цените сегменти), наричани също отмените сегменти (например, USN - Отмяна Сегмент номер), предназначени да отговорят на три основни цели:

  1. Извършване на намаление на цените команда.
  2. възстановяване след срив съд (възстановяване например) а.
  3. Осигуряване на съгласуваност чете от базата данни (да се чете последователност)

Първата и втората точки са включени в литературата достатъчно подробно и разумно, но пълно описание на Oracle функционалност на параграф 3 не съм виждал.

Също така в литературата не съм виждал по-ясно описание на механизма на функциониране на сегментите на намаление на цените. Много добро описание на това е, странно, в старата документация за Oracle версии 3, 4 и 5. Въпреки това, докато все още има намаление на цените сегменти, но вместо това те са имали преди графичен файл, но концепциите остават същите. Има понятието "в началото и края", по мое мнение, по-добре ни помага да разберем схемата на работа намаление на цените сегменти.

Нека първо поговорим за съгласуваност, а след това - за намаление на цените сегменти устройство. Разбира се, тези теми не обхващат всички аспекти на управлението на намаление на цените сегменти, но това е много полезно за разбирането на тяхната структура и функционира.

Съвместимост на данни, за да се чете

Проблем за последователност четения (прочетете консистенция), свързани с "замразяване" на данните в базата данни по всяко време, както и доклада за потребителското получаването на тези данни. В момента на получаване на доклада за всички потребители на други потребители трябва да се допуска едновременно променят едни и същи данни (в противен случай драстично намалена конкурентоспособност на данни), така че съдържанието на базата данни постоянно се променя, и "замразени" данни е моментна снимка (снимка на) в базата данни на в някакъв момент от време. Механизмът на тези изображения в Oracle RDBMS чрез намаление на цените сегменти (намаление на цените сегменти или връщане сегменти), в които се съхраняват старите версии на данни. В случаите, когато otchetet опитва да чете данните модифицирани от други потребители по време на мандата си, версията на данните в началото на доклада на стария се чете от сегментите на намаление на цените. Oracle не осигурява гарантирани четат предишни версии на данни поради потенциала на триене в сегментите на намаление на цените от други потребители. В случай на стриване в по-старите версии на намаление на цените на данни сегменти, потребителят стартира доклада, грешка "ORA-1555 Snapshot твърде стар, отказвайте сегмент твърде малък". Колкото по-дълго на доклада, най-вероятно смесването на стари данни. Разработен в Форсайт GRC система е предназначена да гарантира съхранението на стари данни за продължителността на доклада.

Oracle осигурява съгласуваност на ниво отчет и на ниво на сделката.

Съвместимост на ниво оператор.

изберете оператор SQL език проба винаги чете последователни данни. Това означава, че ако в един момент изберете отчета чете всеки ред на таблицата и след известно време се чете една и съща линия отново, след въпроси на Oracle или една и съща информация, или за грешка ORA-1555.

Съвместимост на нивото на сделката.

Oracle поддържа следните видове операции:

  1. Транзакция, която чете данните, записани от други сделки, докато се изпълнява. Потребителят може изрично да започне сделка с транзакция прочете напише оператор настроен. транзакция подразбиране (от началото на сесията до първия ангажират / намаление на цените команда. от извършване / намаление на цените за следващия ангажират / намаление на цените сесия или в края) е сделка от този тип. Преди началото на всяка сделка по подразбиране имплицитно оператор определен сделка прочетете мнения. Ако две от изберете изявление в различните части на сделка от този тип се обръщат към един и същи ред в таблицата с база данни, то е възможно да се получат различни (противоречиви) резултати. Противоречието ще възникне в случай, че всеки потребител е променил и даде промените на тези линии на интервал от време между горните две оператори изберете. Това означава, че в една сделка може да чете данни, модифицирани и записани (ангажирана) от други потребители трябва да се отбележи, че появата на ORA-1555 за грешка може да се случи, ако Oracle не може да осигури съгласуваност да изберете нивото на оператора. включени в тази сделка.
  2. Транзакцията е "само за четене". Потребителят може да започне сделка с транзакция оператор настроен само за четене, и да завърши ангажират / намаление на цените отчета за. В рамките на тази сделка може да се използва само от операторите изберете. ГСД изявления не са разрешени. Стокова операторите да избират от различни части на сделка на едни и същи линии данни Oracle предоставя или една и съща последователна данните, които се намираха в базата данни по време започна на сделката (набор сделка само за четене) или грешка ORA-1555.
  3. Serializable сделка. Тази транзакция започва ниво operatoromset сделка изолация Serializable. Такива сделки са предназначени за сериализиране актуализации на конкурентни няколко потребители с едни и същи данни. С тези сделки, в същото време, издадени от различни потребители, в резултат на промяна на данни в базата данни, като например, ако се наблюдава последователност, т.е. първо един потребител започна и завърши сделката, след като се проведе второто си сделка, а след това на третия и т.н. Най-общо казано, процесът на сериализация на сделката е много сложна и не винаги е възможно да издавам двете проведени потребители няколко сделки. Имайте предвид, че ако записът в някоя маса или масата се извършва само от един и същи потребител, необходимостта от сериализация изчезва. Serializable сделки винаги са съобразени, т.е. всички проби получават данни от "моментна снимка" на базата, направена по време на оператор определен сделка ниво на изолация Serializable. При условие, че записът се извършва само в работната маса на потребителя, може да се лекува Serializable сделки: сделки за двете само за четене (само за четене) за изход ГСД изявления (вмъкване, изтриване и обновяване). Това е полезно, когато една програма за подготовка на доклад, спестява резултатите в междинните работни маси, от които се отпечатват в доклада.

Механизмът на сегментите на намаление на цените

При създаване на сегмент разпределени minextents намаление на цените все още празни степен, че първата степен oraklovsky първия блок е запазен за масата на сделката, или удар с глава на намаление на цените сегмент. Ние казваме, че главата и опашката egmenta намаление на цените на са в началото на втория блок на първата степен веднага след заглавието (вж. Фиг. 1). При определяне това намаление на цените транзакция информация сегмент намаление на цените се записва от втория блок, където съществува всяко активно транзакция като главата и опашката в сегмента на намаление на цените. Когато модификация на данните и намаление на цените сделка ходове сделка влизане сегмент на главата, попълване на първия блок и евентуално следните размерите. В този случай съвпада с намаление на цените опашка сегмент опашка транзакция (вж. Фигура 2). Виж, където сегментите на главата намаление на цените до доколкото е възможно и единица в таблица V $ ROLLSTAT в колони и Curext Curblk съответно (първа степен е номер 0).

Rollback сегменти в Oracle Database

След приключване на транзакцията е ангажиран оператор се ангажира, намаление на цените опашка сегмент се премества в главата (вж. Фиг. 3). Ето главата и опашката ще сочи към първия байт след опашката на чрез блокова сделка. Информация за записване корекция на следващото насрочено за този сегмент от сделката ще бъде поставен в степен блок, преместване на главата и опашката сегмент на сделката още по часовниковата стрелка. След информацията за операцията фиксиране намаление на цените, записани в размерите 1 и 2, тя става "неактивен" и могат да бъдат използвани, за да докладва получаване на старите версии на данни, т.е. да се осигури съгласуваност.

Long намаление на цените сделка сегмент се движи главата си по време на запис на данни. С попълването степен, главата се премести в друга степен, тогава следващата и т.н. - в кръг. Твърди се, че сегментите на намаление на цените имат структура пръстен (змията). Това означава, че след запълването на четвърта степен, записът продължава в първия или. това, което е същото, главата се премества в първата степен. В този смисъл важно правило: на опашката на сегмента на намаление на цените никога не може да се движи до степента, в която главата е. По този начин, ако сегментът на главата намаление на цените е в степента, 4, последният блок е пълен (опашка се е преместил в крайните размерите) и да продължи сделката допълнително движение на опашката изисква посока на часовниковата стрелка, сегментът на намаление на цените на добавяне пета степен (змия протегна) и главата се премества в първия си блок (фиг. 4). Брой на щамове от стартирането на базата данни е влязъл в простира колона от V $ ROLLSTAT.

Ако броят на сделките, записани в информацията за намаление на цените сегмент в същото време, в сегмента на опашката съвпада с опашката много назначен на сегмента на намаление на цените на активната сделка и сегментът на главата

Rollback сегменти в Oracle Database
- с глава на последния регистриран информацията намаление на цените на активната сделката. Тъй като сделката е извършено от оператора ангажират опашка намаление на цените сегмент се опитва да се изравнят с глава. Ако всички операции са фиксирани и в този сегмент, няма активен намаление на цените транзакция, същия сегмент на опашката с главата му [prim.7] (фиг. 3). Степен, може да се използва за запис на информацията за намаление на цените от няколко сделки, но в степен, всяка единица съхранява информация само от една сделка.

Ние разгледахме случая, когато се добавят степен, в сегментите на намаление на цените. Сега помисли механизма за отстраняване на степен (змията се пресова) на сегментите на намаление на цените. Всеки знае, че в размерите могат да бъдат отстранени (за да се върнете към списъка с безплатни степен $ БНТ) по два начина: чрез издаване на оператора да промени намаление на цените сегмент ... автоматично се свие с определяне на оптимално дума в съхранението на израза при създаване или промяна на намаление на цените сегмент. Първият метод, въпреки че има няколко "gotchas", обикновено не предизвиква проблеми. Но втория път към друг, като причина. Често задаван въпрос в такива случаи: "А защо намаление на цените сегмент се увеличи до 20 мегабайта, но не иска да се свива, въпреки че оптималния набор от 5 мегабайта?". Фактът, че за започване на процедурата по отстраняване степен от сегмента на намаление на цените изисква настъпването на определено събитие, а именно, изпитвания и оптимално отстраняване на размерите е направено при преместване сегмент глава към следващата степен. По този начин, този сегмент не е компресиран откат веднага след сделката, която е предизвикала сегмент разширение намаление на цените. Compression се случва, когато други сделки, предназначени за тази намаление на цените сегмент попълват настоящият обхват до края. Брой на компресии след стартиране на база данни се записва в колона се свива от V $ ROLLSTAT.

А сега да разгледаме един от проблемите, на проблема с блокирането на сделки. което може да се случи в много потребители системен администратор. Да предположим, че даден потребител или оператор недисциплинирана започна да извършат покупка (например, въведени във всяка маса) не го завърши с помощта на оператор за извършване, и отиде за техния бизнес за дълго време. Информация намаление на цените за тази транзакция записан в някакъв вид намаление на цените сегмент, т.е. сегмента на главата се е преместила на известно разстояние и сделката ще остане активен. Опашката на тази сделка е в непосредствена близост до главата, вероятно в същия блок. Не извърши транзакцията потребителят е отишъл, както и много други хора, които все още актуализиране на данните. Информация корекция на различни сделки, се записва в операционни намаление на цените сегменти, включително този, когато сделката е назначен за член на миналото. Ръководителят на този сегмент се движи още по часовниковата стрелка и се стигне до най-каква степен всяка опашката е активен потребител сделка отиде. В този момент, на опашката на тази дейност се блокира сделката стана опашка всички сегмента на намаление на цените. От главата не може да се движи в степента, в която на опашката, добавя нова степен, а главата се премества към него. След това друг и т.н. въпреки факта, че между главата и опашката, всички блокове на всички степени неактивни (всички сделки са регистрирани ангажират оператори). Това може да предизвика препълване таблици намаление на цените сегменти. Следователно морал - администраторът трябва да излезе със системата за заснемане на недисциплинираните потребители, например, да се използва времето на престой в профила. въпреки че това не винаги е възможно. За да разберете кои потребители блокират намаление на цените сегменти могат да се изпълняват с помощта на следния скрипт:

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

Сега малко за механизмите, които поддържат съгласуваност на данните. След намаление на цените сегмент глава ще направи пълен обрат, информацията от намаление на цените на неактивно сделка започва да бъде заменена с новия. Броят на презаписва (пълни обороти) от самото начало на процеса се отразява в базата данни Извършва пренос колона от V $ ROLLSTAT. По този начин, това е теоретично възможно да се направи всичко намаление на цените сегменти толкова големи, че сегашната сделка няма да направи главите на всички сегменти намаление на цените, за да се направи пълен обрат в разумен срок за доклада, например, в продължение на няколко часа. Но на практика това не е възможно в продължение на няколко очевидни причини, главен сред тях - невъзможността да се предскаже на обема на осъвременявания на базата данни от други сделки. Така, че е невъзможно да се осигури гарантирано последователни измервания, т.е. не е гарантирана поява ORA-1555 грешка при работа, например, дълго доклад (само за четене транзакция), които по същество изчерпва функционалност. Но, за щастие, за да се осигури съгласуваност на възможните четения. За да направите това, вие трябва само да се изкуствено да блокира всяка оперативна намаление на цените на сегмента кратки транзакции преди изпълнението на доклада и да отключите, т.е. да се определи сделката след изпълнение. Поради това е възможно да се отворят няколко допълнителни сесии за броя на намаление на цените сегменти, всеки един от тях, за да блокира кратко сделка намаление на цените сегмент с използване сделка намаление на цените сегмент оператор настроен и да изготвя отчета. В същото време, изменение на заседанията могат да получат от съобщение за грешка Oracle заради невъзможността да разширите блокиран намаление на цените сегмент, но изпълнява доклад сесия никога няма да се ORA-1555.

1. Понякога в руски език последователността на литературата база данни, терминът се превежда като "почтеност", които, по мое мнение, грешно, тъй като руската дума "почтеност" е запазен за превода на английски думата "почтеност".

2. Предполага се, че интервалът от време между показанията ред може да бъде модифициран от други потребители с извърши (извършат) произволен брой пъти.

3. В този тип SQL стандарт сделка се наричат: прочетете ангажиран. Започвайки с Oracle 8.1.5 версия, набор оператор сделката чете запис синоним условие - оператор определен сделка ниво на изолация прочетеният извършено.

4. Между другото, като се започне с версия 8.1.5 Oracle сървър, приложени специални работни маси, които работят в сесия или сделка на потребителя, който DML операции се извършват много по-бързо, отколкото при конвенционалните маси с защото, който се актуализира рекорд в трупите (ремонтирам трупи) е блокиран. Поради тази причина, също постига спестяване на дисково пространство в журналите на ремонтирам.

5. Животни, които трябва да се мисли в употреба на термините "главата" и "опашка" - змия. Змия има тенденция да се сгуша на ринга и хапе опашката си. Гумени змия, протегна се и се пресоват.

6. номериране степен специален няма смисъл и тук се предоставя само с илюстративна цел. Сред всички размерите на намаление на цените на сегмента специален статут има само в степента, първият от които е масата на блокова сделка. Брой степени в представителството DBA_EXTENTS - 0, и то не може да бъде изтрит от сегмента на намаление на цените

7. Змията ухапан собствената си опашка, и се успокои.

8. В действителност, реалността е по-трудно, след описание на мен, като информация за извършено сделка може да бъде заменена с нова транзакция в таблицата за сделка, но за щастие, Oracle може да го разбера.

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