Gagnasafnsfræði, haust 2011
[ Dagskrá | Námsefni | Verkefni | Dæmatímar | Orðalisti | Námsmat | Kennslubók ]Verkefni 10 - Samskeiða vinnsla hreyfinga
Lausnum skal skilað í hólf viðkomandi dæmakennara (sjá lista yfir dæmatíma).Skiladagur: þriðjudaginn 15. nóvember fyrir kl 16:00
Skiladæmi:
-
Gerum ráð fyrir MVCC kerfi eins og í PostgreSQL.
Hreyfing með raðnúmer 100 les eftirfarandi töflu með einangrunarstig READ COMMITTED. Tilgreinið hvaða raðir eru sýnilegar í töflunni fyrir þá hreyfingu.
Eftirfarandi hreyfingar eru ennþá opnar (ókláraðar) þegar lesturinn er framkvæmdur: 50, 70.
Eftirfarandi hreyfingar voru kláraðar með commit: 20, 60, 80, 90, 110, 120
ID xmin xmax Sýnileg 1 20 ? 2 110 ? 3 20 90 ? 4 80 120 ? 5 60 70 ? 6 50 ? -
Gerum ráð fyrir eftirfarandi töflu:
CREATE TABLE test (a INTEGER, b CHAR(1) NOT NULL);
Gerum ráð fyrir einni röð í töflunni:INSERT INTO test (a,b) VALUES (1, 'X');
Skoðið eftirfarandi keyrslu í tveimur samhliða psql skeljum og svarið síðan spurningunum fyrir neðan.Skipun nr. T1 (txid=711) T2 (txid=712) 1 BEGIN; -- txid=711 2 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 3 SELECT *,xmin,xmax FROM test; Output:
hhg=# select *,xmin,xmax from test; a | b | xmin | xmax ---+---+------+------ 1 | X | 710 | 0 (1 row)
4 BEGIN; -- txid=712 5 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 6 UPDATE test SET b='Y' where a=1; 7 SELECT *,xmin,xmax FROM test; Output:
hhg=# select *,xmin,xmax from test; a | b | xmin | xmax ---+---+------+------ 1 | X | 710 | 711 (1 row)
8 COMMIT; 9 SELECT *,xmin,xmax FROM test; Output:
hhg=# select *,xmin,xmax from test; a | b | xmin | xmax ---+---+------+------ 1 | Y | 711 | 0 (1 row)
Spurningar:
-
Í úttaki úr skipun nr. 7 þá er b=X þrátt fyrir að skipun 6 hafi sett b=Y. Af hverju?
-
Í úttaki úr skipun nr. 7 þá er xmax=711, en txid fyrir T2 er 712. Röðin var úreld í hreyfingu sem er eldri en T2 og ætti því undir venjulegum kringumstæðum að vera ósýnileg.
En af hverju er hún þá sýnileg í úttakinu?
- Í skipun nr. 9 þá er b=Y og xmin=711. Af hverju er gamla röðin ekki sýnileg lengur? Af hverju er nýja röðin sýnileg?
-
Í úttaki úr skipun nr. 7 þá er b=X þrátt fyrir að skipun 6 hafi sett b=Y. Af hverju?
a)
T1 | T2 | T3 |
---|---|---|
R(A) | ||
W(B) | ||
R(C) | ||
R(C) | ||
W(A) | ||
R(B) |
b)
T1 | T2 | T3 |
---|---|---|
R(A) | ||
W(B) | ||
R(C) | ||
R(C) | ||
W(A) | ||
R(B) |
c)
T1 | T2 | T3 |
---|---|---|
W(A) | ||
R(B) | ||
R(C) | ||
R(C) | ||
R(A) | ||
W(B) |
T1 | T2 |
---|---|
R(A) | |
R(A) | |
R(B) | |
W(A) | |
R(C) | |
W(C) | |
R(C) | |
W(S) | |
Commit | |
Commit |
Svarið eftirfarandi spurningum:
- Er þessi verkröð raðbindanleg (e. serializable) ? Útskýrið.
- Setjið inn lása í verkröðina samkvæmt stífri 2ja fasa læsingu (e. Strict 2PL)