[ teri_kalijer @ 12.07.2020. 09:55 ] @
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]
[ mmix @ 13.07.2020. 10:24 ] @
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
[ teri_kalijer @ 15.07.2020. 22:09 ] @
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?