1

どのテナントが照会されているかによって、非常に異なる数の行を返すマルチテナント データベースがあります。最近、1 つのテナント (TenantID = 1) に対して実行された Entity Framework (EF) クエリが、別のテナント (TenantID = 2) に対して同じクエリよりもはるかに長くかかる、パラメーター スニッフィングの問題が発生しています。私はいくつかの調査を行った結果、EF は毎回クエリを強制的に再コンパイルできるようにするクエリ ヒント (この質問を参照) をサポートしていないと判断しました。今、EF によって生成された Sql クエリをインターセプトし、実行前に「OPTION (OPTIMIZE FOR UNKNOWN)」を手動で追加できるかどうか疑問に思っています。これは可能ですか?生成された Sql を実行前に変更できるように、EF はプラガブルですか? これを行う方法の例はありますか?

4

1 に答える 1

1

問題を回避してみましたか?EFにパラメータを使用しないように強制できる場合があります。例:

var q = Context.Tenants.Where(t => t.TenantID == tenantId);

...パラメータを使用しますが、:

var r = Context.Tenants.Where(t => t.TenantID == 1);

...しません、そして私はそれを賭けます:

var s = Context.Tenants.Where("it.TenantID = 1");

...どちらもしません。

于 2012-03-28T17:25:43.180 に答える