Mieliśmy problem z blokiem kodu, który słabo reaguje w obliczu powolnych baz danych (niszczy łóżko po przekroczeniu limitu czasu zapytania). Stworzyliśmy łatkę i jesteśmy w trakcie przeprowadzania jej przez regresję.
Nie możemy dostać limitu czasu. Otworzyłem transakcję z SQL Mgmt Studio i zaktualizowałem każdy wiersz, aby je zablokować, ale to nie powoduje przekroczenia limitu czasu INSERTs (czego potrzebuję).
Czy mogę łatwo uzyskać blokadę na poziomie tabeli za pośrednictwem T-SQL? A może muszę bawić się mistrzem? Czy mogę łatwo wymusić przekroczenie limitu czasu bez blokowania? Każdy wkład jest mile widziany.
sql-server
testing
timeout
locking
BnWasteland
źródło
źródło
Możesz po prostu powiedzieć swojemu kodowi sql, aby odczekał minutę przed zwróceniem:
źródło
Z drugiej strony: jeśli połączenie jest konfigurowalne, zmniejsz limit czasu parametrów połączenia do 1 sekundy - to ułatwi. Wypełnij tabelę mnóstwem danych i pozwól 3 innym procesom obracać się w pętli aktualizującej fragmenty tej tabeli transakcją wokół pętli. Nie zmieniaj faktycznej procedury wywoływanej przez aplikację (wstrzykiwanie waitfor). To unieważnia test integracji.
Ale tak naprawdę jest to studium przypadku na korzyść testów jednostkowych i wstrzykiwania zależności. Niektóre rzeczy są po prostu trudne do przetestowania. Test jednostkowy + iniekcja zależności .
To jest wstrzyknięcie „zależności”. Programista może wstrzyknąć zależność do bazy danych, zastępując coś, co symuluje zachowanie zależności. Dobrze zrobić dla wszystkich testów bazy danych. W każdym razie, po przeprowadzeniu testu jednostkowego, wiesz, że poprawka robi to, co powinna, ale nadal potrzebujesz testów integracyjnych. W takim przypadku może lepiej skupić się na regresji - co oznacza, że testowanie niczego innego nie zepsuło, a funkcja nadal działa.
Już stworzyłeś swoją łatkę, więc myślę, że moja odpowiedź jest za późno.
źródło
Sprawdź ten wpis na blogu. Zasadniczo SQL Server nie ma limitów czasu zapytań. Klienci mogą wymusić przekroczenie limitu czasu SQL, ale sam silnik tego nie robi.
http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx
źródło