Witam.
Potrzebuje nakierowania czy jestem w stanie ogarnąć kwestie deadlock
na bazie SQL.
Pfff... równie dobrze mógłbyś napisać, że potrzebujesz nakierowania aby być najlepszym łyżwiarzem figurowym na świecie.
Tyle samo wiadomo i nie wiadomo - za dużo zmiennych.
##Od początku...
Comarch ma oprogramowanie, które nazywa się Analizy BI, straszne narzędzie, kompletnie nie zoptymalizowane. Program ten wyświetla w tabelkach cyferki zysków, kosztów, strat, grupuje je według czego sobie użytkownik życzy, ogólnie kombajn ale... Cała analiza jest robiona na bazie zapytania SQL, które, mam wrażenie, jest robione na znany sposób - "byle by działało".
Jak wszystko w super-pro-rozwiązaniach firmy z Krakowa.
No może, swoje kolejny tony groszy dokładają niedouczeniu konsultanci.
Generalnie najwięcej syfu w ERP widziałem w rozwianiach Comarchu. Nie wiem, może dlatego że jest bardzo popularny?
A może dlatego, że to co tam dzieje się pod maską, to... Szkoda gadać.
Dodatkowo to wszystko jest wczytywane przez DevExpressowego grida... również tym samym, znanym sposobem, o którym pisałem wcześniej.
To nie byłyby problem, gdyby potrafiono korzystać z tego PivotGrida (np. server-mode albo i lepiej OLAP Datasource, ale to trochę inaczej niż prosty SQL i byleby działało...), ale ostatnio jak to wdziałem, to było to napisane w sposób "byleby działało"...
Tylko że dla Twojego problemu to nie ma żadnego znaczenia.
Jeśli na bazie, którą chcemy analizować, pracuje około 20 osób to analiza rzuca błędem o deadlocku
Kopiuj
Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Jest szansa, aby to działało?
Tak, jest taka szansa...
Ale przecież jesteś programistą, prawda?
To może zajmij się śledzeniem problemu, odpalasz profilera i szukasz tych deadlocków.
Zakleszczenia to jest temat na niejedną książkę i nie ma na to prostych odpowiedzi.
Jeżeli takich szukasz, to nie znajdziesz, ponieważ do tematu trzeba podejść indywidualnie.
Jednakże w sieci znajdziesz na ten temat materiałów na metry.
Czy to jest ograniczenie SQL'a, czy programu Analiz BI?
Nie.
#edit
Przykładowy raport w załączniku.
Właśnie, to jest przykład na profesjonalizm osób robiących to zestawienie.
Pierwsza linia i mamy:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Co to oznacza?
Ano mniej więcej to, co napisał @czesiek, że to pudrowanie syfu.
A więc fachowiec od tego zestawienia uznał, że po co męczyć się z blokadami, skoro można ustawić poziom izolacji transakcji na nieblokujący i nie mieć problemów?
Jak pomyślał, tak zrobił - ale chyba nie ogarnął, że to problemu blokad nie rozwiąże (jak widać), a sprawi że to zapytanie będzie czytało niepotwierdzone zmiany z innych otwartych transakcji.
Taka izolacja do zestawienia, które z definicji powinno zwracać konsystentne i powtarzalne wyniki?!
Totalny fuckup, imho...
A tak poza konkursem - kto pisał to zestawienie?
Oryginalne jest od Comarcha czy to działo konsultanta?
Ich należy pytać :)
Pewnie, zawsze można przestawić bazę danych w tryb snapshot - ale to jeszcze większy puder na syf...
PS.
SQL Server 2017 Standard, Windows Server 2012 R2, 24GB RAM, XEON E5-2420 v2 @ 2.20GHz
Postawione jako Hyper-V
To w sumie bez znaczenia.