2011-02-10 41 views
20

如何使用SQL Server優化顧問來根據實體框架查詢產生推薦?實體框架使用sp_executesql'query'而不是執行查詢,Tuning Advisor不能識別這些查詢。我可以手動獲取查詢文本,但這隻適用於非常簡單的場景。我如何以自動的方式做到這一點?實體框架和SQL Server優化顧問

UPDATE

它是否有助於如果我保存的分析信息到一個表,然後運行一些應用程序,它會剝奪「sp_executesql的」只保留查詢文本,並使用這個新的數據運行優化顧問?

+0

我喜歡這個問題。它也應該問MS連接,因爲當前的SQL生成器不是很好,這只是許多問題之一。 – 2011-02-10 13:14:35

+1

我仍然有這個問題。我已經嘗試了下面的所有建議。很難找到有關該主題的任何良好信息。 – eatfrog 2014-01-10 12:57:50

回答

0

使用SQL事件探查器來捕獲整個查詢會話。完成後,您可以保存分析器結果並通過SQL Server Tuning Advisor運行整個過程。根據我的經驗,這比根據單個查詢進行調整的結果要好得多,並且在許多方面更容易和更現實,因爲您可以使用分析器從實際應用程序使用中捕獲查詢。

編輯:

感謝您將更多地關注你問的具體問題。我不知道你是在說Tuning Advisor不瞭解sp_executesql,因爲那根本不對。您可以通過sp_executesql運行儘可能多的查詢,並將它們捕獲到配置文件中,然後通過Tuning Advisor運行該配置文件,它會爲您提供建議。

可以肯定,我只是用MS SQL Server 2008 R2做的。我創建了一個沒有索引的表,通過sp_executesql運行了一堆查詢,在SQL Profiler中捕獲了它們,然後通過Tuning Advisor運行生成的跟蹤。 Tuning Advisor對sp_executesql中嵌入的查詢給出了適當的建議。

數據庫引擎優化顧問的確切版本是10.50.1600.1,針對Microsoft SQL Server 2008 R2(RTM)運行 - 10.50.1617.0(X64)Apr 22 2011 19:23:43 Copyright(c)Microsoft Corporation Developer Edition (64位)在Windows NT 6.1(內部版本7601:Service Pack 1)。

+0

我不認爲你理解這個問題。問題在於EF發出sp_executesql命令,調優顧問不理解這些命令。 – Craig 2011-07-15 09:53:02

5

看起來問題是這樣的。如果使用「調優」模板中的SQL Profiler創建跟蹤,則不包含正確的事件。數據庫引擎優化顧問不瞭解批量完成事件中的sp_executsql語句。它在調整日誌中報告「事件不引用任何表」,類別ID爲「S008」。

捕獲跟蹤時,還需要在TSQL部分下添加「SQL:StmtCompleted」事件。

2

傑夫·沃克我指出了正確的方向 - 但他的回答是不完整的(雖然我敢肯定他知道完整的答案,只是沒有完全解釋)

在事件選擇爲SQL服務器探查:

刪除RPC的記錄:在存儲過程完成 - 這是與實體框架不佳確實

擴展到所有事件和ADD SP的項目:爲了獲得下存儲過程StmtCompleted事件查詢int跟蹤。

似乎爲我工作。

Microsoft Entity Framework人員(和分析人員)這實際上是跛腳。它曾經工作。

6

我知道這個話題有點冷。但是,由於我遇到了同樣的問題,並找到了更好的解決方案:

更改捕獲的事件是實現它的一種方法,但已有一個「模板」,它記錄了SQL服務器調優顧問所需的所有內容。

如果您選擇模板「調整」,它將有效地刪除和添加由Doug引用的事件捕獲,但也可以添加另一個。

你可以找到更多關於模板here

要激活這個模板,在「新建跟蹤」窗口中,選擇相應的模板(我沒有創建它,它已經在那裏): New trace properties

一旦你做到了,你可以檢查事件選擇,你已經需要什麼: Trace event selection

我additionaly禁用RPCCompleted,因爲我已經沒有存儲過程

我希望它能幫助一些人;)