我在这里缺少什么?我在SQL Server Profiler中看到的查询都是针对master数据库的,这使得很难按数据库名称进行过滤...我应该看哪个事件或事件,以便我可以按数据库名称进行过滤。
更大的问题,到底发生了什么?
答案 0 :(得分:5)
您应该从EntityFramework连接中删除此“MultipleActiveResultSets = True”
string
之后,您可以在Profiler中看到目标数据库名称,而不是master。
在我的选择中,也许ADO.NET团队想要使用MultipleActiveResultSets功能来获取
来自DB的数据,因此他们必须访问master。
MultipleActiveResultSets是关于引发一个查询而不返回其所有结果(如LINQ中的foreach语句),同时引发另一个查询以在同一会话中获取另一个数据。
默认情况下,DB不允许此行为。所以......
答案 1 :(得分:4)
我能解决这个问题,包括通过在我的连接字符串中添加应用程序名称来使MARS保持活动状态:
Data Source=database_server;Initial Catalog=MyDatabase;Trusted Connection=true;MultipleActiveResultSets=True;Application Name=MyDatabase;
然后您可以过滤应用程序名称。
答案 2 :(得分:1)
如果这是针对SQL Server 2008 R2,请在跟踪属性中的“事件选择”选项卡上,选中“显示所有列”。然后,您应该能够基于DatabaseName创建列过滤器。
我相信你必须暂停或停止追踪以进行这些更改。
答案 3 :(得分:1)
正如K Ivanov指出的那样,启用MARS(MultipleActiveResultSets)会在SQL事件探查器中将DatabaseName显示为master。通过将其设置为false,它将显示正确的DatabaseName,但是您将失去具有MultipleActiveResults的能力。
答案 4 :(得分:0)
您可以使用LoginName
或HostName
过滤分析器
答案 5 :(得分:0)
出于某种原因,如果我选择SP:CacheHit事件,它现在会显示针对正确数据库的查询,我可以按它进行过滤。究竟是什么事件?