Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
8.1 kB
2
Indexable
Never
T1:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
begin;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
begin;
update pracownicy set 
nazwisko='XX' where nr_prac=38;
T1:(A) 
Odczyt powinen pokazać zmodyfikowane dane poniewaz read uncommitted umozliwia odczyt bez zatwierdzenia przez inne sesje
select * from pracownicy;
T2:
rollback;
T1:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
T2:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
T1:
begin;
T2:
begin;
update pracownicy set 
nazwisko='YY' where nr_prac=38;
T1:(A) 
Odczyt powinen pokazac nieaktualne dane poniewaz read committed nie pozwala na odczyt bez commitu od innych sesji
select * from pracownicy;
T2:
rollback;
T1:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
T2:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
T1:
begin;
T2:
begin;
update pracownicy set 
nazwisko='OO' where nr_prac=38;
T1:(A) 
Odczyt powinen pokazać nieaktualne dane, poniewaz repeatable read nie pozwala na odczyt zmodyfikowanych elementow do zakonczenia biezacej sesji (commit obu sesji)
select * from pracownicy;
T2:
rollback;
T1:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin;
T2:
begin;
update pracownicy set 
nazwisko='OO' where nr_prac=38;
T1:(A) 
Serwer powinien nie pozwolic na odczyt, poniewaz SERIALIZABLE nie pozwala na odczyt elementow do zakonczenia biezacej sesji (commit)
select * from pracownicy;
//nie jest wykonalne wyswietlenie tablicy nawet tej nieaktualnej
T2:
rollback;
T1:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(B)
zmiana nazwiska
update pracownicy set 
nazwisko='OO' where nr_prac=38;
T1:(C) 
Serwer powinien pozwolic na odczyt i aktualizowac wszelkie zmiany
select * from pracownicy;
T2:
commit;
T1:(D)
commit nic nie zmienia w tym przypadku
select* from pracownicy;
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(B)
Zmiana nazwiska
update pracownicy set 
nazwisko='cc' where nr_prac=38;
T1:(C) 
Serwer czeka na commit i nie aktualizuje zmian
select * from pracownicy;
T2:
commit;
T1:(D)
commit zatwierdza zmiany
select* from pracownicy;
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(B)
Zmiana nazwiska
update pracownicy set 
nazwisko='bb' where nr_prac=38;
T1:(C) 
Serwer czeka na commit obu tranzakcji i nie aktualizuje zmian w t1
select * from pracownicy;
T2:
commit;
T1:(D)
commit nie zmieni nazwiska t1
select* from pracownicy;
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(B)
Mamy mozliwosc tak zwanego brudnego odczytu danych ktore mielismy zmienic ale nie zostaly zaakceptowane, ale dzieki rollback mozemy sie jakby do nich wrocic
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T1:(C) 
Nie ma mozliwosci modyfikacji w t2, ale dzieki temu mozemy odczytac stare rekordy w t1
select * from pracownicy;
T2:
commit;
T1:(D)
commit nie zmieni nazwiska t1
select* from pracownicy;
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo
select * from pracownicy;
T1:(F) 
Zmiana widoczna obustronnie
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
//(WILCZYNSKI)
T1:
rollback;
T2:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo
select * from pracownicy;
T1:(F) 
Zmiana widoczna tylko na t1
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
udalo sie zmienic ale bez commita nie zostana zapisane
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo
select * from pracownicy;
T1:(F) 
Zmiana widoczna tylko na t1
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo
select * from pracownicy;
T1:(F) 
Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Nie jestem w stanie zmienic(lock wait timeout exceeded) potrzebny commit lub stworzenie indexu
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;


//T1: create index iPrac on pracownicy(nr_prac)

T1:
create index iPrac on pracownicy(nr_prac)
SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo
select * from pracownicy;
T1:(F) 
Zmiana obustronna
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Teraz bez commitu dziala modyfikacja obustronna
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL read committed;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL read committed;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo
select * from pracownicy;
T1:(F) 
Druga sesja czeka na commit
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Bez commitu nie wstrzymuje pracy programu ale tez bez commitu nie zmodyfikuje trwale
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;

T1:
SET SESSION TRANSACTION ISOLATION LEVEL  REPEATABLE READ;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL  REPEATABLE READ;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo wiec mamy brudny odczyt 
select * from pracownicy;
T1:(F) 
Druga sesja nie zaktualizuje dopoki nie bedzie commitu
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Bez commitu nie wstrzymuje pracy programu ale tez bez commitu(ubustronny) nie zmodyfikuje trwale
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;


T1:
SET SESSION TRANSACTION ISOLATION LEVEL  serializable;
T2:
SET SESSION TRANSACTION ISOLATION LEVEL  serializable;
T1:
begin;
T2:
begin;
T1:
select * from pracownicy;
T2:(E)
Powinny zobaczyc to samo wiec mamy brudny odczyt 
select * from pracownicy;
T1:(F) 
Druga sesja nie zaktualizuje dopoki nie bedzie commitu
update pracownicy set 
nazwisko='aa' where nr_prac=38;
T2:(G)
Deadlock found when tring to get lock czyli chyba nie mozna wykonywac dwoch operacji na raz w trybie izloacji serializable z indexem - caly program sie zawiesil
update pracownicy set nazwisko='ZZ2'
where nr_prac=36;
T1:
rollback;
T2:
rollback;
Leave a Comment