2012-01-21 7 views
6

ここで私はSQLと私は30000以上の行が私のテーブルにを持ってLinqに取り組んでいます。ロック時にトランザクション(プロセスID 56)がデッドロックされましたか?

私は、データベースからレコードをフェッチするためのクエリを次のように使用:

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)がロックにデッドロックされました|他のプロセスとの通信バッファリソースがデッドロックの犠牲者として選択されました。トランザクションを再実行します。それは、このようなを持っている場合 -

+0

SQL Serverのエラーログにデッドロックエントリがあります。投稿できますか?そうでない場合は、[traceflag 1204または1222](http://msdn.microsoft.com/en-us/library/ms178104.aspx)をオンにします。 – Andomar

+0

クエリの実行時間はどのくらいですか? – RobJohnson

+1

どのバージョンのSQL Serverですか? [2008年にデフォルトの拡張イベントセッションからデッドロックグラフを取得できるかどうかを確認する](http://dba.stackexchange.com/questions/10644/deadlock-error-isnt-returning-the-deadlock-sql/10646#10646 )。それ以外の場合は、この次回のキャプチャを設定します。 –

答えて

2

はあなたが同時にテーブルに一般的なデッドロックロックの問題を持っているように/スキャンclustindexおよび更新/あなたの結果のクエリで、そのPALNで

ルックを削除ルックス

事前のおかげで...スキャン - 適切な索引付けでそれを回避するか、(NOLOCK)ヒントを使用するようにハックしてください。デッドロックのグラフでは、すべての見ての最初の- あなたは可能幻ロー

とせずに正確で一貫性のあるデータが必要な場合しかし NOLOCKヒントは良いではありません!

関連する問題