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

  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?

    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?

    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?
  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).

    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)

  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ð.
    2. Setjið inn lása í verkröðina samkvæmt stífri 2ja fasa læsingu (e. Strict 2PL)