2012-01-21 26 views
6

Ở đây tôi đang làm việc với LINQ to SQL Tôi có nhiều hơn thì 30000 hàng trong bàn của tôi.Giao dịch (Quy trình ID 56) đã bị khóa trên khóa?

Tôi đã sử dụng sau đây truy vấn cho lấy hồ sơ từ cơ sở dữ liệu:

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

Một số thời gian chạy truy vấn của tôi thành công hay một thời gian tôi đã Lỗi: giao dịch (Process ID 56) đã bế tắc về khóa | truyền thông đệm tài nguyên với một quá trình khác và đã được chọn là nạn nhân bế tắc. Chạy lại giao dịch.

Cảm ơn trước ...

+0

Sẽ có một mục bế tắc trong nhật ký lỗi của SQL Server, bạn có thể đăng bài đó không? Nếu không, bật [traceflag 1204 hoặc 1222] (http://msdn.microsoft.com/en-us/library/ms178104.aspx) – Andomar

+0

Mất bao lâu để chạy? – RobJohnson

+1

Phiên bản SQL Server nào? [Nếu 2008 xem bạn có thể lấy biểu đồ bế tắc từ phiên sự kiện mở rộng mặc định] không (http://dba.stackexchange.com/questions/10644/deadlock-error-isnt-returning-the-deadlock-sql/10646#10646). Nếu không thiết lập để nắm bắt thời gian tiếp theo này. –

Trả lời

2

Dường như bạn đã bế tắc chung khóa vấn đề với bảng đồng thời/clustindex quét và cập nhật/xóa

Nhìn vào kết quả truy vấn của bạn và tại paln của nó - nếu nó có như vậy quét - cố gắng tránh nó với chỉ mục thích hợp hoặc hack nó để sử dụng gợi ý (NOLOCK). Nhưng nolock gợi ý là không tốt nếu bạn cần chính xác và nhất quán dữ liệu mà không hàng phantom thể

Và - trước hết nhìn vào bế tắc graph!

Các vấn đề liên quan