2009-12-30 89 views
1

我的問題是使用LINQ for SQL優化性能的最佳實踐 性能在用戶界面中響應超時。調整SQL Server 2008數據庫最佳實踐的LINQ和SQL Server性能?

現在我在SQL Server 2008數據庫中有一些銷售數據,並且我在ASP的圖表中顯示了這些數據(MAT,每年,不同細分市場,細分市場增長率,市場增長百分比,,,) .NET應用程序使用LINQ for SQL來構建可執行的表達式執行

我看到了挑戰,我有一個數據庫並使用LINQ構建所有問題,並且我無法控制創建的SQL(我可以跟蹤它, ,,,)並且我不使用存儲過程,所以我的數據如何被提取就像一個黑盒子。

現在我運行一些單元測試和手動測試的應用程序,並使用Databasse引擎優化顧問等創造什麼樣的指標....

回答

1

分析,剖析,剖析。 :)

不僅要測量計時,還要注意I/O。頻繁執行的I/O密集型查詢由於緩存而可以快速執行,但可能會對整體數據庫服務器性能產生負面影響,因爲其他查詢的可用資源較少。如你所說,L2S可能有點黑盒子,所以當應用程序被真實用戶使用時,你需要嘗試複製所有場景和/或配置文件。然後用它來1)調整查詢2)添加索引3)進行任何其他需要的更改以獲得所需的性能。

我有一個專門爲Linq-to-SQL製作的分析工具,使其成爲一個「少黑盒子」 - 它允許您在生成的查詢綁定到所產生的代碼(調用堆棧)時執行運行時分析在正在執行的特定查詢中。您可以在http://www.huagati.com/L2SProfiler/

下載它,並獲得免費試用許可證爲我的探查的背景原因是在這裏稍微詳細地概述: http://huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html

......以及一些高級配置選項這裏介紹: http://huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html


,如果你有很多的表有很多列,可以幫助的另一件事是讓索引信息到代碼編輯器。這是通過將xml doc-comments與該信息添加到實體類和成員屬性完成的;那麼這些信息將顯示在VS代碼編輯器中的工具提示:

code editor tooltips showing xml doccomments for L2S entity classes, member properties etc

...這樣你可以看到已經在打字時查詢是否有覆蓋條款等地方使用的列(S)的索引爲了避免必須輸入所有內容,我也爲此創建了一個工具。請參閱http://www.huagati.com/dbmltools/的'更新文檔'功能

+0

謝謝我會看看你的工具。我對LINQ-> SQL的自發的感覺是,你可以編寫的代碼和可能性來折射一個很好的較小部分的問題與過去相比是非常好的,但是這個部分在你理解什麼/給出問題。如果linq2SQL實現將在未來更改生成的代碼,將會發生什麼情況,那麼您將在數據庫中擁有另一種訪問模式。 – salgo60 2009-12-30 09:15:42

+0

雖然未來的某些更改可能會影響生成的SQL,但我不認爲它是某種東西擔心太多。 .net 4.0中對L2S的更改至少不會對生成的SQL產生任何重大影響。無論SQL如何生成,您的數據庫(涉及的各種表中的數據量)變化,SQL Server本身中的變化等都可能會產生影響,並且這些變化都會影響您的應用程序。 – KristoferA 2009-12-30 10:34:44

+0

至於什麼/如何調優,我想這就像是一個'習慣'的東西,就像原始SQL一樣。在L2S和原始SQL中,'可調整'區域或多或少都是相同的,所以您只需要注意可能會導致不必要的I/O並嘗試消除這些事情。 – KristoferA 2009-12-30 10:40:01

2

除此之外,我通常會同時使用SQL事件探查器和CLR分析器與一些大型數據集上的某些模擬用戶關聯,並通過datacontext(這可能意味着在封面下發生的多次往返)監視長時間運行的查詢和/或長時間運行的調用。我的個人偏好也是默認禁用所有數據上下文的延遲加載和對象跟蹤,所以在大多數情況下,我必須選擇進入多個往返。雖然不能直接影響生成的SQL,但可以小心使用LoadWith/AssociateWith,並確保不會獲取可怕的大/效率低的結果集,並分解具有大量昂貴連接的查詢(有時多個輪次-trips比mondo加入大桌子便宜)。

這是關於測量 - 使用任何工具,你可以得到你的手。

+0

感謝好點 – salgo60 2009-12-30 03:30:10