交易(进程ID 56)在锁定时陷入僵局?

时间:2012-01-21 12:17:39

标签: c# asp.net sql-server linq-to-sql

这里我正在使用 Linq to sql在我的表中有超过30000行

我使用以下查询从数据库中获取记录:

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

有些时候我的查询成功运行或者有一段时间我得到错误:事务(进程ID 56)在锁定时死锁与另一个进程通信缓冲资源并被选为死锁牺牲品。重新运行该交易。

提前致谢...

1 个答案:

答案 0 :(得分:2)

看起来你有同时表/ clustindex扫描和更新/删除的一般死锁锁定问题

查看您生成的查询及其所在的查询 - 如果它有这样的扫描 - 尝试通过正确的索引或黑客使用(NOLOCK)提示来避免它。 但是如果您需要精确且一致的数据而没有可能的幻像行,那么nolock提示并不好

并且 - 首先查看死锁图!