ここで何が欠けていますか?SQL Server Profilerに表示されるクエリはすべて、マスターデータベースを対象としているため、データベース名でフィルタリングするのは困難です。データベース名でフィルタリングできるように、どのイベントを監視する必要がありますか。
より大きな問題は、ここで正確に何が起こっているのかということです。
ここで何が欠けていますか?SQL Server Profilerに表示されるクエリはすべて、マスターデータベースを対象としているため、データベース名でフィルタリングするのは困難です。データベース名でフィルタリングできるように、どのイベントを監視する必要がありますか。
より大きな問題は、ここで正確に何が起こっているのかということです。
この'MultipleActiveResultSets=True'をEntityFramework接続から削除する必要があります
ストリング
その後、マスターではなく、プロファイラーにターゲットデータベース名が表示されます。
私のオプションでは、おそらくADO.NETチームはMultipleActiveResultSets機能を使用して取得したいと考えています
DBからのデータなので、マスターにアクセスする必要があります。
MultipleActiveResultSetsは、1つのクエリを発生させ、そのすべての結果を返さない(LINQのforeachステートメントのように)と同時に、別のクエリを発生させて同じセッションで別のデータを取得します。
デフォルトでは、この動作はDBでは許可されていません。それで.....
接続文字列にアプリケーション名を追加することでMARSをアクティブのままにするなど、この問題を回避することができました。
Data Source=database_server;Initial Catalog=MyDatabase;Trusted Connection=true;MultipleActiveResultSets=True;Application Name=MyDatabase;
次に、アプリケーション名でフィルタリングできます。
これがSQLServer2008 R2の場合は、トレースプロパティの[イベントの選択]タブで、[すべての列を表示する]をオンにします。これで、DatabaseNameに基づいて列フィルターを作成できるようになります。
これらの変更を行うには、トレースを一時停止または停止する必要があると思います。
K Ivanovが指摘したように、MARS(MultipleActiveResultSets)を有効にすると、SQLプロファイラーのマスターとしてDatabaseNameが表示されます。これをfalseに設定すると、適切なDatabaseNameが表示されますが、MultipleActiveResultsを使用できなくなります。
何らかの理由で、SP:CacheHitイベントを選択すると、正しいデータベースに対するクエリが表示されるようになり、それでフィルタリングできるようになりました。そのイベントは正確には何ですか?
LoginName
またはHostName
を使用してプロファイラーでフィルタリングできます