asp.net mvcとef6で開発されたシステムがあります。データベーストランザクションがいくつかあります。約40〜50行のデータを更新して追加します。行われていないか、どれもすべてで、我々はそれを更新するために、他の類似の取引を防止するために、それを更新しながら、これらのデータを分離したいので、エンティティでのエンティティフレームワーク
私たちは私のローカルマシン上Entity Framework transactions
を使用し、それは1に約500ミリ秒を取っていました次に、テスト用の紺色にデプロイしました。最初は1〜2秒でした。その後、ライブシステムでは紺色にデプロイし、200人ほどのユーザーがシステムで作業を開始し、機能は約15〜20秒nds!は非常に奇妙です。なぜなら、システム全体が高速で安定しているからです。この関数には、たくさんの関数を使用する必要があります。関数が遅くなり、分離によって他のプロセスも遅くなっています。私たちは多くの変更を試みましたが、本当に助けられたことはありませんでした。分離レベルをスナップショットに変更することで、トランザクションが発生しても他のプロセスをスムーズにすることができましたが、トランザクション自体はまだ遅いです。私はコードを何度も使ってきたので、大丈夫だと思う。私は他のトランザクションがデータをロッキングしていると思っていましたが、一度にロックが全くないことを確認して、17秒かかりました。他のトランザクションによってデータがロックされていないことを確信しています。
なぜ私はこの問題が起こっているのか、それはコーディング上の問題であり、私はあまりにも悪いですか、それともEFかAzureの問題ですか(問題が起きる可能性は低いです。これだけ永遠に取っていますか?)
大規模なEF取引を試みた団体で、同じ問題がありましたか?
本当にありがとうと思いますが、このすべてをお読みいただきありがとうございます。
私のアプローチ
using (var transactionDBContext = new Entities(false, false, true))
{
using (var context = transactionDBContext.Database.BeginTransaction(IsolationLevel.Snapshot))
{
try
{
// inititate,
funcProcesser = new Functions(transactionDBContext, context);
#region Validation
// a lot of validation
#endregion
var response = funcProcesser.ProcessTransaction(data);
transactionDBContext.savechanges();
context.commit();
}
catch (Exception e)
{
context.Rollback();
context.Dispose();
throw e;
}
}
我々は紺碧のS3を使用して、当社のデータベースのために、それは現在のユーザー数を持つシステムのためのかなり十分である標準DS12 v2の(4つのvCPU、28ギガバイトのメモリ)です。
申し訳ありませんが、おそらく愚かな質問...しかし、あなたはすべてのリクエストでDBContextを作成、使用、および廃棄しますか?または、それを一度しか作成せず、次の要求に同じインスタンスを使用し続けますか? –
もちろん、私はいつも新しいインスタンスと新しいトランザクションを使用し、すべてコミット時に処理されます – Munzer
可能であれば、ソースコードの関連部分を投稿できますか? –