实体框架和SQL Server调优顾问

时间:2011-02-10 12:07:14

标签: sql-server entity-framework

如何使用SQL Server Tuning Advisor根据实体框架查询生成建议?实体框架使用sp_executesql'query'而不是执行查询,而Tuning Advisor无法识别这些查询。我可以手动获取查询文本,但这只适用于非常简单的风格。我该如何自动完成?

更新

如果我将分析信息保存到表中,然后运行一些应用程序来解决“sp_executesql”并保留查询文本并使用这些新数据来运行Tuning Advisor,这会有帮助吗?

4 个答案:

答案 0 :(得分:6)

我知道这个话题有点冷。但由于我遇到了同样的问题并找到了更好的解决方案:

更改捕获的事件是一种方法,但已经有一个“模板”,它记录了SQL服务器调优顾问所需的所有内容。

如果您选择“调整”模板,它将有效地删除并添加Doug引用的事件捕获,但另一个也是。

您可以找到有关模板here

的更多信息

要激活此模板,请在“新建跟踪”窗口中选择相应的模板(我没有创建它,它已经存在): New trace properties

完成后,您可以检查事件选择,您已经拥有了所需的内容: Trace event selection

我另外禁用了RPCCompleted,因为我没有存储过程

我希望它会帮助一些人;)

答案 1 :(得分:5)

看起来问题就是这个。如果使用“调优”模板中的SQL事件探查器创建跟踪,则它不包含正确的事件。数据库引擎优化顾问不理解批处理已完成事件中的sp_executsql语句。它在调整日志中报告“事件不引用任何表”,类别ID为“S008”。

捕获跟踪时,您还需要在TSQL部分下添加“SQL:StmtCompleted”事件。

答案 2 :(得分:2)

杰夫沃克指出我正确的方向 - 但他的回答是不完整的(虽然我确信他知道完整的答案而且没有完全解释它)

在Sql Server Profiler的事件选择中:

删除RPC的日志记录:在存储过程下完成 - 这是使用实体框架做得不好的项目

扩展到所有事件并添加SP:StmtCompleted在存储过程下,以便将查询带入跟踪。

似乎适合我。

Microsoft Entity Framework People(和探查者人员)这实际上是蹩脚的。它曾经工作过。

答案 3 :(得分:0)

使用SQL事件探查器捕获整个查询会话。完成后,您可以保存探查器结果并通过SQL Server Tuning Advisor运行整个过程。根据我的经验,这比基于单个查询的调优提供了更好的结果,并且在许多方面更简单,更现实,因为您可以使用分析器从实际应用程序使用中捕获查询。

修改

感谢您更多关注您所询问的具体问题。我没有意识到你说Tuning Advisor不理解sp_executesql因为那不是真的。您可以通过sp_executesql运行任意数量的查询并在配置文件中捕获它们,然后通过Tuning Advisor运行该配置文件,它将为您提供建议。

可以肯定的是,我刚刚使用MS SQL Server 2008 R2。我创建了一个没有索引的表,通过sp_executesql运行了一堆查询,在SQL事件探查器中捕获它们,然后通过Tuning Advisor运行生成的跟踪。 Tuning Advisor为sp_executesql中嵌入的查询提供了适当的建议。

数据库引擎优化顾问的确切版本是10.50.1600.1,针对Microsoft SQL Server 2008 R2(RTM)运行 - 10.50.1617.0(X64)2011年4月22日19:23:43版权所有(c)Microsoft Corporation Developer Edition( Windows NT 6.1(Build 7601:Service Pack 1)上的64位)。