2012-01-21 13 views
6

Tutaj pracuję z Linq do sql Mam więcej niż 30000 wiersz w mojej tabeli.Transakcja (identyfikator procesu 56) została zablokowana na kłódce?

użyłem następujące zapytanie do pobierania rekordów z bazy danych:

IEnumerable<DealsDetails> DD = (from D in DealDbContext1.Deals 
              where D.Address == City && (D.DealTime >= DateTime.Now || D.DealTime == dealcheck) && PriceMax >= D.DealPrice && D.DealPrice >= PriceMin && DisCountMax >= D.SavingsRate && D.SavingsRate >= DiscountMin && (D.DealTime >= DateTime.Now.AddDays(TimeMin) && D.DealTime <= DateTime.Now.AddDays(TimeMax) || D.DealTime == dealcheck) 
              select new DealsDetails(
               lst, 
               D.DealId, 
               D.DealHeadline, 
               D.DealCategory, 
               D.BuyPrice, 
               D.DealPrice, 
               D.SavingsRate, 
               D.SavingAmount, 
               D.RelatedWebsite, 
               D.Address, 
               string.Empty, 
               D.DealImage, 
               string.Empty, 
               string.Empty, 
               D.Time, D.CurrentTime, D.DealTime, 
               D.Location, string.Empty, string.Empty, D.Latitude, D.Longitude, D.Islocal, D.VendorMail, D.MerchantInfo, D.Review, D.HowItWork, D.DealUrl 
               )); 



if (lstSite.Count > 0 && lstSite[0] != "AllDeals") 
       { 
        DD = DD.Where(D => D.RelatedWebsite.Split(',').Where(x => lstSite.Contains(x)).Any()); //.Where(row => row.Category.ToList().Where(x => lst.Contains(x)).Any()).ToList(); 
      } 

jakiś czas mój bieg zapytania pomyślnie lub jakiś czas mam Błąd: transakcji (Process ID 56) został zakleszczony na zamek | buforuje zasoby komunikacyjne innym procesem i została wybrana jako ofiara zakleszczenia. Ponownie uruchom transakcję.

góry dzięki ...

+0

Pojawi się zakleszczenie wpisu w dzienniku błędów programu SQL Server. Czy możesz to opublikować? Jeśli nie, włącz [traceflag 1204 lub 1222] (http://msdn.microsoft.com/en-us/library/ms178104.aspx) – Andomar

+0

Jak długo trwa wykonywanie zapytania? – RobJohnson

+1

Jaką wersję programu SQL Server? [Jeśli w 2008 zobaczymy, czy można uzyskać wykres zakleszczenia z domyślnej sesji zdarzeń rozszerzonych] (http://dba.stackexchange.com/questions/10644/deadlock-error-isnt-returning-the-deadlock-sql/10646#10646). W przeciwnym razie skonfiguruj, aby zrobić to następnym razem. –

Odpowiedz

2

Wygląda masz ogólne impas blokujący problem z jednoczesnym tabeli/clustindex skanowania i aktualizacji/usuwania

spojrzeć na swoje wynikającej zapytania i na jej paln - jeśli mają takie skan - spróbuj tego uniknąć poprzez odpowiednie indeksowanie lub włamać się do użycia (NOLOCK). Ale nolock wskazówka nie jest dobre, jeśli potrzebujesz dokładnych i spójnych danych bez ewentualnych fantomowych wierszy

I - przede wszystkim spojrzenie na wykres zakleszczenia!

Powiązane problemy