Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako DML naredbama, pokrenutim kroz aplikaciju, nametnuti nivo izolovanja transakcija?

[es] :: MS SQL :: Kako DML naredbama, pokrenutim kroz aplikaciju, nametnuti nivo izolovanja transakcija?

[ Pregleda: 988 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

teri_kalijer

Član broj: 335009
Poruke: 13
87.116.179.*



Profil

icon Kako DML naredbama, pokrenutim kroz aplikaciju, nametnuti nivo izolovanja transakcija?12.07.2020. u 09:55 - pre 45 meseci
Klijent koristi legacy aplikaciju pisanu u Delphiju, za koju nema izvorni kod. Firma od koje je softver kupljen odavno je prestala da ga razvija.

Aplikacija izvršava DML operacije nad bazom kroz dinamičke upite, generisane u okviru same aplikacije, i pritom koristi najrestriktivniji nivo izolovanja transakcija - SERIALIZABLE.
Upiti ne nameću SERIALIZABLE nivo eksplicitno (SET TRANSACTION ISOLATION LEVEL ...) već je taj nivo postavljen implicitno, budući da je to defaultni nivo izolovanja u Delphiju.
Kao što se može pretpostaviti, to ima za posledicu česta i dugotrajna blokiranja rada korisnika pri konkurentnom korišćenju aplikacije.
Sa stanovišta poslovne logike, aplikaciji tako restriktivan nivo izolovanja nije neopodan, posebno ne u delovima koji se odnose na pregled podataka.

Postoji li način da se "presretnu" te DML naredbe koje aplikacija izvršava nad bazom, i da im se nametne manje restriktivan nivo izolacije (READ COMMITTED)?






[Ovu poruku je menjao teri_kalijer dana 12.07.2020. u 11:32 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako DML naredbama, pokrenutim kroz aplikaciju, nametnuti nivo izolovanja transakcija?13.07.2020. u 10:24 - pre 45 meseci
default level za SQL server je READ COMMITED. Ako transakcije iz Delphi aplikacije rade u SERIALIZABLE, to je zato sto Delphi ADO connection komponenta to zahteva eksplicitno. Default za tu komponentu je takodje ilReadCommited, tako da je neko NAMERNO psotavio ilSerializable. Pitanje je da li je vas rezon da to ne odgovara poslovnoj logici racionalan, mozda je uautor softvera namerno hteo da spreci phantom reads.

http://docs.embarcadero.com/pr...n32/ADODB_TIsolationLevel.html

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

teri_kalijer

Član broj: 335009
Poruke: 13
87.116.171.*



Profil

icon Re: Kako DML naredbama, pokrenutim kroz aplikaciju, nametnuti nivo izolovanja transakcija?15.07.2020. u 22:09 - pre 45 meseci
Ok, Miljane, hvala na pojašnjenju. Ne poznajem Delphi, otud greška. Jasno da je default level za SQL Server READ COMMITTED.

Pod pretpostavkom da delovima Delphi aplikacije nije neophodan SERIALIZABLE level. Imaš li ideju kako da se na SQL Server strani nametne READ COMMITTED nivo izolacije SELECT upitu upućenom kroz Delphi ADO konekciju sa eksplicitno setovanim SERIALIZABLE nivoom izolacije?

 
Odgovor na temu

[es] :: MS SQL :: Kako DML naredbama, pokrenutim kroz aplikaciju, nametnuti nivo izolovanja transakcija?

[ Pregleda: 988 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.