2012-01-21 2 views
6

Qui sto lavorando con Linq a sql Ho più di 30000 righe nella mia tabella.La transazione (ID processo 56) era bloccata in caso di blocco?

ho usato seguente query per il recupero record dal database:

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(); 
      } 

Qualche tempo la mia domanda di esecuzione con successo o qualche volta ho avuto Errore: transazione (Process ID 56) critico sulla serratura | risorse del buffer di comunicazione con un altro processo ed è stato scelto come vittima del deadlock. Rieseguire la transazione.

Grazie in anticipo ...

+0

Ci sarà una voce deadlock nel log degli errori di SQL Server, potresti postare? In caso contrario, attivare [traceflag 1204 o 1222] (http://msdn.microsoft.com/en-us/library/ms178104.aspx) – Andomar

+0

Quanto impiega la query per l'esecuzione? – RobJohnson

+1

Quale versione di SQL Server? [Se il 2008 vedrà se è possibile ottenere il grafico del deadlock dalla sessione di eventi estesa predefinita] (http://dba.stackexchange.com/questions/10644/deadlock-error-isnt-returning-the-deadlock-sql/10646#10646). Altrimenti configuralo per catturarlo la prossima volta. –

risposta

2

Sembra che tu abbia stallo generale blocco problema con tavolo simultanea/clustindex scansione e aggiornare/cancellare

Guardate la query risultante e al suo paln - se hanno tale una scansione: prova ad evitarlo con l'indicizzazione corretta o modificalo come suggerimento (NOLOCK). Ma nolock suggerimento non è buona se avete bisogno di precise e coerenti dati senza possibili righe fantasma

E - prima di tutto sguardo al grafico di stallo!