我是DBA和软件工程师,负责管理SQLServer 2016企业数据库。应用程序Sql是用EntityFramework而不是存储过程编写的。
DBA是否应该在Linqpad中放置团队的EF查询以优化开发性能?我上周了解了LinqPad,并惊讶于它如何将Linq查询转换为SQL。有时,Linq查询是不可预测的/随机的(MS仍在致力于产品改进)。这样,我不必等待临时查询即可在暂存或生产环境中命中SQLServer Profiler。在sprint开发期间,我可以与应用程序开发人员进行调优。
这是进行性能调整的合适策略吗?我读了许多SQL博客,但是没有人讨论LinqPad策略。只是询问这是否对性能优化有用。
答案 0 :(得分:5)
您提到您的开发人员正在使用Entity Framework。请注意,默认情况下,LINQPad使用LINQ-to-SQL将LINQ表达式树转换为SQL查询。由于LINQ-to-SQL和EF不一定生成相同的SQL输出,因此您需要遵循using LINQPad with Entity Framework文档中的步骤,以确保它使用EF来创建SQL。>
但是,即使您将LINQPad配置为使用EF,仍然有机会最终调整与应用程序生成的查询不同的查询。例如,如果应用程序中使用的实体数据模型与配置LINQPad时选择的实体数据模型不同。或者,如果您的应用程序和LINQPad使用的是其他版本的EF等。
对于开发人员来说,查看和性能测试特定查询的一种更可靠的方法是配置Entity Framework,以将生成的SQL记录到某处-甚至到MSDN博客文章中的Visual Studio中的“调试输出”窗口:{{ 3}}
如果他们有正在使用的本地数据库或对dev SQL Server实例具有适当的权限,则他们也可以运行How to see the actual SQL query generated by Entity Framework来跟踪由Entity Framework生成的任何讨厌的查询。
LINQPad绝对是查看LINQ表达式如何转换为SQL查询的好方法。它有助于获得关于从哪种LINQ扩展方法中提取什么SQL的直观认识。但是,如果您要查看和调整由应用程序生成的查询,它可能不是工作的最佳工具。