Кіріспе
Бір мезгілде есептеу операцияларының дұрыс нәтижелер беруін қамтамасыз ету шаралары Ақпараттық технология және компьютерлік ғылымда, әсіресе компьютерлік бағдарламалау, операциялық жүйелер, көппроцессорлық жүйелер және деректер базалары салаларында, бір мезгілде орындалатын операциялардың дұрыс нәтижелер беруін қамтамасыз етеді, сонымен қатар осы нәтижелерді мүмкіндігінше жылдам алуға көмектеседі. Компьютерлік жүйелер, бағдарламалық және аппараттық құралдардан тұрады, модульдерден немесе компоненттерден құралған. Әрбір компонент дұрыс жұмыс істеуі үшін, яғни белгілі бір сәйкестік ережелерін орындауы немесе қанағаттандыруы тиіс. Бір мезгілде жұмыс істейтін компоненттер хабар алмасу арқылы немесе ортақ деректерді (жадта немесе сақтағышта) пайдалану арқылы өзара әрекеттескен кезде, бір компоненттің сәйкестігі екінші компонент тарапынан бұзылуы мүмкін. Бір мезгілде жұмыс істейтін компоненттердің өзара әрекеттесу кезінде тұрақтылығын сақтау үшін қағидалар, әдістер, жобалау әдістемелері және теориялар ұсынылады, осылайша бүкіл жүйенің тұрақтылығы мен дұрыстығы қамтамасыз етіледі. Жүйеге бір мезгілде жұмыс істеуді бақылауды енгізу, әдетте, өнімділікті төмендетуге әкелетін операциялық шектеулерді қолдануды білдіреді. Операциялардың тұрақтылығы мен дұрыстығына мүмкіндігінше тиімділікпен қол жеткізілуі керек, бірақ өнімділіктің қалыпты деңгейден төмендеуіне жол берілмеуі тиіс. Бір мезгілде басқару, қарапайым тізбекті алгоритммен салыстырғанда бір мезгілде орындалатын алгоритмде айтарлықтай күрделілік пен қосымша шығындарды тудыруы мүмкін. Мысалы, бір мезгілде жұмыс істеуді бақылаудың қателіктері, деректердің бұзылуына, жазылған немесе оқылған деректердің дұрыс болмауына әкелуі мүмкін.
In information technology and computer science, especially in the fields of computer programming, operating systems, multiprocessors, and databases, concurrency control ensures that correct results for concurrent operations are generated, while getting those results as quickly as possible. Computer systems, both software and hardware, consist of modules, or components. Each component is designed to operate correctly, i. e., to obey or to meet certain consistency rules. When components that operate concurrently interact by messaging or by sharing accessed data (in memory or storage), a certain component's consistency may be violated by another component. The general area of concurrency control provides rules, methods, design methodologies, and theories to maintain the consistency of components operating concurrently while interacting, and thus the consistency and correctness of the whole system. Introducing concurrency control into a system means applying operation constraints which typically result in some performance reduction. Operation consistency and correctness should be achieved with as good as possible efficiency, without reducing performance below reasonable levels. Concurrency control can require significant additional complexity and overhead in a concurrent algorithm compared to the simpler sequential algorithm. For example, a failure in concurrency control can result in data corruption from torn read or write operations.
Деректер қорының операциясы және ACID ережелері
Деректер базасының транзакциясы (немесе атомдық транзакция) түсінігі, деректер базасы жүйесінің сенімді емес ортада, кез келген уақытта апаттар болатын жағдайда, жақсы түсінілетін әрекетін және апаттан кейін деректер базасының жақсы түсінілетін күйіне қайта келтірілуін қамтамасыз ету мақсатымен дамыды. Деректер базасының транзакциясы – бұл жұмыс бірлігі, әдетте деректер базасымен бірнеше операцияларды қамтиды (мысалы, деректер базасының нысанын оқу, жазу, құлып қою және т.б.), деректер базасында және басқа жүйелерде қолдау көрсетілетін абстракция. Әрбір транзакцияның нақты шекаралары болады, олар бойынша бағдарламаның/кодтың орындалуы осы транзакцияға кіреді (транзакцияның бағдарламашысы арнайы транзакция командалары арқылы анықтайды). Кез келген деректер базасының транзакциясы келесі ережелерді сақтайды (деректер базасы жүйесінің қолдауы арқылы; яғни, деректер базасы жүйесі оларды іске асыратын транзакциялар үшін кепілдік береді): Атомдық – Транзакция аяқталғанда (құптау немесе тоқтату арқылы) оның барлық немесе ешбір операциясының нәтижесі сақталады («барлығы немесе ештеңе» принципі). Басқаша айтқанда, сыртқы әлемге құптау алған транзакция (деректер базасына тигізген әсері бойынша) бөлінбейтін (атомдық) болып көрінеді, ал тоқтатылған транзакция деректер базасына ешқандай әсер етпейді. Барлық операциялар орындалады немесе ешқайсысы да орындалмайды. Үйлесімділік – Әрбір транзакция деректер базасын үйлесімді (дұрыс) күйде қалдыруы керек, яғни деректер базасының алдын ала белгіленген тұтастығының ережелерін (деректер базасының нысандары мен олардың арасындағы шектеулерді) сақтауы керек. Транзакция деректер базасын бір үйлесімді күйден екінші үйлесімді күйге өзгертуі керек (бірақ транзакцияның бағдарламашысы транзакцияның өзі дұрыс екеніне көз жеткізуі керек, яғни ол орындауға ниеттенген нәрсені (қосымшаның көзқарасы бойынша) дұрыс орындайды, ал алдын ала белгіленген тұтастық ережелері ДБЖС-мен сақталады). Сондықтан деректер базасын тек транзакциялар арқылы ғана өзгертуге болады, сондықтан деректер базасының барлық күйлері үйлесімді болады. Жекелендіру – Транзакциялар бір-біріне кедергі келтіре алмайды (олардың орындалуының соңғы нәтижесі ретінде). Сонымен қатар, әдетте (бірмезгілділік басқару әдісіне байланысты) аяқталмаған транзакцияның әсері басқа транзакцияға тіпті көрінбейді. Жекелендіруді қамтамасыз ету – бірмезгілділік басқарудың басты мақсаты. Тұрақтылық – Сәтті (құптау алған) транзакциялардың нәтижелері апаттар кезінде сақталуы керек (әдетте транзакцияның нәтижелері мен оның құптау оқиғасы ұдайы жадта жазылады). Атомдық транзакция түсінігі жылдар бойына бизнес-транзакцияларға дейін кеңейтілді, олар жұмыс ағынының түрлерін іске асырады және атомдық емес. Дегенмен, мұндай кеңейтілген транзакциялар әдетте атомдық транзакцияларды құралымдық бөліктер ретінде пайдаланады.
Atomicity Either the effects of all or none of its operations remain ("all or nothing" semantics) when a transaction is completed (committed or aborted respectively). In other words, to the outside world a committed transaction appears (by its effects on the database) to be indivisible (atomic), and an aborted transaction does not affect the database at all. Either all the operations are done or none of them are. Consistency Every transaction must leave the database in a consistent (correct) state, i. e., maintain the predetermined integrity rules of the database (constraints upon and among the database's objects). A transaction must transform a database from one consistent state to another consistent state (however, it is the responsibility of the transaction's programmer to make sure that the transaction itself is correct, i. e., performs correctly what it intends to perform (from the application's point of view) while the predefined integrity rules are enforced by the DBMS). Thus since a database can be normally changed only by transactions, all the database's states are consistent. Isolation Transactions cannot interfere with each other (as an end result of their executions). Moreover, usually (depending on concurrency control method) the effects of an incomplete transaction are not even visible to another transaction. Providing isolation is the main goal of concurrency control. Durability Effects of successful (committed) transactions must persist through crashes (typically by recording the transaction's effects and its commit event in a non volatile memory). The concept of atomic transaction has been extended during the years to what has become Business transactions which actually implement types of Workflow and are not atomic. However also such enhanced transactions typically utilize atomic transactions as components.
Неліктен бір мезгілдегі бақылау қажет?
Егер мәмілелер тізбектей, яғни уақыт бойынша үсті-үстіне орындалса, мәмілелердің бір мезгілде орындалуы болмайды. Дегенмен, егер араласып өтетін операциялары бар бір мезгілдегі мәмілелерге бақылаусыз рұқсат берілсе, кейбір күтпеген, жағымсыз нәтижелер туындауы мүмкін, мысалы:
Жоғалған жаңарту проблемасы: Екінші мәміле бірінші мәміле жазған дерек элементінің мәнін екінші мәнмен жазады, нәтижесінде бірінші мәміленің жазған мәні басқа бір мезгілде орындалып жатқан мәмілелерге жоғалады, оларға алдында жазылған мәнді оқу қажет. Қате мәнді оқыған мәмілелер дұрыс емес нәтижелермен аяқталады.
Лас оқу проблемасы: Мәмілелер кейіннен тоқтатылған мәміле жазған мәнді оқиды. Бұл мән тоқтатылған кезде дерекқордан жоғалады және ешқандай мәмілемен оқылмауы керек («лас оқу»). Оқу операциялары дұрыс емес нәтижелермен аяқталады.
Бұрыс жиынтық проблемасы: Бір мәміле қайталанатын дерек элементінің барлық мысалының мәндерін жиынтықтаса, екінші мәміле сол дерек элементінің кейбір мысалдарын жаңартады. Нәтижесінде алынған жиынтық екі мәміленің арасындағы дұрыс тәртіпке (әдетте дұрыстық үшін қажет) сәйкес келмейді, керісінше, жаңартулардың уақытына және жаңарту нәтижелері жиынтыққа енгізілгеніне немесе енгізілмегеніне байланысты кездейсоқ нәтиже береді. Көптеген жоғары өнімді транзакциялық жүйелер өнімділік талаптарын орындау үшін мәмілелерді бір мезгілде орындау қажеттігіне ие. Осылайша, бір мезгілдегі бақылаусыз жүйелер дұрыс нәтижелер бере алмайды және дерекқорларын дәйектілікте сақтай алмайды.
The lost update problem: A second transaction writes a second value of a data item (datum) on top of a first value written by a first concurrent transaction, and the first value is lost to other transactions running concurrently which need, by their precedence, to read the first value. The transactions that have read the wrong value end with incorrect results. The dirty read problem: Transactions read a value written by a transaction that has been later aborted. This value disappears from the database upon abort, and should not have been read by any transaction ("dirty read"). The reading transactions end with incorrect results. The incorrect summary problem: While one transaction takes a summary over the values of all the instances of a repeated data item, a second transaction updates some instances of that data item. The resulting summary does not reflect a correct result for any (usually needed for correctness) precedence order between the two transactions (if one is executed before the other), but rather some random result, depending on the timing of the updates, and whether certain update results have been included in the summary or not. Most high performance transactional systems need to run transactions concurrently to meet their performance requirements. Thus, without concurrency control such systems can neither provide correct results nor maintain their databases consistently.
Бір мезгілдегі қызметті бақылау механизмдерінің негізгі мақсаттары
Бір мезгілделік басқару механизмдері ең алдымен дұрыс жұмыс істеуі керек, яғни транзакциялар бір мезгілде орындалғанда әрбір транзакцияның тұтастығы ережелерін сақтау керек (бір мезгілделікке қатысты; қолданбаға тән тұтастық ережелері осы мәселенің шеңберінде қарастырылмайды), соның арқасында бүкіл транзакциялық жүйенің тұтастығы қамтамасыз етілуі тиіс. Дұрыс жұмыс істеуге мүмкіндігінше жоғары өнімділікпен қол жеткізу қажет. Бұған қоса, транзакциялар процестер, компьютерлер және компьютерлік желілер бойынша таратылған кезде тиімді жұмыс істеу қажеттілігі күшейе түсуде. Бір мезгілделік басқаруға әсер ететін басқа да мәселелер – деректерді қалпына келтіру және көшіру.
Сериялану мүмкіндігі
Дұрыс болу үшін, көптеген бір мезгілдестікті басқару механизмдерінің басты мақсаты – сериялану қасиетіне ие кестелер жасау болып табылады. Сериялану сақталмаса, жағымсыз жағдайлар туындауы мүмкін, мысалы, шоттардан ақша жоғалуы немесе ештен пайда болуы мүмкін. Кестедегі сериялану, дерекқорындағы мәліметтердің нәтижесінде, сол транзакциялармен бірдей сериялық кестеге теңдестік (яғни, транзакциялар уақыт бойынша бірінен соң бірі орындалады, ешқандай уақыт аралығында қабаттаспайды, сонымен қатар бір-бірінен толық оқшауланған: екі транзакцияның бір уақытта бір дерекке қол жеткізуіне мүмкіндік жоқ) дегенді білдіреді. Сериялану дерекқоры транзакциялары арасындағы оқшауланудың ең жоғары деңгейі және бір мезгілдегі транзакциялар үшін басты дұрыстық өлшемі болып саналады. Кейбір жағдайларда, жақсы өнімділік үшін (мысалы, танымал Snapshot оқшаулау механизмі) немесе жоғары таратылған жүйелерде қолжетімділік талаптарын орындау үшін серияланудың жеңілдетілген түрлеріне рұқсат етіледі (соңғы сәйкестілікке қараңыз), бірақ бұл жеңілдету қосымшаның дұрыстығын бұзбаса ғана мүмкін (мысалы, ақша операциялары үшін жеңілдетуге жол берілмейді, себебі жеңілдету нәтижесінде ақша жоғалуы немесе ештен пайда болуы мүмкін). Құрылған дерлік барлық бір мезгілдестікті басқару механизмдері сериялануды қамтамасыз ету арқылы, серияланудың кең арнайы жағдайы – қақтығыс сериялануына (яғни, ол көптеген серияландырылған кестелерді қамтиды, мүмкіндік береді және қосымша кешігу тудыратын шектеулерді енгізбейді) қол жеткізеді, оны тиімді жүзеге асыруға болады.
Тарату
Компьютерлік технологияның қарқынды дамуымен қатар, төмен кешігуі бар желілер немесе шиналар арқылы жергілікті және таратылған есептеулер арасындағы шекаралар нашарлап барады. Сондықтан, мұндай таратылған ортада жергілікті техниканы тиімді пайдалану кең таралған, мысалы, компьютерлік кластерлерде және көп ядролы процессорларда. Дегенмен, жергілікті техниканың шектеулері бар және оларды кеңейту үшін көп процессорлар (немесе көп ядролар) қолдауымен бірнеше процестер (немесе жіптер) пайдаланылады. Бұл жиі жағдайларда транзакцияларды таратылған түрге айналдырады, егер олардың өзі бірнеше процесті қамтыса. Мұндай жағдайларда көптеген жергілікті параллелизмді басқару техникалары тиімді кеңеймейді.
Қайтару
Барлық жүйелер ақауларға бейім, ал ақаудан қалпына келтіруді басқару қажет. Бір мезгілде жұмыс істеуді бақылау механизмімен анықталатын жасалған кестелердің қасиеттері, қалпына келтірудің тиімділігі мен нәтижелілігіне әсер етуі мүмкін. Мысалы, қатаңдық қасиеті (жоғарыдағы қалпына келтіру бөлімінде айтылғандай) тиімді қалпына келтіру үшін көбінесе қажет болады.
Көшіру
Жоғары қолжетімділік үшін деректер базасы объектілері көбінесе көшіріледі. Бір деректер базасының көшірмелерінің жаңартуларын синхронды ұстау қажет. Бұл бірдей уақытта қолжетімділікті басқару әдісіне әсер етуі мүмкін (мысалы, Gray et al. 1996 ж.).
Операциялық жүйелердегі бір мезгілдегі басқару
Көп тапсырмалы операциялық жүйелер, әсіресе нақты уақыт операциялық жүйелері, аппараттық шектеулерге байланысты бір немесе бірнеше тапсырма ғана нақты бір сәтте орындалса да, олардың үстіндегі барлық тапсырмалар бірдей уақытта орындалып жатқандай сезім тудыруы керек. Егер тапсырмалар бір-бірінен тәуелсіз болса, мұндай көп тапсырмалылық өте оңай. Бірақ, егер бірнеше тапсырма бірдей ресурсты пайдалануға тырысса немесе ақпарат алмасуға тырысса, шатасу мен үйлесімсіздік туындауы мүмкін. Параллель есептеудің мақсаты – осы мәселені шешу. Кейбір шешімдер дерекқорында қолданылатын құлыптар сияқты "құлыптарды" пайдаланады, бірақ олар өздеріне тән мәселелерді, мысалы, тұйықталуды тудыруы мүмкін. Басқа шешімдерге бұғаттамау алгоритмдері және оқу-көшіру-жаңарту әдістері жатады.