2

linq to sqlを使用しており、(XQuery)を使用してXML列をクエリする直接SQLクエリ(selectステートメント)を実行しています。このような複数のクエリが並行して実行され、デッドロック例外が発生します。

selectは実行時に何らかのロックを取得しますか?シリアル化可能な分離レベルと並行して発生する更新もあります。

この問題を解決する方法についてのポインタが役立つ可能性があります。Linq To SQLでNOLOCKを指定するにはどうすればよいですか?

4

2 に答える 2

3

スコット・ハンゼルマンのブログ投稿で確認しました。このように試す例

ProductsNewViewData viewData = new ProductsNewViewData();
using (var t = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { 
    IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted 
}))
{
  viewData.Suppliers = northwind.Suppliers.ToList();
  viewData.Categories = northwind.Categories.ToList();
}

お役に立てば幸いです。彼のブログ投稿でそれをもっと読んでください。

于 2012-10-04T05:00:26.523 に答える
3

デッドロックになるのはなぜですか?SELECT 単独では、別の SELECT とデッドロックすることはありません。もっと起こるはずです。デッドロック XML グラフを取得してここに投稿すると、分析を支援できます。デッドロックを理解したら、ソリューションを推奨できます。これは、ほとんどの場合、欠落している必要なインデックスです。

ダーティ リード (NOLOCK ヒントまたはコミットされていない分離レベルの読み取り) を有効にしないでください。これは正しいアプローチではありません。ダーティ リードは一貫性のない読み取りであり、正しくないデータを返します。必要に応じて、行のバージョン管理ベースの読み取りが必要になる場合があります。これが、まさにこのサイトがかつて問題を解決した方法です。

于 2012-10-04T06:16:44.580 に答える