Elkarblokeatzeak (Deadlock) Datu-baseetan: Protokoloak
Clasificado en Francés
Escrito el en
vasco con un tamaño de 3,27 KB
Elkarblokeatzea (Deadlock)
Ekintzak
Elkarblokeatze-egoeran egon litekeen transakzio batek zera egin dezake:
- Itxaron
- Bertan behera geratu
- Beste transakzio bat bertan gerarazi
Protokolo motak
- Saihesteko protokoloak: Transakzio guztiek elementuak hasieratik erreserbatzen dituzte.
- Elementuak luzaroago erreserbatuta daude.
- Erabiliko diren elementuak aurretik ezagutu behar dira.
- Detektatzeko protokoloak: Aldiro-aldiro, sistemak elkarblokeatze-egoerarik badagoen begiratzen du.
Protokoloen sailkapena
- Saihesteko protokoloak:
- Aldez aurretik erreserbatzea
- Erreserba ordenatua
- Transakzioen denbora-zigiluak
- Ez-itxarote protokoloa
- Itxarote zuhurreko protokoloa
- Denbora-mugak
- Detektatzeko protokoloak:
- Itxarote-grafoak
Saihesteko protokoloak
Aldez aurretik erreserbatzea
2PL kontserbatzaileak erabiltzen du. Transakzio guztiek egikaritzen hasi aurretik erabiliko dituzten elementu guztiak erreserbatu behar dituzte. Elementu guztiak ezin badira erreserbatu, itxaron eta berriro saiatu behar da. Ondorioz, konkurrentzia-maila asko murrizten da.
Erreserba ordenatua
Datu-baseko elementuak ordenatzen dira (erreserbatze-ordena). Transakzio guztiek elementu bat baino gehiago erreserbatu behar badituzte, erreserbatze-ordenaren arabera egingo dute. Konkurrentzia-maila asko murrizten da eta ez da praktikoa, programatzaileak elementuen erreserbatze-ordena ezagutu behar duelako.
Transakzioen denbora-zigiluak
Transakzio bakoitzari denbora-zigilua esleitzen zaio: time(T). Identifikatzaile uniboko hau haste-ordenan oinarrituta dago: zaharrenak balio txikiena du eta berrienak handiena.
Deadlock-a saihesteko eskemak (Ti transakzioa X erreserbatzen saiatzen denean eta Tj-k erreserba hori badu):
Itxaron – Hil (Wait-Die)
IF time(Ti) < time(Tj) THEN Ti itxaron ELSE Ti bertan behera utziko da eta denbora-zigilu berarekin berrabiaraziko da
- Ti zaharrago batek Tj berriago bat bukatu arte itxarongo du.
- Ti berriago batek bere burua hilko du eta berriz egikaritzen hasiko da denbora-zigilu berarekin.
- Elkarblokeatze-egoera sor dezakeen transakziorik berriena bertan behera uzten da.
Zauritu – Itxaron (Wound-Wait)
IF time(Ti) < time(Tj) THEN Tj bertan behera utziko da eta denbora-zigilu berarekin berrabiaraziko da ELSE Ti itxaron
- Ti berriago batek Tj zaharrago bat bukatu arte itxarongo du.
- Tj berriago bat bertan behera utziko da eta berriz egikaritzen hasiko da denbora-zigilu berarekin.
- Transakzio zaharrago batek transakzio berriago bat bertan behera uzten du elkarblokeatze-egoera sor badaiteke.
Desabantailak
Bi eskemek bertan behera uzten dituzte elkarblokeatze-egoeran egon litezkeen transakzioak. Bi tekniketan gerta liteke transakzio batzuk premiarik gabe bertan behera utzi eta berrabiaraztea, transakzio horiek elkarblokeatzerik sorraraziko ez luketen arren.