最近、ユーザーがDB上のレコードを更新したいときに、タイムアウト期限切れエラーが発生することがあります.(DBでデッドロックのようなものが発生すると思います)私たちのデータベースはSQL Server 2008 R2
.
今日、SQL Server でのオプションの使用に関する記事を読みましたREAD_COMMITTED_SNAPSHOT
。このオプションは、DB のデッドロックを防ぐのに役立つと思います。その記事によると、次の 2 つの手順があります。
1- READ_COMMITTED_SNAPSHOT
DBでアクティブ化
ALTER DATABASE testDatabase SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE testDatabase SET READ_COMMITTED_SNAPSHOT ON;
2-READ_COMMITTED_SNAPSHOT
コードでオプションを使用:
using (var transactionScope =
new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel= IsolationLevel.Snapshot }))
{
// update some tables using entity framework
context.SaveChanges();
transactionScope.Complete();
}
このサンプルは、TransactionScop
文を使用しました。TransactionScop
しかし、管理には使用しませんでしたTransactions
。たとえば、モデルには継承があり、 を呼び出すと.SaveChange()
、それ自体EF
を作成および管理Transaction
します。
ステートメントを使用READ_COMMITTED_SNAPSHOT
せずに使用する方法はありますか?TransactionScop