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:

  1. 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 Nei
    4 80 120 Nei
    5 60 70
    6 50 Nei

  2. 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:

    1. Í úttaki úr skipun nr. 7 þá er b=X þrátt fyrir að skipun 6 hafi sett b=Y. Af hverju?

      Svar:

      Því hreyfing 711 er óstaðfest og þar sem hreyfing 712 er með einangrunarstig READ COMMITTED þá sér hún ekki breytinguna fyrr en hún hefur verið staðfest (committed).

    2. Í ú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?

      Svar:

      Hreyfing 711 er ennþá í gangi og þessvegna er "gamla röðin" ennþá sýnileg.

    3. Í 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?

      Svar:

      Nú er búið að staðfesta hreyfingu 711 sem úreldi gömlu röðina og því er hún ekki lengur sýnileg. Nýja röðin er sýnileg í hreyfingu 712 því það er búið að staðfesta hreyfingu xmin=711 og hreyfing 712 er með einangrunarstig READ COMMITTED.

  3. Útskýrið hver af eftirfarandi vandamálum (e. anomalies): i) skítugur lestur (e. dirty read), ii) óendurtakanlegur lestur (e. unrepeatable reads), iii) yfirskrift óstaðfestra gagna (e. overwriting uncommitted data) koma upp í neðangreindum verkáætlunum (e. schedules).

    1. T1 T2 T3
      R(A)
      W(B)
      R(C)
      R(C)
      W(A)
      R(B)

      Svar:

      Skítugur lestur (feitletrað), T1 les breytinguna sem T2 gerði á B án þess að T2 hafi verið staðfest (committed).

    2. T1 T2 T3
      R(A)
      W(B)
      R(C)
      R(C)
      W(A)
      R(B)

      Svar:

      Engin vandamál.

    3. T1 T2 T3
      W(A)
      R(B)
      R(C)
      R(C)
      R(A)
      W(B)

      Svar:

      Engin vandamál.

  4. Hreyfingarnar T1 og T2 eru í framkvæmd. Gefin er eftirfarandi verkröð (e. schedule):

    T1 T2
    R(A)
    R(A)
    R(B)
    W(A)
    R(C)
    W(C)
    R(C)
    W(S)
    Commit
    Commit

    Svarið eftirfarandi spurningum:

    1. Er þessi verkröð raðbindanleg (e. serializable) ? Útskýrið.

      Svar:

      Nei, því T1 les A áður en T2 breytir því, en T1 les C eftir að T2 breytir því.

      Því getur T1 hvorki verið á undan T2, því þá kemur C rangt út, né T2 verið á alfarið á undan T1, því þá kæmi A rangt út.

    2. Setjið inn lása í verkröðina samkvæmt stífri 2ja fasa læsingu (e. Strict 2PL)

      Svar:

      T1 T2
      S(A)
      R(A)
      S(A)
      R(A)
      S(B)
      R(B)
      S(C)
      R(C)
      X(S)
      W(S)
      Commit
      X(A)
      W(A)
      S(C)
      R(C)
      X(C)
      W(C)
      Commit