如何使用SQL Server Tuning Advisor根据实体框架查询生成建议?实体框架使用sp_executesql'query'而不是执行查询,而Tuning Advisor无法识别这些查询。我可以手动获取查询文本,但这只适用于非常简单的风格。我该如何自动完成?
更新
如果我将分析信息保存到表中,然后运行一些应用程序来解决“sp_executesql”并保留查询文本并使用这些新数据来运行Tuning Advisor,这会有帮助吗?
答案 0 :(得分:6)
我知道这个话题有点冷。但由于我遇到了同样的问题并找到了更好的解决方案:
更改捕获的事件是一种方法,但已经有一个“模板”,它记录了SQL服务器调优顾问所需的所有内容。
如果您选择“调整”模板,它将有效地删除并添加Doug引用的事件捕获,但另一个也是。
您可以找到有关模板here
的更多信息要激活此模板,请在“新建跟踪”窗口中选择相应的模板(我没有创建它,它已经存在):
完成后,您可以检查事件选择,您已经拥有了所需的内容:
我另外禁用了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位)。