Zależy mi aby nie było żadnych zakleszczeń itp itd żeby było jak najbezpieczniej i nic się nie wieszało.
pozdrawiam
Bartek
Żeby nie było zakleszczeń nie wystarczy magiczne ustawienie transakcji.
Trochę jednak wystarczy - SNAPSHOT Isolation Level się kłania...
Ale zostawmy to, ponieważ o zakleszczeniach można co najmniej doktorat napisać i temat nie zostanie wyczerpany.
Od tego czy one się pojawią, czy nie, to bardzo dużo zależy...
Co ciekawe, poprawne używanie transakcji wcale nie musi chronić przed zakleszczeniami.
Trzeba odpowiednio napisać cały program (w szczególności mam na myśli zarządzanie transakcjami).
Własnie chodzi o to, że nie tylko transakcje. Sama konstrukcja kodu SQL, kolejność dostępu do zasobów (tabel, widoków) dla SELECT i UPDATE może mieć wpływ na powstawanie zakleszczeń.
Niestety muszę Cię zmartwić, ale Delphi samo z siebie promuje złe pisanie aplikacji (w szczególności bazodanowych). Mając taki edytor wizualny aż się prosi aby walnąć komponenty na formatce: Database, Transaction, Query, Update połączyć to wszystko z kontrolkami bazodanowymi za pomocą DataSeta i gotowe. A to najszybsza droga do powstawania zakleszczeń.
No i gdzie tu jest potencjał na zakleszcenia?
Ja go jeszcze nie widzę.
To czy dany SQL zostanie wygenerowany przez komponenty, czy z kodu nie ma przecież żadnego znaczenia.
Co więcej zaleca się aby transakcje były najkrótsze jak to tylko możliwe. A taka architektura całkowicie temu przeczy.
Tak, a niby dlaczego przeczy?
Mam wrażanie, że tak naprawdę i dokładnie nie wiesz jak działa zarządzanie transakcjami w trybie auto w FireDAC.
To co napisałeś powyżej, wcale, ale to wcale nie oznacza, ze będą tam gdziekolwiek długie transakcje.
Wręcz przeciwnie.
Najlepiej jest otwierać transakcję na krótko przed zapisaniem danych do bazy, zapisać dane, następnie dać Commit i tak za każdym razem. Co więcej można mieć parę transakcji jedna tylko do odczytu po to aby pobierać dane, a zapisywać dane możesz za pomocą kolejnych krótko trwających. Mogę Ci polecić ten dokument na początek
Jednak nie wiesz o czym piszesz...
https://firebirdsql.org/file/documentation/reference_manuals/fbdevgd-en/Firebird_Devel_Guide_30EN.pdf Co prawda bazuje od na serwerze Firebird, ale generalne zasady będą podobne.
I tu jest właśnie pies pogrzebany.
Takie rzeczy, czyli wiele równoczesnych transakcji na jednym połączeniu (Connection
) to na pewno nie w MSSQL, ale na pewno w Firebird.
Jest w nim umieszczony rozdział poświęcony Firedac'owi pod Delphi. Są tam naświetlone szerzej sprawy które tu poruszyłem.
Które na nic mu się nie przydadzą, ponieważ nie pracuje z Firebird.