Niedawno napotkaliśmy jeden problem z jednoczesnym wstawianiem do jednej z naszych tabel serwera sal od wielu klientów. Mam nadzieję, że możecie nam pomóc.Serwer SQL - Jednoczesne wstawianie do tabeli od wielu klientów - Sprawdzanie limitu i blokowanie
Używamy procedury przechowywanej do przeprowadzania transakcji. W tej procedurze przechowywanej dla każdej transakcji obliczamy dotychczas całkowitą sprzedaż. Jeśli łączna sprzedaż jest mniejsza niż ustawiony limit, , wówczas transakcja będzie dozwolona. W przeciwnym razie transakcja zostanie odrzucona.
to działa dobrze w większości razy. Ale czasami, gdy wielu klientów próbuje wykonać transakcję dokładnie w tym samym czasie, kontrola limitu kończy się niepowodzeniem, ponieważ obie transakcje są wykonywane.
Czy możecie zaproponować, w jaki sposób możemy skutecznie egzekwować limit przez cały czas? Czy istnieje lepszy sposób na zrobienie tego?
Dzięki!
Proszę podać strukturę tabeli i przykładowe dane. Czy ustalony limit jest stały dla wszystkich transakcji? –
Jako przeczucie, problem może zostać rozwiązany, jeśli procedura przechowywana uruchomi się znacznie szybciej. W przypadku procedury składowania o długości 100ms zdarza się wyjątkowo rzadko. Jeśli opublikujesz zapytanie i definicję tabeli, możemy zaproponować indeks, który bardzo szybko oblicza sumę. – Andomar
proszę znaleźć strukturę tabeli. W tej sumie (stawka) dla każdego betnumber nie powinna przekraczać 1000. Ten 1000 limit jest przechowywany w innej tabeli. \t [SlipID] [bigint] IDENTITY (1,1) nie NULL \t [TillID] [Int] Za NULL \t [kreskowy] [varchar] (30) nie NULL \t [GamingDate] [data] Za NULL \t [DrawID] [Int] Za NULL \t [BetNumber] [tinyint] Za NULL \t [CurrencyID] [Int] Za NULL \t [Stake] [przecinku] (9: 2) nie NULL , \t \t [SlipTime] [datetime] NOT NULL, – sammy