Az előadás
anyagához kapcsolódó
példák és
feladatok: - Molina-Ullman-Widom:
Adatbázisrendszerek
megvalósítása, Panem, 2001.
9.1-9.3.fejezetek és 10.3. fejezet:
Konkurenciavezérlés
P6.
Feladatok ütemezésre
Feladatok - Molina-Ullman-Widom:
Adatbázisrendszerek
megvalósítása
Tk. "9. Konkurenciavezérlés"
és "10.3.
Holtpontkezelés" fejezetei alapján,
az alapfogalmak, definíciók ismerete
szükséges a feladatok
megoldásához. Segédanyag:konkurencia.ppt
9.1.2 Feladat
(ehhez
hasonló)
Adott az alábbi három tranzakció.
Adjuk meg az X adatbáziselem lehetséges
értékeit a tranzakciók
lefutása után, feltéve, hogy a
tranzakciók ütemezése
soros, és X kezdeti értéke 100.
T1: READ(X,t); t:=t+100; WRITE(X,t);
T2: READ(X,t); t:=t*2; WRITE(X,t);
T3: READ(X,t); t:=t+10; WRITE(X,t);
a.) Hányféle soros ütemezése
van
a fenti 3 tranzakciónak?
b.) Hányféle különböző
ütemezése van a fenti 3 tranzakciónak?
c.) Hányféle különböző
ütemezése van két
tranzakciónak,
ha az egyik n db, a másik
pedig k db műveletből áll?
Molina-Ullman 9.2.
fejezete: Konfliktus sorosíthatóság -- Alapfogalmak: ekvivalens
ütemezés, konfliktus (conflict),
konfliktus-sorosítható
ütemezés (conflict-serializable schedule),
megelőzési gráf (precedence
graph) 9.2.1
Feladat
Adott az alábbi két
tranzakció.
T1: READ(A,t); t:=t+2; WRITE(A,t); READ(B,t); t:=t*3; WRITE(B,t);
T2: READ(B,s); s:=s*2; WRITE(B,s); READ(A,s); s:=s+3; WRITE(A,s);
a.) Igazoljuk, hogy a (T1,T2) és (T2,T1) soros
ütemezések ekvivalensek,
vagyis az adatbázison
való
hatásuk azonos. A két tranzakció
hatását
tetszőleges A=a és B=b
kezdeti
adatbázis-állapotból
vizsgáljuk meg!
b.) Adjunk példát a fenti műveletek nem soros, de
sorosítható valamint
nem sorosítható
ütemezésére is.
9.2.2 Feladat
Az előző feladat tranzakcióiban csak az
írási és olvasási
műveleteket jelölve
a következő két tranzakciót kapjuk:
T1: r1(A); w1(A); r1(B); w1(B);
T2: r2(B); w2(B); r2(A); w2(A);
a.) A fenti 8 művelet ütemezései
közül hány darab konfliktusekvivalens
a (T1,T2) soros sorrenddel?
b.) A 8 művelet hány darab
ütemezése ekvivalens a (T2,T1) soros
sorrenddel?
9.2.3 Feladat
Adjuk meg a konfliktus-sorosítható
ütemezések
számát az
alábbi tranzakciókra:
T1: r1(A); w1(A); r1(B); w1(B);
T2: r2(A); w2(A); r2(B); w2(B);
9.2.4 Feladat
Adjuk meg az alábbi ütemezések
megelőzési gráfját.
Állapítsuk meg,
hogy konfliktus-sorosítható-e az
ütemezés?
Ha
igen, akkor
melyek az ekvivalens soros ütemezések?
Válasszunk ki egyet
és
alakítsuk át konfliktus-mentes
cserékkel
az ütemezést a
kiválasztott soros
ütemezéssé:
a.) r1(A); r2(A); r3(B); w1(A); r2(C); r2(B); w2(B); w1(C);
b.) r1(A); r2(A); w1(B); w2(B); r1(B); r2(B); w2(C); w1(D);
c.) r1(A); r2(A); r1(B); r2(B); r3(A); r4(B); w1(A); w2(B);
9.2.6 Feladat (Szorgalmi HF+)
Adjunk meg tetszőleges n-re egy olyan ütemezést,
amelynek megelőzési
gráfja tartalmaz n
hosszúságú kört, de nem
tartalmaz rövidebb kört.
P7.
Feladatok zárakra
Feladatok - Molina-Ullman-Widom:
Adatbázisrendszerek
megvalósítása
Tk. "9. Konkurenciavezérlés"
és "10.3.
Holtpontkezelés" fejezetei alapján,
az alapfogalmak, definíciók ismerete
szükséges a feladatok
megoldásához. Segédanyag:konkurencia.ppt
Molina-Ullman 9.3.
fejezete: A sorosíthatóság
biztosítása
zárakkal -- Alapfogalmak:
tranzakciók konzisztenciája (consistency of
transactions),
az ütemezések
jogszerűsége (legality of schedules),
kétfázisú
zárolás (2PL) 9.3.2
Feladat
T1: l1(A); r1(A); w1(A); l1(B); r1(B); w1(B); u1(A); u1(B);
T2: l2(B); r2(B); w2(B); l2(A); r2(A); w2(A); u2(B); u2(A);
a.) Kétfázisú-e a fenti két
tranzakció?
b.) Hány jogszerű ütemezést tudunk
készíteni a fenti tranzakciók
írási
és olvasási
műveleteiből?
c.) Adjunk példát egy olyan
tranzakcióra, amely
nem kétfázisú.
-- Órai feladatok (II.ZH-ra)
Adjuk meg az alábbi ütemezésekre, hogy
jogszerűek-e,
valamint a bennük
szereplő tranzakciókról,hogy melyek konzisztensek
illetve
kétfázisúak.
a) l1(A); w1(A); l1(B); u1(A); l2(A); w2(A); u2(A); r1(B); l2(C);
w2(C); u2(C); u1(B)
b) l1(A); w1(A); u1(A); l2(A); w2(A); l1(B); u2(A); r1(B); l2(C);
w2(C); u2(C); u1(B)
c) l1(A); w1(A); l2(A); w2(A); l1(B); u1(a); u2(A); r1(B); l2(C);
w2(C); u2(C); u1(B)
9.3.4 Feladat
Tekintsük a következő, két műveletből
álló tranzakciót: r1(A), w1(B),
valamint a szükséges l1(A), u1(A), l1(B), u1(B)
zárkezelő műveleteket.
Adjuk meg, hogy a műveleteknek hányféle
lehetséges sorrendje lehet úgy,
hogy a tranzakció
a) konzisztens és kétfázisú
zárolású legyen
b) konzisztens de nem kétfázisú
zárolású legyen
c) nem konzisztens,
de kétfázisú
zárolású legyen
d) se nem konzisztens, se nem
kétfázisú
zárolású legyen
Molina-Ullman
10.3. fejezete:
Holtpontkezelés -- Alapfogalmak: holtpont (deadlock),
várakozási gráf (waits-for graph) -- Órai feladatok (II.ZH-ra)
Rajzoljuk fel a következő ütemezéshez
tartozó várakozási gráfot a
7., és 9. lépés után.
l1(A); l2(B); l3(C); l1(D); l2(A); l3(D); l3(B); u1(A); l2(C); ... 10.3.1
Feladat
Tegyük fel, hogy az alábbi műveletsorozatokban
minden egyes
olvasás illetve
írásműveletet közvetlenül
megelőzi a (kizárólagos) zár
igénylése. Tegyük fel
továbbá, hogy a
zárak
feloldása rögtön a
tranzakció
utolsó művelete után
történik meg. Adjuk meg
azokat a műveleteket, amelyeknek a
végrehajtását
az ütemező megtagadja, és mondjuk meg, hogy
létrejön-e holtpont
vagy sem!
Adjuk meg, hogy hogyan alakul a műveletek
végrehajtása
során
a várakozási gráf!
Ha holtpont jön létre, akkor
szakítsuk meg (abort) az egyik
tranzakciót, és
mutassuk meg hogyan folytatódik a műveletsorozat!
Molina-Ullman 9.4.
fejezete: Osztott és
kizárólagos zárak
-- Órai feladatok (II.ZH-ra) Rajzoljuk fel a
következő ütemezéshez
tartozó várakozási gráfot a
10. lépés után
rl1(A); wl2(B); wl3(C); wl3(D); rl1(B); wl4(C); rl2(D); rl4(A); rl1(D);
u3(D); ... 9.4.1
Feladat
A T1, T2 és T3 tranzakciók minden
alábbi
ütemezésére:
a) r1(A); r2(B); r3(C); w1(B); w2(C); w3(D);
b) r1(A); r2(B); r3(C); w1(B); w2(C); w3(A);
c) r1(A); r2(B); r3(C); r1(B); r2(C); r3(D); w1(C); w2(D); w3(E);
d) r1(A); r2(B); r3(C); r1(B); r2(C); r3(D); w1(A); w2(B); w3(C);
e) r1(A); r2(B); r3(C); r1(B); r2(C); r3(A); w1(A); w2(B); w3(C);
Végezzük el a következőket:
i) Illesszük be az osztott és a
kizárólagos
zárakat, és illesszük be a
zárak
feloldási műveleteit!
Helyezzünk osztott
zárat
közvetlenül minden olyan
olvasási művelet
elé, amelyik után nem következik
ugyanannak a
tranzakciónak ugyanarra az
elemre való
írási művelete!
Helyezzünk kizárólagos
zárat minden más
olvasási
és
írási művelet elé!
Helyezzük el minden tranzakció
végére a
szükséges
zárfeloldásokat!
ii) Adjuk meg mi történik, amikor minden
ütemezést osztott és
kizárólagos
zárakat támogató
ütemező futtat!
iii) Illesszük be az osztott és
kizárólagos
zárakat oly módon, amely lehetővé
teszi a
felminősítést.
Helyezzünk osztott
zárat
minden olvasás elé, és
kizárólagos
zárat minden írás elé,
és
helyezzük el a
szükséges
zárfeloldásokat a
tranzakciók végére.
iv) Adjuk meg mi történik, amikor az
iii)-ból minden
ütemezést osztott,
kizárólagos
zárakat és
felminősítést
támogató ütemező futtat.
v) Illesszük be az osztott, kizárólagos
és
módosítási zárakat a
feloldási
műveletekkel
együtt. Helyezzünk osztott
zárat
minden
olyan
olvasási
művelet elé, amelyiket nem
fogunk
felminősíteni, helyezzünk
módosítási
zárat minden
olyan
olvasási művelet elé, amelyeket
felminősítünk,
és
helyezzünk
kizárólagos zárat
minden
írási művelet elé!
Helyezzük el a
zárfeloldásokat
a
tranzakciók végére, mint rendszerint!
vi) Adjuk meg mi történik, amikor az v)-ből minden
ütemezést osztott,
kizárólagos
és
módosítási zárakat
támogató
ütemező futtat!
9.4.7 Feladat
Az alábbi ütemezésből egy művelet
hiányzik a
kérdőjelek helyén:
r1(A); r2(B); ???; w1(C); w2(A);
a) Adjunk meg egy olyan olvasási műveletet ide, amely
esetén az ütemezés nem
sorosítható.
b) Adjunk meg egy olyan írási műveletet ide,
amely
esetén az ütemezés nem
sorosítható.
Feladatok - Nikovits
Tibor: Információkezelés
(5PTM) gyakorlatai
alapján
C7.1.feladat:
- Tranzakció-kezelés
alapjai. COMMIT,
ROLLBACK,SAVEPOINT
- Nyissunk meg egyszerre két SQLPLUS
ablakot vagy az sqldeveloperben
két ablakot úgy,
hogy abban
két külön sessiont nyissunk meg, ami azt
jelenti,
hogy "Connections": legyen
egy tomx1 nevű
és legyen egy tomx2 nevű is.
Nekünk az kell, hogy
legalább
két különböző
tranzakciónk legyen,
ellenőrizzük le: select * from
V$session where
username like 'EHA%';
-
Végezzünk olvasó
és
módosító műveleteket a két
ablakból felváltva.
- Az aktív tranzakciók
futása
közben adjuk meg a rendszerkatalógusok
alapján
a következő
információkat a
saját magunk által futtatott
tranzakciókról.
(Lásd az alábbi
feladatokat itt is: tranz_peldak.txt,
megoldásokkal)
- Melyek az aktiv tranzakciók, mikor
indultak el,
és ki futtatja azokat?
- A tranzakció melyik
utasítást futtatja éppen?
C7.2.feladat:
- Melyik rollback szegmenst
használják
épp az aktív tranzakciók?
- Melyik adatfájlba
írják a
tranzakciók a rollback blokkjaikat?
C7.3.feladat:
- Holtpont
kipróbálása
- Adjunk meg két
utasítássorozatot a
két ablakban úgy, hogy DEADLOCK
alakuljon ki, lásd
például itt: tranz_peldak.txt
(megoldásokat kipróbálni).
C7.4.feladat:
- Az
Oracle
tranzakcióelkülönítési
szintjei
- Adjunk meg két
utasítássorozatot a
két ablakban úgy, hogy az egyik ablak
a következő
hibaüzenetet kapja:
"ORA-08177: Cannot serialize access for
this transaction"
(Tipp: SET TRANSACTION
ISOLATION
LEVEL SERIALIZABLE;)
C7.5.feladat:
- Zárolások
megnézése
- Melyik session milyen
típusú (sor->TX,
tabla->TM) és milyen módú
zárolást tart
fenn éppen? (RS->2, RX->3, S->4,
SRX->5, X->6)
(SID,
USERNAME,
TYPE, LMODE)
C7.6.feladat:
- Melyik session vár épp egy
zárolásra
(SID,
USERNAME,
TYPE,
LMODE, REQUEST),
illetve melyik zárolasra
vár épp
valaki
(SID,
USERNAME,
TYPE,
LMODE, BLOCK)?
C7.7.feladat:
- Milyen régen tartja fenn a rendszer a
zárolasokat, illetve
milyen
régen vár valaki egy
zárolásra?
(SID,
USERNAME,
TYPE,
LMODE, CTIME, REQUEST)
C7.8.feladat:
- Mely objektumokat tartja
zárolás alatt valamelyik session jelen
pillanatban?
C7.9.feladat:
- Derítsük ki (megfelelő
manuális
lock-oló utasítások
segítségével), hogy a
Row Exclusive (RX)
módú
zárolást milyen módú
zárolásokkal egyidejűleg
engedélyezi a rendszer,
és mely
módú zárolások
esetén kell várnia a
későbbi
kérelmezőnek.