Транзакция (ID процесса 56) заблокирована при блокировке? - PullRequest
6 голосов
/ 21 января 2012

Здесь я работаю с 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 Ответ

2 голосов
/ 21 января 2012

Похоже, у вас есть общая проблема блокировок тупиковой ситуации с одновременным сканированием таблиц / clustindex и обновлением / удалением

Посмотрите на ваш результирующий запрос и на его поле - если он имеет такое сканирование - попробуйте избежать его с правильныминдексировать или взломать его, чтобы использовать (NOLOCK) подсказку. Но подсказка nolock не годится, если вам нужны точные и непротиворечивые данные без возможных фантомных строк

И - прежде всего посмотрите на график взаимоблокировок!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...