事务(进程ID 56)在锁上死锁

本文关键字:死锁 进程 ID 事务 | 更新日期: 2023-09-27 18:21:13

这里我使用的是Linq到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)在与另一个进程的锁|通信缓冲区资源上死锁,已被选为死锁牺牲品。重新运行事务。

提前感谢。。。

事务(进程ID 56)在锁上死锁

看起来您在同时进行表/clustindex扫描和更新/删除时遇到了一般的死锁锁定问题

看看你的查询结果和它的位置——如果它有这样的扫描——试着用正确的索引来避免它,或者用(NOLOCK)提示来破解它但是如果您需要准确一致的数据,而没有可能的幻影行,那么nolock提示是不好的

并且-首先看看死锁图!