4

我在这里想念什么?我在 SQL Server Profiler 中看到的查询都是针对主数据库的,这使得按数据库名称过滤变得很困难……我应该监视哪些事件或事件,以便我可以按数据库名称过滤。

更大的问题是,这里到底发生了什么?

4

6 回答 6

6

您应该从 EntityFramework 连接中删除此“MultipleActiveResultSets=True”

细绳

之后,您可以在 Profiler 中看到目标数据库名称,而不是 master。

在我的选择中,也许 ADO.NET 团队想要使用 MultipleActiveResultSets 功能来获取

来自 DB 的数据,因此他们必须访问 master。

MultipleActiveResultSets 是关于引发一个查询而不返回其所有结果(如在 LINQ 中的 foreach 语句中),同时引发另一个查询以在同一会话中获取另一个数据。

默认情况下,DB 不允许这种行为。所以.....

于 2012-11-27T03:58:54.627 回答
5

我能够解决这个问题,包括通过在我的连接字符串中添加应用程序名称来保持 MARS 处于活动状态:

Data Source=database_server;Initial Catalog=MyDatabase;Trusted Connection=true;MultipleActiveResultSets=True;Application Name=MyDatabase;

然后您可以过滤应用程序名称。

于 2012-06-14T15:57:15.600 回答
2

如果这是针对 SQL Server 2008 R2,请在跟踪属性中的“事件选择”选项卡上,选中“显示所有列”。然后,您应该能够创建基于 DatabaseName 的列过滤器。

我相信您必须暂停或停止跟踪才能进行这些更改。

于 2011-03-22T22:05:07.540 回答
2

正如 K Ivanov 指出的那样,启用 MARS(MultipleActiveResultSets)将在 SQL Profiler 中将 DatabaseName 显示为 master。通过将此设置为 false,它将显示正确的 DatabaseName,但随后您将失去拥有 MultipleActiveResults 的能力。

于 2011-08-12T17:47:07.233 回答
1

您可以使用LoginNameHostName在分析器中进行过滤

于 2011-03-22T21:25:51.280 回答
1

出于某种原因,如果我选择 SP:CacheHit 事件,它现在会显示针对正确数据库的查询,并且我可以通过它进行过滤。那个事件到底是什么?

于 2011-03-23T13:03:10.733 回答