2014-02-26 24 views
0

我們正在使用實體框架6.0來開發我們的新應用程序。我們所有的實體查詢都是從DAL層生成的。對於部署到生產環境中的當前應用程序,我們使用SQL監視工具來跟蹤SQL查詢的性能。實體框架SQL事件探查器 - 如何追溯到生成SQL的代碼

我的關注點是如何追蹤生成SQL的DAL類,以便我可以解決實體查詢的性能問題。我從工具中得到的全部是由實體框架生成的SQL查詢。

其他人如何追蹤生產中的SQL查詢問題?我知道我可以使用Glimpse,但是如果只有原始SQL,那麼如何跟蹤生成SQL的實體框架查詢?我嘗試使用謂詞構建器來添加一個dummy where子句,以查看它是否會顯示在SQL中,但它被忽略。像

predicate = predicate.Or(u => "methodName" == "methodName"); 

感謝您的幫助。

回答

0

您可以使用New Relic來檢測應用程序和SQL。他們有一個名爲「Key Transactions」的功能,它可以告訴你緩慢的事務(真正爲Web請求設置,但理論上它可以讓它適用於其他類型的應用程序),並允許你看到這些事務中的慢SQL查詢。

爲了在添加數據訪問層的方法被儀器,您可以編輯儀表XML文件作爲每https://docs.newrelic.com/docs/dotnet/dotnet-agent-custom-metrics

大家注意的關鍵交易功能是在高檔此外,它的價格。你確實得到了一段時間的免費,所以它可能值得一看,看看它是否給你提供了足夠的價值。

(我有新的文物沒有隸屬關係,順便說一句。)

+0

謝謝。但我真的很想找到一種方法來追蹤從源代碼生成SQL的位置。我唯一需要的是SQL查詢的性能配置文件。當我們發現需要很長時間的查詢時,我們需要找出生成sql的實體查詢。當他們發現性能不佳的查詢時,我想知道其他人在做什麼。 – Mark

+0

我認爲很難從SQL中反轉生成實體查詢以匹配它們,因爲不會有一對一的映射。例如。字符串比較可以在生成相同SQL的實體查詢中以多種方式完成。我想說大多數人會在代碼和SQL中使用分析器,因爲慢速運行的查詢也會顯示爲慢速運行的方法。 –

+0

謝謝喬希。好像我將不得不花時間研究可以在生產環境中運行的源代碼分析器。 – Mark

0

如果你有一個測試套件覆蓋生成的查詢代碼,你可以使用它來保存生成的SQL查詢出沿文件用生成它們的DAL方法。你可以通過下面的代碼(taken from this SO answer regarding viewing the SQL)做到這一點:

var result = from x in appEntities 
     where x.id = 32 
     select x; 

var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString(); 

如果保存這些查詢和方法的名稱在一些結構化的方式(如CSV),或許作爲試運行的副作用,你可能會通過搜索此文件以查看您從生產中看到的查詢,可以進行反向查找。您可能必須進行一些規範化處理,例如去除所有不重要的空白,並在兩種情況下取​​出參數分配。